From 6b719ea7268d1f29e20d1b38f0f97b353c6caf33 Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Sat, 30 Jul 2011 12:13:51 +0200 Subject: [PATCH] Connector_TS Added --- Buffer/playh264.sh | 2 +- Connector_TS/Makefile | 26 +++++++++++ Connector_TS/Test.ts | Bin 0 -> 248 bytes Connector_TS/Test2.ts | Bin 0 -> 185 bytes Connector_TS/main.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++ Connector_TS/trim | Bin 0 -> 8897 bytes Connector_TS/trim.cpp | 20 ++++++++ TS_Analyser/main.cpp | 15 ++++-- 8 files changed, 161 insertions(+), 5 deletions(-) create mode 100644 Connector_TS/Makefile create mode 100644 Connector_TS/Test.ts create mode 100644 Connector_TS/Test2.ts create mode 100644 Connector_TS/main.cpp create mode 100755 Connector_TS/trim create mode 100644 Connector_TS/trim.cpp diff --git a/Buffer/playh264.sh b/Buffer/playh264.sh index 602d2f0a..4ec9510f 100755 --- a/Buffer/playh264.sh +++ b/Buffer/playh264.sh @@ -5,5 +5,5 @@ #ffmpeg -y -i "$1" -ar 44100 -vcodec libx264 -b 1000k -g 150 -r 20 -f flv - | ./Buffer 500 -ffmpeg -i "$1" -re -acodec aac -ar 11025 -vcodec libx264 -b 700k -vpre ultrafast -refs 1 -bf 0 -g 150 -f flv - 2> /dev/null | ./DDV_Buffer 500 $2 +ffmpeg -i "$1" -re -strict experimental -acodec aac -ar 11025 -vcodec libx264 -b 700k -vpre libx264-lossless_ultrafast -refs 1 -bf 0 -g 150 -f flv - 2> /dev/null | ./DDV_Buffer 500 $2 diff --git a/Connector_TS/Makefile b/Connector_TS/Makefile new file mode 100644 index 00000000..a248e725 --- /dev/null +++ b/Connector_TS/Makefile @@ -0,0 +1,26 @@ +SRC = main.cpp ../util/socket.cpp ../util/flv_tag.cpp +OBJ = $(SRC:.cpp=.o) +OUT = DDV_Conn_TS +INCLUDES = +DEBUG = 4 +OPTIMIZE = -g +CCFLAGS = -Wall -Wextra -funsigned-char $(OPTIMIZE) -DDEBUG=$(DEBUG) +CC = $(CROSS)g++ +LD = $(CROSS)ld +AR = $(CROSS)ar +LIBS= +.SUFFIXES: .cpp +.PHONY: clean default +default: $(OUT) +.cpp.o: + $(CC) $(INCLUDES) $(CCFLAGS) $(LIBS) -c $< -o $@ +$(OUT): $(OBJ) + $(CC) $(LIBS) -o $(OUT) $(OBJ) +clean: + rm -rf $(OBJ) $(OUT) Makefile.bak *~ +install: $(OUT) + -service HTTP_Conn stop + cp -f ./$(OUT) /usr/bin/ + cp -f ./HTTP_Conn /etc/init.d/ + service HTTP_Conn start + diff --git a/Connector_TS/Test.ts b/Connector_TS/Test.ts new file mode 100644 index 0000000000000000000000000000000000000000..15a940dee88e4173e7bab5ab502f1d6a8395e7af GIT binary patch literal 248 zcmZQzzzy6TL2`@_7#JEDBp1A&B0 z<9?7Dn7nd33&#hb97s<{W~>uP93~G^zp#^qFWB>xj2Mi1i3=;OO+ZjPzAOO)nUi3QNFmBxr761}F$pKCmq#O4?0OJ2ZAR*JZ zAEX8*uiVbU@c}3Y(i4&y>jV;q$%E7{>}26Mavx$Q$b6IJSf_@2J&qGhTemB0Xa?JD ilG*3D!y01emcm%4xAP*LPBi#Cf%JpS1L+5u$p`?4okJV| literal 0 HcmV?d00001 diff --git a/Connector_TS/main.cpp b/Connector_TS/main.cpp new file mode 100644 index 00000000..b2e3e735 --- /dev/null +++ b/Connector_TS/main.cpp @@ -0,0 +1,103 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../util/socket.h" +#include "../util/flv_tag.h" + +class Transport_Packet { + public: + Transport_Packet( int PID = 0x100 ); + void SetPesHeader( ); + void Write( ); + private: + int PID; + char Buffer[188]; +};//Transport Packet + +Transport_Packet::Transport_Packet( int PID ) { + (*this).PID = PID; + Buffer[0] = (char)0x47; + Buffer[1] = (char)0x40 + (( PID & 0xFF00 ) >> 8 ); + Buffer[2] = ( PID & 0x00FF ); + Buffer[3] = (char)0x00; +} + +void Transport_Packet::SetPesHeader( ) { + Buffer[4] = (char)0x00; + Buffer[5] = (char)0x00; + Buffer[6] = (char)0x01; + Buffer[7] = (char)0xE0; + + Buffer[10] = (char)0x80; +} + +void Transport_Packet::Write( ) { + for( int i = 0; i < 188; i++ ) { std::cout << Buffer[i]; } +} + +std::string WrapNaluIntoTS( char * Buffer, int BufLen ) { + std::string result; + return result; +} + +int TS_Handler( Socket::Connection conn ) { + FLV::Tag tag;///< Temporary tag buffer for incoming video data. + bool ready4data = false;///< Set to true when streaming is to begin. + bool inited = false; + Socket::Connection ss(-1); + while(conn.connected() && !FLV::Parse_Error) { + if( !inited ) { + ss = Socket::Connection("/tmp/shared_socket_fifa"); + if (!ss.connected()){ + #if DEBUG >= 1 + fprintf(stderr, "Could not connect to server!\n"); + #endif + conn.close(); + break; + } + #if DEBUG >= 3 + fprintf(stderr, "Everything connected, starting to send video data...\n"); + #endif + inited = true; + } + switch (ss.ready()){ + case -1: + conn.close(); + #if DEBUG >= 1 + fprintf(stderr, "Source socket is disconnected.\n"); + #endif + break; + case 0: break;//not ready yet + default: + if (tag.SockLoader(ss)){//able to read a full packet? + if( tag.data[ 0 ] == 0x09 ) { + if( ( ( tag.data[ 11 ] & 0x0F ) == 7 ) && ( tag.data[ 12 ] == 1 ) ) { + fprintf(stderr, "Video contains NALU" ); + } + } + if( tag.data[ 0 ] == 0x08 ) { + fprintf(stderr, "Audio Tag Read\n"); + } + } + break; + } + } + Transport_Packet TS = Transport_Packet( ); + TS.SetPesHeader( ); + TS.Write( ); + return 0; +} + +#define DEFAULT_PORT 8888 +#define MAINHANDLER TS_Handler +#define CONFIGSECT TS +#include "../util/server_setup.cpp" diff --git a/Connector_TS/trim b/Connector_TS/trim new file mode 100755 index 0000000000000000000000000000000000000000..4ed69cf137f7c97b57e4f4e9301c1603ee1087b9 GIT binary patch literal 8897 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 JT0x|9{{)PuGg$xt literal 0 HcmV?d00001 diff --git a/Connector_TS/trim.cpp b/Connector_TS/trim.cpp new file mode 100644 index 00000000..2149095b --- /dev/null +++ b/Connector_TS/trim.cpp @@ -0,0 +1,20 @@ + +#include +#include + +int main( ) { + std::string Temp; + while( std::cin.good() ) { + Temp += std::cin.get(); + } + while( Temp[0] == (char)0x00 ) { + Temp.erase( Temp.begin() ); + } + Temp.erase( Temp.end() - 1 ); + while( Temp[ Temp.size()-1 ] == (char)0x00 ) { + Temp.erase( Temp.end() - 1 ); + } + for( int i = 0; i < Temp.size(); i++ ) { + std::cout << Temp[i]; + } +} diff --git a/TS_Analyser/main.cpp b/TS_Analyser/main.cpp index ad1ea89e..4e451235 100644 --- a/TS_Analyser/main.cpp +++ b/TS_Analyser/main.cpp @@ -116,6 +116,7 @@ struct pes_packet { unsigned int DTS; std::vector Header_Stuffing; + std::vector First_Bytes; }; void fill_pes( pes_packet & PES, unsigned char * TempChar, int Offset = 4 ) { @@ -167,6 +168,10 @@ void fill_pes( pes_packet & PES, unsigned char * TempChar, int Offset = 4 ) { PES.Header_Stuffing.push_back( TempChar[Offset] ); Offset ++; } + PES.First_Bytes.clear(); + for( int i = 0; i < 30; i ++ ) { + PES.First_Bytes.push_back( TempChar[Offset+i] ); + } } } @@ -203,6 +208,11 @@ void print_pes( pes_packet PES, std::string offset="\t" ) { printf( "%.2X ", PES.Header_Stuffing[i] ); } printf( "\n" ); + printf( "%s\tFirst_Bytes\t\t\t", offset.c_str() ); + for( int i = 0; i < PES.First_Bytes.size(); i++ ) { + printf( "%.2X ", PES.First_Bytes[i] ); + } + printf( "\n" ); } } @@ -391,13 +401,11 @@ int main( ) { adaptation_field AF; pes_packet PES; int ProgramNum; - while( std::cin.good( ) ) { //&& BlockNo <= 1000 ) { + while( std::cin.good( ) && BlockNo <= 1000 ) { for( int i = 0; i < 188; i++ ) { if( std::cin.good( ) ){ TempChar[i] = std::cin.get(); } } - - if( ( ( TempChar[1] & 0x1F ) << 8 ) + ( TempChar[2] ) != 0x1FFF ) { printf( "Block %d:\n", BlockNo ); printf( "\tSync Byte:\t\t\t%X\n", TempChar[0] ); @@ -417,7 +425,6 @@ int main( ) { print_af( AF ); } - if( ( ( ( TempChar[1] & 0x1F ) << 8 ) + TempChar[2] ) == 0 ) { fill_pat( PAT, TempChar ); print_pat( PAT, true );