diff --git a/webrtc/Sdp.cpp b/webrtc/Sdp.cpp new file mode 100644 index 00000000..484a9980 --- /dev/null +++ b/webrtc/Sdp.cpp @@ -0,0 +1,5 @@ +// +// Created by xzl on 2021/3/27. +// + +#include "Sdp.h" diff --git a/webrtc/Sdp.h b/webrtc/Sdp.h new file mode 100644 index 00000000..6756b11c --- /dev/null +++ b/webrtc/Sdp.h @@ -0,0 +1,173 @@ +// +// Created by xzl on 2021/3/27. +// + +#ifndef ZLMEDIAKIT_SDP_H +#define ZLMEDIAKIT_SDP_H + +#include +#include +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= + 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= + 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 attributes; + +}; + + + + +#endif //ZLMEDIAKIT_SDP_H