Initial commit
This commit is contained in:
parent
38ef8704f8
commit
6813f00b09
5 changed files with 582 additions and 1 deletions
147
lib/ts_packet.h
Normal file
147
lib/ts_packet.h
Normal file
|
@ -0,0 +1,147 @@
|
|||
/// \file ts_packet.h
|
||||
/// Holds all headers for the TS Namespace.
|
||||
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <cmath>
|
||||
#include <stdint.h> //for uint64_t
|
||||
#include <iostream>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <algorithm>
|
||||
|
||||
#include "dtsc.h"
|
||||
|
||||
/// Holds all TS processing related code.
|
||||
namespace TS {
|
||||
/// Class for reading and writing TS Streams
|
||||
class Packet {
|
||||
public:
|
||||
Packet();
|
||||
~Packet();
|
||||
bool FromString( std::string & Data );
|
||||
void PID( int NewPID );
|
||||
int PID();
|
||||
void ContinuityCounter( int NewContinuity );
|
||||
int ContinuityCounter();
|
||||
void Clear();
|
||||
void PCR( int64_t NewVal );
|
||||
int64_t PCR();
|
||||
void AdaptationField( int NewVal );
|
||||
int AdaptationField( );
|
||||
int AdaptationFieldLen( );
|
||||
void DefaultPAT();
|
||||
void DefaultPMT();
|
||||
int UnitStart( );
|
||||
void UnitStart( int NewVal );
|
||||
int RandomAccess( );
|
||||
void RandomAccess( int NewVal );
|
||||
int BytesFree();
|
||||
|
||||
void Print();
|
||||
char* ToString();
|
||||
void PESVideoLeadIn( int NewLen );
|
||||
void PESAudioLeadIn( int NewLen, uint64_t PTS = 0 );
|
||||
void FillFree( std::string & PackageData );
|
||||
void AddStuffing( int NumBytes );
|
||||
void FFMpegHeader( );
|
||||
|
||||
int PESTimeStamp( );
|
||||
int GetDataOffset( );
|
||||
private:
|
||||
int Free;
|
||||
char Buffer[188];///< The actual data
|
||||
};//TS::Packet class
|
||||
|
||||
/// Constructs an audio header to be used on each audio frame.
|
||||
/// The length of this header will ALWAYS be 7 bytes, and has to be
|
||||
/// prepended on each audio frame.
|
||||
/// \param FrameLen the length of the current audio frame.
|
||||
static inline std::string GetAudioHeader( int FrameLen ) {
|
||||
char StandardHeader[7] = {0xFF,0xF1,0x4C,0x80,0x00,0x1F,0xFC};
|
||||
FrameLen += 7;
|
||||
StandardHeader[3] = ( StandardHeader[3] & 0xFC ) + ( ( FrameLen & 0x00001800 ) >> 11 );
|
||||
StandardHeader[4] = ( ( FrameLen & 0x000007F8 ) >> 3 );
|
||||
StandardHeader[5] = ( StandardHeader[5] & 0x3F ) + ( ( FrameLen & 0x00000007 ) << 5 );
|
||||
return std::string(StandardHeader,7);
|
||||
}
|
||||
|
||||
/// A standard Program Association Table, as generated by FFMPEG.
|
||||
/// Seems to be independent of the stream.
|
||||
static char PAT[188] = {
|
||||
0x47,0x40,0x00,0x10, 0x00,0x00,0xB0,0x0D, 0x00,0x01,0xC1,0x00, 0x00,0x00,0x01,0xF0,
|
||||
0x00,0x2A,0xB1,0x04, 0xB2,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF
|
||||
};
|
||||
|
||||
/// A standard Program Mapping Table, as generated by FFMPEG.
|
||||
/// Contains both Audio and Video mappings, works also on video- or audio-only streams.
|
||||
static char PMT[188] = {
|
||||
0x47,0x50,0x00,0x10, 0x00,0x02,0xB0,0x1D, 0x00,0x01,0xC1,0x00, 0x00,0xE1,0x00,0xF0,
|
||||
0x00,0x1B,0xE1,0x00, 0xF0,0x00,0x0F,0xE1, 0x01,0xF0,0x06,0x0A, 0x04,0x65,0x6E,0x67,
|
||||
0x00,0x8D,0x82,0x9A, 0x07,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF
|
||||
};
|
||||
|
||||
/// A standard Sevice Description Table, as generated by FFMPEG.
|
||||
/// Not used in our connector, provided for compatibility means
|
||||
static char SDT[188] = {
|
||||
0x47,0x40,0x11,0x10, 0x00,0x42,0xF0,0x25, 0x00,0x01,0xC1,0x00, 0x00,0x00,0x01,0xFF,
|
||||
0x00,0x01,0xFC,0x80, 0x14,0x48,0x12,0x01, 0x06,0x46,0x46,0x6D, 0x70,0x65,0x67,0x09,
|
||||
0x53,0x65,0x72,0x76, 0x69,0x63,0x65,0x30, 0x31,0xA7,0x79,0xA0, 0x03,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,
|
||||
0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF
|
||||
};
|
||||
|
||||
/// A standard Picture Parameter Set, as generated by FFMPEG.
|
||||
/// Seems to be stream-independent.
|
||||
static char PPS[24] = {
|
||||
0x00,0x00,0x00,0x01,
|
||||
0x27,0x4D,0x40,0x1F,
|
||||
0xA9,0x18,0x0A,0x00,
|
||||
0xB7,0x60,0x0D,0x40,
|
||||
0x40,0x40,0x4C,0x2B,
|
||||
0x5E,0xF7,0xC0,0x40
|
||||
};
|
||||
|
||||
/// A standard Sequence Parameter Set, as generated by FFMPEG.
|
||||
/// Seems to be stream-independent.
|
||||
static char SPS[8] = {
|
||||
0x00,0x00,0x00,0x01,
|
||||
0x28,0xCE,0x09,0xC8
|
||||
};
|
||||
|
||||
/// The full Bytesteam Nal-Header.
|
||||
static char NalHeader[4] = {
|
||||
0x00,0x00,0x00,0x01
|
||||
};
|
||||
|
||||
/// The shortened Bytesteam Nal-Header.
|
||||
static char ShortNalHeader[3] = {
|
||||
0x00,0x00,0x01
|
||||
};
|
||||
};//TS namespace
|
Loading…
Add table
Add a link
Reference in a new issue