174 lines
4.2 KiB
C++
174 lines
4.2 KiB
C++
//
|
||
// Created by xzl on 2021/3/27.
|
||
//
|
||
|
||
#ifndef ZLMEDIAKIT_SDP_H
|
||
#define ZLMEDIAKIT_SDP_H
|
||
|
||
#include <list>
|
||
#include <string>
|
||
using namespace std;
|
||
|
||
enum class RtpDirection {
|
||
invalid = -1,
|
||
//只发送
|
||
sendonly,
|
||
//只接收
|
||
revonly,
|
||
//同时发送接收
|
||
sendrecv,
|
||
//禁止发送数据
|
||
inactive
|
||
};
|
||
|
||
enum class DtlsRole {
|
||
invalid = -1,
|
||
//客户端
|
||
active,
|
||
//服务端
|
||
passive,
|
||
//既可作做客户端也可以做服务端
|
||
actpass,
|
||
};
|
||
|
||
enum class SdpType {
|
||
invalid = -1,
|
||
offer,
|
||
answer
|
||
};
|
||
|
||
//
|
||
//v=0
|
||
//o=- 7268199939077294076 2 IN IP4 127.0.0.1
|
||
//s=-
|
||
//t=0 0
|
||
//a=group:BUNDLE video
|
||
//a=msid-semantic: WMS
|
||
//m=video 9 RTP/SAVPF 96
|
||
//c=IN IP4 0.0.0.0
|
||
//a=rtcp:9 IN IP4 0.0.0.0
|
||
//a=ice-ufrag:y94W
|
||
//a=ice-pwd:fuz1hZCAarezk35fruVGfdyP
|
||
//a=ice-options:trickle
|
||
//a=fingerprint:sha-256 FF:8C:29:B8:B3:2B:45:F5:21:D2:47:D5:EE:B7:F8:BB:F1:DC:95:47:7B:20:B4:59:75:0F:16:93:D0:AC:D2:73
|
||
//a=setup:active
|
||
//a=mid:video
|
||
//a=recvonly
|
||
//a=rtcp-mux
|
||
//a=rtpmap:96 H264/90000
|
||
//a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
|
||
|
||
//Session description
|
||
// v= (protocol version)
|
||
// o= (originator and session identifier)
|
||
// s= (session name)
|
||
// i=* (session information)
|
||
// u=* (URI of description)
|
||
// e=* (email address)
|
||
// p=* (phone number)
|
||
// c=* (connection information -- not required if included in
|
||
// all media)
|
||
// b=* (zero or more bandwidth information lines)
|
||
// One or more time descriptions ("t=" and "r=" lines; see below)
|
||
// z=* (time zone adjustments)
|
||
// k=* (encryption key)
|
||
// a=* (zero or more session attribute lines)
|
||
// Zero or more media descriptions
|
||
//
|
||
// Time description
|
||
// t= (time the session is active)
|
||
// r=* (zero or more repeat times)
|
||
//
|
||
// Media description, if present
|
||
// m= (media name and transport address)
|
||
// i=* (media title)
|
||
// c=* (connection information -- optional if included at
|
||
// session level)
|
||
// b=* (zero or more bandwidth information lines)
|
||
// k=* (encryption key)
|
||
// a=* (zero or more media attribute lines)
|
||
|
||
class SdpItem {
|
||
public:
|
||
SdpItem() = default;
|
||
virtual ~SdpItem() = default;
|
||
virtual void parse(const string &str) = 0;
|
||
virtual string toString() const = 0;
|
||
};
|
||
|
||
class SdpTime : public SdpItem{
|
||
public:
|
||
float start;
|
||
float end;
|
||
void parse(const string &str) override;
|
||
string toString() const override;
|
||
};
|
||
|
||
class SdpAttr : public SdpItem{
|
||
public:
|
||
string name;
|
||
string value;
|
||
void parse(const string &str) override;
|
||
string toString() const override;
|
||
};
|
||
|
||
class SdpOrigin : public SdpItem{
|
||
public:
|
||
// https://datatracker.ietf.org/doc/rfc4566/?include_text=1 5.2. Origin ("o=")
|
||
// o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
|
||
// o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
|
||
string username;
|
||
string session_id;
|
||
string session_version;
|
||
string nettype;
|
||
string addrtype;
|
||
string address;
|
||
void parse(const string &str) override;
|
||
string toString() const override;
|
||
};
|
||
|
||
class SdpConnection : public SdpItem {
|
||
public:
|
||
// https://datatracker.ietf.org/doc/rfc4566/?include_text=1 5.7. Connection Data ("c=")
|
||
// c=IN IP4 224.2.17.12/127
|
||
// c=<nettype> <addrtype> <connection-address>
|
||
string nettype;
|
||
string addrtype;
|
||
string address;
|
||
void parse(const string &str) override;
|
||
string toString() const override;
|
||
};
|
||
|
||
class RtcMedia {
|
||
public:
|
||
|
||
};
|
||
class RtcSdp {
|
||
public:
|
||
/////Session description(会话级别描述)////
|
||
//v= (protocol version)
|
||
int version;
|
||
//o= (session origin information )
|
||
SdpOrigin origin;
|
||
//s= (session name)
|
||
string session_name;
|
||
//i=* (session information)
|
||
string session_information;
|
||
//c=* (connection information -- not required if included in all media)
|
||
SdpConnection connection;
|
||
|
||
//// Time description ////
|
||
//t= (time the session is active)
|
||
SdpTime time;
|
||
//r=* (zero or more repeat times)
|
||
int repeat;
|
||
//a=* (zero or more media attribute lines)
|
||
list<SdpAttr> attributes;
|
||
|
||
};
|
||
|
||
|
||
|
||
|
||
#endif //ZLMEDIAKIT_SDP_H
|