#author("2020-03-16T01:40:07+09:00","","")
[[Program]]
#author("2020-03-16T01:41:27+09:00","","")

RTP MEMO
````
         class Rtp
         {
                 void startReceive()
                 {
                         Socket udpSocket = new Socket(AddressFamily.InterNetwrok,
                                         SocketType.Dgram, ProtocolType.Udp);
 
                         IPEndPoint localhostIpEnd = new IPEndPoint(IPAddress.Any, targetPort);
 
                         udpSocket.Bind(localhostIPEnd);
 
                         MulticastOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, mcastOpt);
 
                         byte[] recvBuf = new byte[65535];
                         int byteRecevied = udpSocket.ReceiveFrom(recvByte, ref, localEndPoint);
 
 
                 }
         }
 
 
         class RtpHeader
         {
                 private byte[] header;
                 public RtpHeader(byte[] data)
                 {
                         header = data;
                 }
 
                 public int getVersion()
                 {       // [0] [7|6|5|4|3|2|1|0]
                         //      ~~~
                         return (header[0] >> 6) & 0x03;
                 }
 
                 public int getPadding()
                 {       // [0] [7|6|5|4|3|2|1|0]
                         //          ~
                         return (header[0] >> 6) & 0x01;
                 }
 
                 static int getExtention()
                 {       // [0] [7|6|5|4|3|2|1|0]
                         //            ~
                         return (header[0] >> 5) & 0x01;
                 }
 
                 public int getCsrcCount()
                 {       // [0] [7|6|5|4|3|2|1|0]
                         //              ~~~~~~~
                         return (header[0] & 0x0F);
                 }
 
                 public int getMarker()
                 {       // [1] [7|6|5|4|3|2|1|0]
                         //      ~
                         return (header[1] >> 7) & 0x01;
                 }
 
                 public int getPayloadType()
                 {       // [1] [7|6|5|4|3|2|1|0]
                         //        ~~~~~~~~~~~~~
                         return (header[1] & 0x7F);
                 }
 
                 public int getSequenceNumber()
                 {       // [2][3]
                         int val = ((header[2] << 8) & 0xFF00);
                         val |=  (header[3] & 0xFF);
                         return val;
                 }
 
                 public int getTimestamp()
                 {       // [4][5]
                         int val = ((header[4] << 8) & 0xFF00);
                         val |=  (header[5] & 0xFF);
                         return val;
                 }
 
                 public int getSsrc()
                 {       // [6][7][8][9]
                         int val = header[6] & 0xFF;
                         val <<= 8;
                         val  |= header[7] & 0xFF;
                         val <<= 8;
                         val  |= header[8] & 0xFF;
                         val <<= 8;
                         val  |= header[9] & 0xFF;
                         return val;
                 }
 
         }
 
         class JpegHeader
         {
                 // [0]          Type-specific
                 // [1]-[3]      Fragment Offset
                 // [4]          Type
                 // [5]          Q
                 // [6]          Width
                 // [7]          Height
 
                 // RestartMerker
                 //
         }


        class Rtp
        {
                void startReceive()
                {
                        Socket udpSocket = new Socket(AddressFamily.InterNetwrok,
                                        SocketType.Dgram, ProtocolType.Udp);

                        IPEndPoint localhostIpEnd = new IPEndPoint(IPAddress.Any, targetPort);

                        udpSocket.Bind(localhostIPEnd);

                        MulticastOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, mcastOpt);

                        byte[] recvBuf = new byte[65535];
                        int byteRecevied = udpSocket.ReceiveFrom(recvByte, ref, localEndPoint);


                }
        }


        class RtpHeader
        {
                private byte[] header;
                public RtpHeader(byte[] data)
                {
                        header = data;
                }

                public int getVersion()
                {       // [0] [7|6|5|4|3|2|1|0]
                        //      ~~~
                        return (header[0] >> 6) & 0x03;
                }

                public int getPadding()
                {       // [0] [7|6|5|4|3|2|1|0]
                        //          ~
                        return (header[0] >> 6) & 0x01;
                }

                static int getExtention()
                {       // [0] [7|6|5|4|3|2|1|0]
                        //            ~
                        return (header[0] >> 5) & 0x01;
                }

                public int getCsrcCount()
                {       // [0] [7|6|5|4|3|2|1|0]
                        //              ~~~~~~~
                        return (header[0] & 0x0F);
                }

                public int getMarker()
                {       // [1] [7|6|5|4|3|2|1|0]
                        //      ~
                        return (header[1] >> 7) & 0x01;
                }

                public int getPayloadType()
                {       // [1] [7|6|5|4|3|2|1|0]
                        //        ~~~~~~~~~~~~~
                        return (header[1] & 0x7F);
                }

                public int getSequenceNumber()
                {       // [2][3]
                        int val = ((header[2] << 8) & 0xFF00);
                        val |=  (header[3] & 0xFF);
                        return val;
                }

                public int getTimestamp()
                {       // [4][5]
                        int val = ((header[4] << 8) & 0xFF00);
                        val |=  (header[5] & 0xFF);
                        return val;
                }

                public int getSsrc()
                {       // [6][7][8][9]
                        int val = header[6] & 0xFF;
                        val <<= 8;
                        val  |= header[7] & 0xFF;
                        val <<= 8;
                        val  |= header[8] & 0xFF;
                        val <<= 8;
                        val  |= header[9] & 0xFF;
                        return val;
                }

        }

        class JpegHeader
        {
                // [0]          Type-specific
                // [1]-[3]      Fragment Offset
                // [4]          Type
                // [5]          Q
                // [6]          Width
                // [7]          Height

                // RestartMerker
                //
        }

````

トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS