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 { } }