• Packet.cs


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Net;
    using Bit;
    
    namespace Packet
    {
        
    
        public class TSPacket
        {
            BitOperation bitOperarion = new BitOperation();
    
            public TSPacket(Byte[] bytes)
            {
                TSBytes = bytes;
                _data = new Byte[183];
                for (int i = 0; i < _data.Length; i++)  //把data字节数组填充为0
                {
                    _data[i] = 0; 
                }
            }
    
            private Byte[] _TSBytes;
            ///////////////////TS Header/////////////////////
            private Byte _sync_byte;
            private Byte _transport_error_indicator;
            private Byte _payload_unit_start_indicator;
            private Byte _transport_priority;
            private UInt16 _PID;
            private Byte _transport_scrambling_control;
            private Byte _adaption_field_control;
            private Byte _continuity_counter;
    
            ///////////////////Data//////////////////////////
            private Byte _position_indicator;
            private Byte[] _data;
    
            ///////////////////get set方法///////////////////
            public Byte[] TSBytes
            {
                get
                {
                    return this._TSBytes;
                }
                set
                {
                    this._TSBytes = value;
                }
            }
            public Byte SYNC_BYTE
            {
                get
                {
                    this._sync_byte = Convert.ToByte(_TSBytes[0]);
                    return this._sync_byte;
                }
                set
                {
                    this._sync_byte = value;
                    this._TSBytes[0] = value;
                }
            }
            public Byte TRANSPORT_ERROR_INDICATOR
            {
                get
                {
                    this._transport_error_indicator = Convert.ToByte(_TSBytes[1] >> 7);
                    return this._transport_error_indicator;
                }
                set
                {
                    this._transport_error_indicator = value;
    
                    this._TSBytes[1] = bitOperarion.setBit(_TSBytes[1], 0, value);
                }
            }
            public Byte PAYLOAD_UNIT_START_INDICATOR
            {
                get
                {
                    this._payload_unit_start_indicator = Convert.ToByte((_TSBytes[1] >> 6) & 0x01);
                    return this._payload_unit_start_indicator;
                }
                set
                {
                    this._payload_unit_start_indicator = value;
    
                    this._TSBytes[1] = bitOperarion.setBit(_TSBytes[1], 1, value);
                }
            }
            public Byte TRANSPORT_PRIORITY
            {
                get
                {
                    this._transport_priority = Convert.ToByte((_TSBytes[1] >> 5) & 0x01);
                    return this._transport_priority;
                }
                set
                {
                    this._transport_priority = value;
    
                    this._TSBytes[1] = bitOperarion.setBit(_TSBytes[1], 2, value);
                }
            }
            public UInt16 PID
            {
                get
                {
                    UInt16 high = Convert.ToUInt16((_TSBytes[1] & 0x1F) << 8);
                    UInt16 low = Convert.ToUInt16(_TSBytes[2]);
                    this._PID = Convert.ToUInt16(high | low);
                    return this._PID;
                }
                set
                {
                    this._PID = value;
                    Byte high = Convert.ToByte(value >> 8);
                    Byte low = Convert.ToByte(value & 0x00ff);
                    for (int i = 3; i < 8; i++)
                    {
                        int temp = bitOperarion.getBit(high, i);
                        this._TSBytes[1] = bitOperarion.setBit(this._TSBytes[1], i, temp);
                    }
                    this._TSBytes[2] = low;
                }
            }
            public Byte TRANSPORT_SCRAMBLING_CONTROL
            {
                get
                {
                    this._transport_scrambling_control = Convert.ToByte((_TSBytes[3] >> 6) & 0x03);
                    return this._transport_scrambling_control;
                }
                set
                {
                    this._transport_scrambling_control = value;
    
                    this._TSBytes[3] = bitOperarion.setBit( _TSBytes[3], 0, (value >> 1) & 0x01 );
                    this._TSBytes[3] = bitOperarion.setBit( _TSBytes[3], 1, (value & 0x01) );
                }
            }
            public Byte ADAPTION_FIELD_CONTROL
            {
                get
                {
                    this._continuity_counter = Convert.ToByte((_TSBytes[3] >> 4) & 0x03);
                    return this._continuity_counter;
                }
                set
                {
                    this._continuity_counter = value;
    
                    this._TSBytes[3] = bitOperarion.setBit( _TSBytes[3], 2, (value >> 1) & 0x01 );
                    this._TSBytes[3] = bitOperarion.setBit( _TSBytes[3], 3, (value & 0x01) );
                }
            }
            public Byte CONTINUITY_COUNTER
            {
                get
                {
                    this._adaption_field_control = Convert.ToByte(_TSBytes[3] & 0x0f);
                    return this._adaption_field_control;
                }
                set
                {
                    this._adaption_field_control = value;
    
                    for (int i = 4; i < 8; i++)
                    {
                        int temp = bitOperarion.getBit(value, i);
                        this._TSBytes[3] = bitOperarion.setBit(this._TSBytes[3], i, temp);
                    }
                }
            }
            public Byte POSITION_INDICATOR
            {
                get
                {
                    this._position_indicator = Convert.ToByte(_TSBytes[4]);
                    return this._position_indicator;
                }
                set
                {
                    this._position_indicator = value;
                    this._TSBytes[4] = value;
                }
            }
            public Byte[] DATA
            {
                get
                {
                    return this._data;
                }
                set
                {
                    this._data = value;
                }
            }
    
            ///////////////////字节中的比特位操作///////////////////
            
        }
    
       
       
        public class PMT
        {
            //public static string table_id = "00000010";
            //public static string section_syntax_indicator = "1";
            //public static string zero = "0";
            //public static string reserved = "00";
            //public static string section_length = "111111111111";
            //public static string program_number = "0000000000000001";
            //public static string reserved2 = "00";
            //public static string version_number = "00001";
            //public static string current_next_indicator = "0";
            //public static string section_number = "00000001";
            //public static string last_section_number = "00000000";
            //public static string reserved3 = "000";
            //public static string PCR_PID = "0000000000001";
            //public static string reserved4 = "0000";
            //public static string program_info_length = "111111111111";
        }
    
        public class SDT
        { }
    
        public struct CDT
        {
            //public static string table_id = "11001000";
            //public static string section_syntax_indicator = "1";
            //public static string reserved_future_use = "0";
            //public static string reserved = "00";
            //public static string section_length = "111111111111";
            //public static string download_data_id = "0000000000000001";
            //public static string reserved2 = "00";
            //public static string vesion_number = "00001";
            //public static string current_next_indicator = "1";
            //public static string section_number = "00000001";
            //public static string last_section_number = "00000000";
            //public static string original_netword_id = "0000000000000000";
            //public static string data_type = "00000000";
            //public static string reserved_future_use2 = "0000";
            //public static string descriptors_loop_length = "000000000000";
    
            //public static string CDTTableStr = table_id + section_syntax_indicator
            //   + reserved_future_use + reserved + section_length
            //   + download_data_id + reserved2 + vesion_number + current_next_indicator
            //   + section_number + last_section_number + original_netword_id
            //   + data_type + reserved_future_use2 + descriptors_loop_length;  
        }
    
        public class SDTT
        { }
    }
    
  • 相关阅读:
    Java并发编程 LockSupport源码分析
    [No000010F]Git8/9-使用GitHub
    [No000010E]Git7/9-标签管理
    [No000010D]Git6/9-分支管理
    [No000010C]Git5/9-远程仓库
    [No000010B]Git4/9-时光机穿梭
    [No000010A]Git3/9-创建版本库
    [No0000109]Git2/9-安装Git
    [No0000108]Git1/9-Git简介与入门
    [No000011D].NETCORE1/19-.NET Core 指南
  • 原文地址:https://www.cnblogs.com/jingmoxukong/p/2120874.html
Copyright © 2020-2023  润新知