Skip to content

Commit bb57e80

Browse files
committed
B Fixed keepalive OPTIONS message not having session/uri, added basic RTCP Receiver report
1 parent 2ca1958 commit bb57e80

3 files changed

Lines changed: 60 additions & 2 deletions

File tree

src/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<Nullable>disable</Nullable>
66
<ImplicitUsings>disable</ImplicitUsings>
77
<Title>$(ProjectName)</Title>
8-
<Version>0.1.2</Version>
8+
<Version>0.1.3</Version>
99
<Authors>Lukas Volf</Authors>
1010
<Copyright>MIT</Copyright>
1111
<PackageProjectUrl>https://github.com/jimm98y/SharpRealTimeStreaming</PackageProjectUrl>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<Project>
2+
<PropertyGroup>
3+
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
4+
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
5+
<Nullable>disable</Nullable>
6+
<ImplicitUsings>disable</ImplicitUsings>
7+
<Title>$(ProjectName)</Title>
8+
<Version>0.1.2</Version>
9+
<Authors>Lukas Volf</Authors>
10+
<Copyright>MIT</Copyright>
11+
<PackageProjectUrl>https://github.com/jimm98y/SharpRealTimeStreaming</PackageProjectUrl>
12+
<PackageReadmeFile>README.md</PackageReadmeFile>
13+
<RepositoryUrl>https://github.com/jimm98y/SharpRealTimeStreaming</RepositoryUrl>
14+
<RepositoryType>git</RepositoryType>
15+
<PackageTags>rtsp;rtp;video;streaming;h264;h265;aac;netstandard20</PackageTags>
16+
<NeutralLanguage>en-US</NeutralLanguage>
17+
<AssemblyVersion>1.0.0</AssemblyVersion>
18+
<FileVersion>$(Version)</FileVersion>
19+
<PackageLicenseExpression>MIT</PackageLicenseExpression>
20+
<Description>Simple RTSP client and server. Supports H264, H265 and AAC.</Description>
21+
</PropertyGroup>
22+
23+
<ItemGroup>
24+
<None Include="..\..\README.md">
25+
<Pack>True</Pack>
26+
<PackagePath>\</PackagePath>
27+
</None>
28+
</ItemGroup>
29+
30+
<PropertyGroup>
31+
<PackageOutputPath>$(ProjectDir)..\..\nugets</PackageOutputPath>
32+
</PropertyGroup>
33+
</Project>

src/SharpRTSPClient/RTSPClient.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,28 @@ public void SendAudioRTCP(byte[] rtcp)
531531
_audioRtpTransport.WriteToControlPort(rtcp);
532532
}
533533

534+
public byte[] BuildRtcpReceiverReport(uint ssrc)
535+
{
536+
// TODO: do not send just an empty report
537+
// https://www.rfc-editor.org/rfc/rfc3550.txt
538+
// https://learn.microsoft.com/en-us/openspecs/office_protocols/ms-rtp/953b588a-4e9d-4ec8-b4d1-913f9b9d04ef
539+
byte[] rtcp_receiver_report = new byte[8];
540+
int version = 2;
541+
int paddingBit = 0;
542+
int reportCount = 0; // an empty report
543+
int packetType = 201; // Receiver Report
544+
int length = rtcp_receiver_report.Length / 4 - 1; // num 32 bit words minus 1
545+
rtcp_receiver_report[0] = (byte)((version << 6) + (paddingBit << 5) + reportCount);
546+
rtcp_receiver_report[1] = (byte)packetType;
547+
rtcp_receiver_report[2] = (byte)(length >> 8 & 0xFF);
548+
rtcp_receiver_report[3] = (byte)(length >> 0 & 0XFF);
549+
rtcp_receiver_report[4] = (byte)(ssrc >> 24 & 0xFF);
550+
rtcp_receiver_report[5] = (byte)(ssrc >> 16 & 0xFF);
551+
rtcp_receiver_report[6] = (byte)(ssrc >> 8 & 0xFF);
552+
rtcp_receiver_report[7] = (byte)(ssrc >> 0 & 0xFF);
553+
return rtcp_receiver_report;
554+
}
555+
534556
private void VideoRtpDataReceived(object sender, RtspDataEventArgs e)
535557
{
536558
if (e.Data.Data.IsEmpty)
@@ -1342,7 +1364,10 @@ private void SendKeepAlive(object sender, System.Timers.ElapsedEventArgs e)
13421364
else
13431365
{
13441366
keepAliveMessage = new RtspRequestOptions
1345-
{ };
1367+
{
1368+
RtspUri = _uri,
1369+
Session = _session
1370+
};
13461371
}
13471372

13481373
keepAliveMessage.AddAuthorization(_authentication, _uri, _rtspSocket.NextCommandIndex());

0 commit comments

Comments
 (0)