{"id":22683498,"url":"https://github.com/notedit/sdp","last_synced_at":"2025-08-13T11:47:13.781Z","repository":{"id":35138635,"uuid":"182029023","full_name":"notedit/sdp","owner":"notedit","description":"sdp encode/decode for golang","archived":false,"fork":false,"pushed_at":"2024-02-29T11:32:17.000Z","size":60,"stargazers_count":32,"open_issues_count":1,"forks_count":19,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-26T12:46:56.835Z","etag":null,"topics":["golang","sdp","webrtc"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/notedit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-18T06:27:14.000Z","updated_at":"2025-01-16T05:43:30.000Z","dependencies_parsed_at":"2024-02-29T13:05:02.431Z","dependency_job_id":"2df0dc81-fa53-49e5-b5d1-cd56702d0f2a","html_url":"https://github.com/notedit/sdp","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notedit%2Fsdp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notedit%2Fsdp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notedit%2Fsdp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notedit%2Fsdp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/notedit","download_url":"https://codeload.github.com/notedit/sdp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248612021,"owners_count":21133222,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","sdp","webrtc"],"created_at":"2024-12-09T21:12:20.314Z","updated_at":"2025-04-12T18:26:40.447Z","avatar_url":"https://github.com/notedit.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sdp\nsdp encode/decode for golang\n\n\n\n\n## How to use\n\n```go\n\nconst sdpstr = \"v=1\\r\\n\" +\n\t\"o=- 4327261771880257373 2 IN IP4 127.0.0.1\\r\\n\" +\n\t\"s=-\\r\\n\" +\n\t\"t=1 1\\r\\n\" +\n\t\"a=group:BUNDLE audio video\\r\\n\" +\n\t\"a=msid-semantic: WMS xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj\\r\\n\" +\n\t\"m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126\\r\\n\" +\n\t\"c=IN IP4 0.0.0.0\\r\\n\" +\n\t\"a=rtcp:9 IN IP4 0.0.0.0\\r\\n\" +\n\t\"a=ice-ufrag:ez5G\\r\\n\" +\n\t\"a=ice-pwd:1F1qS++jzWLSQi0qQDZkX/QV\\r\\n\" +\n\t\"a=candidate:1 1 UDP 33554431 35.188.215.104 59110 typ host\\r\\n\" +\n\t\"a=fingerprint:sha-256 D2:FA:0E:C3:22:59:5E:14:95:69:92:3D:13:B4:84:24:2C:C2:A2:C0:3E:FD:34:8E:5E:EA:6F:AF:52:CE:E6:0F\\r\\n\" +\n\t\"a=setup:actpass\\r\\n\" +\n\t\"a=connection:new\\r\\n\" +\n\t\"a=mid:audio\\r\\n\" +\n\t\"a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\r\\n\" +\n\t\"a=sendrecv\\r\\n\" +\n\t\"a=rtcp-mux\\r\\n\" +\n\t\"a=rtpmap:111 opus/48000/2\\r\\n\" +\n\t\"a=rtcp-fb:111 transport-cc\\r\\n\" +\n\t\"a=fmtp:111 minptime=10;useinbandfec=1\\r\\n\" +\n\t\"a=rtpmap:103 ISAC/16000\\r\\n\" +\n\t\"a=rtpmap:104 ISAC/32000\\r\\n\" +\n\t\"a=rtpmap:9 G722/8000\\r\\n\" +\n\t\"a=rtpmap:0 PCMU/8000\\r\\n\" +\n\t\"a=rtpmap:8 PCMA/8000\\r\\n\" +\n\t\"a=rtpmap:106 CN/32000\\r\\n\" +\n\t\"a=rtpmap:105 CN/16000\\r\\n\" +\n\t\"a=rtpmap:13 CN/8000\\r\\n\" +\n\t\"a=rtpmap:110 telephone-event/48000\\r\\n\" +\n\t\"a=rtpmap:112 telephone-event/32000\\r\\n\" +\n\t\"a=rtpmap:113 telephone-event/16000\\r\\n\" +\n\t\"a=rtpmap:126 telephone-event/8000\\r\\n\" +\n\t\"a=ssrc:3510681183 cname:loqPWNg7JMmrFUnr\\r\\n\" +\n\t\"a=ssrc:3510681183 msid:xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj 7ea47500-22eb-4815-a899-c74ef321b6ee\\r\\n\" +\n\t\"a=ssrc:3510681183 mslabel:xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj\\r\\n\" +\n\t\"a=ssrc:3510681183 label:7ea47500-22eb-4815-a899-c74ef321b6ee\\r\\n\" +\n\t\"m=video 9 UDP/TLS/RTP/SAVPF 96 98 100 102 127 125 97 99 101 124\\r\\n\" +\n\t\"c=IN IP4 0.0.0.0\\r\\n\" +\n\t\"a=connection:new\\r\\n\" +\n\t\"a=rtcp:9 IN IP4 0.0.0.0\\r\\n\" +\n\t\"a=ice-ufrag:ez5G\\r\\n\" +\n\t\"a=ice-pwd:1F1qS++jzWLSQi0qQDZkX/QV\\r\\n\" +\n\t\"a=candidate:1 1 UDP 33554431 35.188.215.104 59110 typ host\\r\\n\" +\n\t\"a=fingerprint:sha-256 D2:FA:0E:C3:22:59:5E:14:95:69:92:3D:13:B4:84:24:2C:C2:A2:C0:3E:FD:34:8E:5E:EA:6F:AF:52:CE:E6:0F\\r\\n\" +\n\t\"a=setup:actpass\\r\\n\" +\n\t\"a=mid:video\\r\\n\" +\n\t\"a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\\r\\n\" +\n\t\"a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\n\" +\n\t\"a=extmap:4 urn:3gpp:video-orientation\\r\\n\" +\n\t\"a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\n\" +\n\t\"a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\\r\\n\" +\n\t\"a=sendrecv\\r\\n\" +\n\t\"a=rtcp-mux\\r\\n\" +\n\t\"a=rtcp-rsize\\r\\n\" +\n\t\"a=rtpmap:96 VP8/90000\\r\\n\" +\n\t\"a=rtcp-fb:96 ccm fir\\r\\n\" +\n\t\"a=rtcp-fb:96 nack\\r\\n\" +\n\t\"a=rtcp-fb:96 nack pli\\r\\n\" +\n\t\"a=rtcp-fb:96 goog-remb\\r\\n\" +\n\t\"a=rtcp-fb:96 transport-cc\\r\\n\" +\n\t\"a=rtpmap:98 VP9/90000\\r\\n\" +\n\t\"a=rtcp-fb:98 ccm fir\\r\\n\" +\n\t\"a=rtcp-fb:98 nack\\r\\n\" +\n\t\"a=rtcp-fb:98 nack pli\\r\\n\" +\n\t\"a=rtcp-fb:98 goog-remb\\r\\n\" +\n\t\"a=rtcp-fb:98 transport-cc\\r\\n\" +\n\t\"a=rtpmap:100 H264/90000\\r\\n\" +\n\t\"a=rtcp-fb:100 ccm fir\\r\\n\" +\n\t\"a=rtcp-fb:100 nack\\r\\n\" +\n\t\"a=rtcp-fb:100 nack pli\\r\\n\" +\n\t\"a=rtcp-fb:100 goog-remb\\r\\n\" +\n\t\"a=rtcp-fb:100 transport-cc\\r\\n\" +\n\t\"a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\\r\\n\" +\n\t\"a=rtpmap:102 red/90000\\r\\n\" +\n\t\"a=rtpmap:127 ulpfec/90000\\r\\n\" +\n\t\"a=rtpmap:125 flexfec-03/90000\\r\\n\" +\n\t\"a=rtcp-fb:125 ccm fir\\r\\n\" +\n\t\"a=rtcp-fb:125 nack\\r\\n\" +\n\t\"a=rtcp-fb:125 nack pli\\r\\n\" +\n\t\"a=rtcp-fb:125 goog-remb\\r\\n\" +\n\t\"a=rtcp-fb:125 transport-cc\\r\\n\" +\n\t\"a=fmtp:125 repair-window=10000000\\r\\n\" +\n\t\"a=rtpmap:97 rtx/90000\\r\\n\" +\n\t\"a=fmtp:97 apt=96\\r\\n\" +\n\t\"a=rtpmap:99 rtx/90000\\r\\n\" +\n\t\"a=fmtp:99 apt=98\\r\\n\" +\n\t\"a=rtpmap:101 rtx/90000\\r\\n\" +\n\t\"a=fmtp:101 apt=100\\r\\n\" +\n\t\"a=rtpmap:124 rtx/90000\\r\\n\" +\n\t\"a=fmtp:124 apt=102\\r\\n\" +\n\t\"a=ssrc-group:FID 3004364195 1126032854\\r\\n\" +\n\t\"a=ssrc-group:FEC-FR 3004364195 1080772241\\r\\n\" +\n\t\"a=ssrc:3004364195 cname:loqPWNg7JMmrFUnr\\r\\n\" +\n\t\"a=ssrc:3004364195 msid:xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj cf093ab0-0b28-4930-8fe1-7ca8d529be25\\r\\n\" +\n\t\"a=ssrc:3004364195 mslabel:xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj\\r\\n\" +\n\t\"a=ssrc:3004364195 label:cf093ab0-0b28-4930-8fe1-7ca8d529be25\\r\\n\" +\n\t\"a=ssrc:1126032854 cname:loqPWNg7JMmrFUnr\\r\\n\" +\n\t\"a=ssrc:1126032854 msid:xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj cf093ab0-0b28-4930-8fe1-7ca8d529be25\\r\\n\" +\n\t\"a=ssrc:1126032854 mslabel:xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj\\r\\n\" +\n\t\"a=ssrc:1126032854 label:cf093ab0-0b28-4930-8fe1-7ca8d529be25\\r\\n\" +\n\t\"a=ssrc:1080772241 cname:loqPWNg7JMmrFUnr\\r\\n\" +\n\t\"a=ssrc:1080772241 msid:xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj cf093ab0-0b28-4930-8fe1-7ca8d529be25\\r\\n\" +\n\t\"a=ssrc:1080772241 mslabel:xIKmAwWv4ft4ULxNJGhkHzvPaCkc8EKo4SGj\\r\\n\" +\n\t\"a=ssrc:1080772241 label:cf093ab0-0b28-4930-8fe1-7ca8d529be25\\r\\n\"\n\n\noffer, err := Parse(sdpstr)\nif err != nil {\n    panic(err)\n}\n\n\nmediaInfo := offer.GetMedia(\"audio\")\n\ncodecInfo := mediaInfo.GetCodecForType(111)\n\nif codecInfo.GetCodec() != \"opus\" {\n    panic(\"can not find opus codec\")\n}\n\nif len(offer.GetMedias()) != 2 {\n    panic(\"parse media error\")\n}\n\ndtls := offer.GetDTLS()\n\nif dtls.GetHash() != \"sha-256\" {\n    panic(\"parse dtls error\")\n}\n\n\n\nfmt.Println(offer.String())\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotedit%2Fsdp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnotedit%2Fsdp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotedit%2Fsdp/lists"}