/* NAME MpegTs.go - provides a data structure intended to encapsulate the properties of an MpegTs packet. DESCRIPTION See Readme.md AUTHOR Saxon Nelson-Milton LICENSE MpegTs.go is Copyright (C) 2017 the Australian Ocean Lab (AusOcean) It is free software: you can redistribute it and/or modify them under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with revid in gpl.txt. If not, see [GNU licenses](http://www.gnu.org/licenses). */ package packet import ( "strconv" ) // Length of some fields in bits const ( SyncByteLength = 8 TEILength = 1 PUSILength = 1 PriorityLength = 1 PIDLength = 13 TSCLength = 2 AFCLength = 2 CCLength = 4 ) // Index of the fields const ( SyncByteIndex = 0 TEIIndex = SyncByteIndex + SyncByteLength PUSIIndex = TEIIndex + TEILength PriorityIndex = PUSIIndex + PUSILength PIDIndex = PriorityIndex + PriorityLength TSCIndex = PIDIndex + PIDLength AFCIndex = TSCIndex + TSCLength CCIndex = AFCIndex + AFCLength AFIndex = CCIndex + CCLength ) type MpegTsPacket struct { SyncByte byte TEI bool // Transport Error Indicator PUSI bool // Payload Unit Start Indicator Priority bool PID int TSC byte // Transport Scrambling Control AFC byte // Adaption Field Control CC int // Continuity Counter AF []byte // Adaption Field Payload []byte } func boolToByte( in bool ) (out uint){ if in { out = 1 } return } // bool to int, shift accordigly, int to string, string binary to int func (p *MpegTsPacket) toByteSlice() (output [188]byte) { output[0] = p.SyncByte output[1] =( boolToByte(TEI) << (8-TEIIndex%8) ) | ( boolToByte(PUSI) << (8-PUSIIndex%8) ) | ( boolToByte(Priority) << (8-PriorityIndex%8) ) }