@@ -180,12 +180,12 @@ public RTCPTWCCFeedback(ReadOnlySpan<byte> packet)
180180 packet = packet . Slice ( RTCPHeader . HEADER_BYTES_LENGTH ) ;
181181
182182 // Parse sender and media SSRCs
183- SenderSSRC = ReadUInt32 ( ref packet ) ;
184- MediaSSRC = ReadUInt32 ( ref packet ) ;
183+ SenderSSRC = BinaryOperations . ReadUInt32BigEndian ( ref packet ) ;
184+ MediaSSRC = BinaryOperations . ReadUInt32BigEndian ( ref packet ) ;
185185
186186 // Parse Base Sequence Number and Packet Status Count
187- BaseSequenceNumber = ReadUInt16 ( ref packet ) ;
188- PacketStatusCount = ReadUInt16 ( ref packet ) ;
187+ BaseSequenceNumber = BinaryOperations . ReadUInt16BigEndian ( ref packet ) ;
188+ PacketStatusCount = BinaryOperations . ReadUInt16BigEndian ( ref packet ) ;
189189
190190 // Parse Reference Time and Feedback Packet Count
191191 ReferenceTime = ParseReferenceTime ( ref packet , out byte fbCount ) ;
@@ -271,38 +271,6 @@ private uint ParseReferenceTime(ref ReadOnlySpan<byte> packet, out byte fbCount)
271271 return ( uint ) ( ( b1 << 16 ) | ( b2 << 8 ) | b3 ) ;
272272 }
273273
274- private List < TWCCPacketStatusType > ParseStatusChunks ( byte [ ] packet , ref int offset )
275- {
276- var statusSymbols = new List < TWCCPacketStatusType > ( ) ;
277- int remainingStatuses = PacketStatusCount ;
278-
279- while ( remainingStatuses > 0 )
280- {
281- if ( offset + 2 > packet . Length )
282- {
283- throw new ArgumentException ( $ "Packet truncated during status chunk parsing. Expected { remainingStatuses } more statuses.") ;
284- }
285-
286- var chunk = ReadUInt16 ( packet , ref offset ) ;
287- var chunkType = chunk >> 14 ;
288-
289- switch ( chunkType )
290- {
291- case 0 : // Run Length Chunk
292- ParseRunLengthChunk ( chunk , statusSymbols , ref remainingStatuses ) ;
293- break ;
294- case 2 : // Two-bit Status Vector
295- ParseTwoBitStatusVector ( chunk , statusSymbols , ref remainingStatuses ) ;
296- break ;
297- case 3 : // One-bit Status Vector
298- ParseOneBitStatusVector ( chunk , statusSymbols , ref remainingStatuses ) ;
299- break ;
300- }
301- }
302-
303- return statusSymbols ;
304- }
305-
306274 private List < TWCCPacketStatusType > ParseStatusChunks ( ref ReadOnlySpan < byte > packet )
307275 {
308276 var statusSymbols = new List < TWCCPacketStatusType > ( ) ;
@@ -315,7 +283,7 @@ private List<TWCCPacketStatusType> ParseStatusChunks(ref ReadOnlySpan<byte> pack
315283 throw new ArgumentException ( $ "Packet truncated during status chunk parsing. Expected { remainingStatuses } more statuses.") ;
316284 }
317285
318- var chunk = ReadUInt16 ( ref packet ) ;
286+ var chunk = BinaryOperations . ReadUInt16BigEndian ( ref packet ) ;
319287 var chunkType = chunk >> 14 ;
320288
321289 switch ( chunkType )
@@ -600,15 +568,15 @@ private void WriteBytesCore(Span<byte> buffer)
600568 buffer = buffer . Slice ( RTCPHeader . HEADER_BYTES_LENGTH ) ;
601569
602570 // Write Sender and Media SSRC.
603- WriteUInt32 ( ref buffer , SenderSSRC ) ;
604- WriteUInt32 ( ref buffer , MediaSSRC ) ;
571+ BinaryOperations . WriteUInt32BigEndian ( ref buffer , SenderSSRC ) ;
572+ BinaryOperations . WriteUInt32BigEndian ( ref buffer , MediaSSRC ) ;
605573
606574 // Write Base Sequence Number and Packet Status Count.
607- WriteUInt16 ( ref buffer , BaseSequenceNumber ) ;
608- WriteUInt16 ( ref buffer , PacketStatusCount ) ;
575+ BinaryOperations . WriteUInt16BigEndian ( ref buffer , BaseSequenceNumber ) ;
576+ BinaryOperations . WriteUInt16BigEndian ( ref buffer , PacketStatusCount ) ;
609577
610578 // Build the 32-bit word for ReferenceTime and FeedbackPacketCount.
611- WriteUInt32 ( ref buffer , ( ReferenceTime << 8 ) | FeedbackPacketCount ) ;
579+ BinaryOperations . WriteUInt32BigEndian ( ref buffer , ( ReferenceTime << 8 ) | FeedbackPacketCount ) ;
612580
613581 for ( var i = 0 ; i < PacketStatuses . Count ; )
614582 {
@@ -646,7 +614,7 @@ private void WriteBytesCore(Span<byte> buffer)
646614
647615 var chunk = ( ushort ) ( statusBits << 12 ) ;
648616 chunk |= ( ushort ) ( runLength & 0x0FFF ) ;
649- WriteUInt16 ( ref buffer , chunk ) ;
617+ BinaryOperations . WriteUInt16BigEndian ( ref buffer , chunk ) ;
650618 i += runLength ;
651619 }
652620 else
@@ -677,7 +645,7 @@ private void WriteBytesCore(Span<byte> buffer)
677645
678646 chunk |= ( ushort ) ( statusBits << ( 12 - 2 * j ) ) ;
679647 }
680- WriteUInt16 ( ref buffer , chunk ) ;
648+ BinaryOperations . WriteUInt16BigEndian ( ref buffer , chunk ) ;
681649 i += count ;
682650 }
683651 }
@@ -713,77 +681,5 @@ public override string ToString()
713681 $ "StatusCount={ PacketStatusCount } , RefTime={ ReferenceTime } (1/64 sec), " +
714682 $ "FbkPktCount={ FeedbackPacketCount } , PacketStatuses=[{ packetStatusInfo } ]";
715683 }
716-
717- #region Helper Methods
718-
719- private uint ReadUInt32 ( byte [ ] buffer , ref int offset )
720- {
721- uint value = BitConverter . ToUInt32 ( buffer , offset ) ;
722- if ( BitConverter . IsLittleEndian )
723- {
724- value = NetConvert . DoReverseEndian ( value ) ;
725- }
726- offset += 4 ;
727- return value ;
728- }
729-
730- private uint ReadUInt32 ( ref ReadOnlySpan < byte > buffer )
731- {
732- var value = BinaryPrimitives . ReadUInt32BigEndian ( buffer ) ;
733- buffer = buffer . Slice ( sizeof ( uint ) ) ;
734- return value ;
735- }
736-
737- private ushort ReadUInt16 ( byte [ ] buffer , ref int offset )
738- {
739- ushort value = BitConverter . ToUInt16 ( buffer , offset ) ;
740- if ( BitConverter . IsLittleEndian )
741- {
742- value = NetConvert . DoReverseEndian ( value ) ;
743- }
744- offset += 2 ;
745- return value ;
746- }
747-
748- private ushort ReadUInt16 ( ref ReadOnlySpan < byte > buffer )
749- {
750- var value = BinaryPrimitives . ReadUInt16BigEndian ( buffer ) ;
751- buffer = buffer . Slice ( sizeof ( ushort ) ) ;
752- return value ;
753- }
754-
755- private void WriteUInt32 ( byte [ ] buffer , ref int offset , uint value )
756- {
757- if ( BitConverter . IsLittleEndian )
758- {
759- value = NetConvert . DoReverseEndian ( value ) ;
760- }
761- Buffer . BlockCopy ( BitConverter . GetBytes ( value ) , 0 , buffer , offset , 4 ) ;
762- offset += 4 ;
763- }
764-
765- private void WriteUInt16 ( byte [ ] buffer , ref int offset , ushort value )
766- {
767- if ( BitConverter . IsLittleEndian )
768- {
769- value = NetConvert . DoReverseEndian ( value ) ;
770- }
771- Buffer . BlockCopy ( BitConverter . GetBytes ( value ) , 0 , buffer , offset , 2 ) ;
772- offset += 2 ;
773- }
774-
775- private static void WriteUInt32 ( ref Span < byte > buffer , uint value )
776- {
777- BinaryPrimitives . WriteUInt32BigEndian ( buffer , value ) ;
778- buffer = buffer . Slice ( sizeof ( uint ) ) ;
779- }
780-
781- private static void WriteUInt16 ( ref Span < byte > buffer , ushort value )
782- {
783- BinaryPrimitives . WriteUInt16BigEndian ( buffer , value ) ;
784- buffer = buffer . Slice ( sizeof ( ushort ) ) ;
785- }
786-
787- #endregion
788684 }
789685}
0 commit comments