Skip to content

Commit 0d71ced

Browse files
committed
F Added SDP mungling
1 parent 9a9baf4 commit 0d71ced

2 files changed

Lines changed: 35 additions & 22 deletions

File tree

src/RTSPServerFFmpeg/Program.cs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,24 @@
1414
server.AddVideoTrack(new ProxyTrack(0, "rtp://127.0.0.1:11111"));
1515
server.AddAudioTrack(new ProxyTrack(1, "rtp://127.0.0.1:11113"));
1616
// original
17-
//string sdp =
18-
// "v=0\r\n" +
19-
// "o=- 0 0 IN IP4 127.0.0.1\r\n" +
20-
// "s=No Name\r\n" +
21-
// "t=0 0\r\n" +
22-
// "a=tool:libavformat 60.3.100\r\n" +
23-
// "m=video 11111 RTP/AVP 96\r\n" +
24-
// "c=IN IP4 127.0.0.1\r\n" +
25-
// "b=AS:587\r\n" +
26-
// "a=rtpmap:96 H264/90000\r\n" +
27-
// "a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAHqzZQKAv+WagwCDW4AAAAwAgAAAGAeLFssA=,aOvjyyLA; profile-level-id=64001E\r\n" +
28-
// "m=audio 11113 RTP/AVP 97\r\n" +
29-
// "c=IN IP4 127.0.0.1\r\n" +
30-
// "b=AS:69\r\n" +
31-
// "a=rtpmap:97 MPEG4-GENERIC/44100/1\r\n" +
32-
// "a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=120856E500\r\n\r\n";
33-
3417
string sdp =
3518
"v=0\r\n" +
3619
"o=- 0 0 IN IP4 127.0.0.1\r\n" +
3720
"s=No Name\r\n" +
3821
"t=0 0\r\n" +
3922
"a=tool:libavformat 60.3.100\r\n" +
4023
"m=video 11111 RTP/AVP 96\r\n" +
41-
"a=control:trackID=0\n" + // TODO: add this
4224
"c=IN IP4 127.0.0.1\r\n" +
4325
"b=AS:587\r\n" +
4426
"a=rtpmap:96 H264/90000\r\n" +
4527
"a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAHqzZQKAv+WagwCDW4AAAAwAgAAAGAeLFssA=,aOvjyyLA; profile-level-id=64001E\r\n" +
4628
"m=audio 11113 RTP/AVP 97\r\n" +
47-
"a=control:trackID=1\n" + // TODO: add this
4829
"c=IN IP4 127.0.0.1\r\n" +
4930
"b=AS:69\r\n" +
5031
"a=rtpmap:97 MPEG4-GENERIC/44100/1\r\n" +
51-
"a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=120856E500\r\n\r\n";
32+
"a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=120856E500\r\n\r\n";
5233

53-
server.OverrideSDP(sdp);
34+
server.OverrideSDP(sdp, true);
5435

5536
try
5637
{

src/SharpRTSPServer/RTSPServer.cs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
using Microsoft.Extensions.Logging;
22
using Rtsp;
33
using Rtsp.Messages;
4+
using Rtsp.Sdp;
45
using System;
56
using System.Buffers;
67
using System.Collections.Generic;
78
using System.Diagnostics;
89
using System.Diagnostics.Contracts;
10+
using System.IO;
911
using System.Linq;
1012
using System.Net;
1113
using System.Net.Sockets;
@@ -746,8 +748,38 @@ protected virtual void Dispose(bool disposing)
746748
}
747749
}
748750

749-
public void OverrideSDP(string sdp)
751+
public void OverrideSDP(string sdp, bool mungleSDP = true)
750752
{
753+
if (mungleSDP)
754+
{
755+
if (!sdp.Contains("a=control:"))
756+
{
757+
StringBuilder builder = new StringBuilder();
758+
int mediaIndex = 0;
759+
760+
// we have to fill in the trackID to identify the session in RTSP
761+
using (var textReader = new StringReader(sdp))
762+
{
763+
while(true)
764+
{
765+
string line = textReader.ReadLine();
766+
767+
if (line == null)
768+
break;
769+
770+
builder.AppendLine(line);
771+
772+
if(line.StartsWith("m="))
773+
{
774+
builder.AppendLine($"a=control:trackID={mediaIndex++}");
775+
}
776+
}
777+
}
778+
779+
sdp = builder.ToString();
780+
}
781+
}
782+
751783
this._sdp = sdp;
752784
}
753785

0 commit comments

Comments
 (0)