/// \file DTSC2FLV/main.cpp /// Contains the code that will transform any valid DTSC input into valid FLVs. #include #include #include #include #include #include #include #include #include #include "../../util/flv_tag.h" //FLV support #include "../../util/dtsc.h" //DTSC support #include "../../util/amf.h" //AMF support /// Holds all code that converts filetypes to DTSC. namespace Converters{ /// Reads DTSC from STDIN, outputs FLV to STDOUT. int DTSC2FLV() { FLV::Tag FLV_out; // Temporary storage for outgoing FLV data. DTSC::Stream Strm; std::string inBuffer; char charBuffer[1024*10]; unsigned int charCount; bool doneheader = false; while (std::cin.good()){ std::cin.read(charBuffer, 1024*10); charCount = std::cin.gcount(); inBuffer.append(charBuffer, charCount); if (Strm.parsePacket(inBuffer)){ if (!doneheader){ doneheader = true; std::cout.write(FLV::Header, 13); FLV_out.DTSCMetaInit(Strm); std::cout.write(FLV_out.data, FLV_out.len); if (Strm.metadata.getContentP("video") && Strm.metadata.getContentP("video")->getContentP("init")){ FLV_out.DTSCVideoInit(Strm); std::cout.write(FLV_out.data, FLV_out.len); } if (Strm.metadata.getContentP("audio") && Strm.metadata.getContentP("audio")->getContentP("init")){ FLV_out.DTSCAudioInit(Strm); std::cout.write(FLV_out.data, FLV_out.len); } } if (FLV_out.DTSCLoader(Strm)){ std::cout.write(FLV_out.data, FLV_out.len); } } } std::cerr << "Done!" << std::endl; return 0; }//FLV2DTSC };//Converter namespace /// Entry point for DTSC2FLV, simply calls Converters::DTSC2FLV(). int main(){ return Converters::DTSC2FLV(); }//main