Fixed a FLV header bug causing both video and audio to always be mentioned even when not present, added header-only parsing support to HTTP library.

This commit is contained in:
Thulinma 2013-06-03 15:50:21 +02:00
parent 62c4689ae2
commit 9228198097
3 changed files with 7 additions and 2 deletions

View file

@ -587,11 +587,11 @@ bool FLV::Tag::DTSCAudioInit(DTSC::Stream & S){
/// Assumes metadata is available - so check before calling! /// Assumes metadata is available - so check before calling!
bool FLV::Tag::DTSCMetaInit(DTSC::Stream & S){ bool FLV::Tag::DTSCMetaInit(DTSC::Stream & S){
//Unknown? Assume AAC. //Unknown? Assume AAC.
if (S.metadata["audio"]["codec"].asString() == "?"){ if (S.metadata.isMember("audio") && S.metadata["audio"]["codec"].asString() == "?"){
S.metadata["audio"]["codec"] = "AAC"; S.metadata["audio"]["codec"] = "AAC";
} }
//Unknown? Assume H264. //Unknown? Assume H264.
if (S.metadata["video"]["codec"].asString() == "?"){ if (S.metadata.isMember("video") && S.metadata["video"]["codec"].asString() == "?"){
S.metadata["video"]["codec"] = "H264"; S.metadata["video"]["codec"] = "H264";
} }

View file

@ -6,6 +6,7 @@
/// This constructor creates an empty HTTP::Parser, ready for use for either reading or writing. /// This constructor creates an empty HTTP::Parser, ready for use for either reading or writing.
/// All this constructor does is call HTTP::Parser::Clean(). /// All this constructor does is call HTTP::Parser::Clean().
HTTP::Parser::Parser(){ HTTP::Parser::Parser(){
headerOnly = false;
Clean(); Clean();
} }
@ -217,6 +218,9 @@ bool HTTP::Parser::parse(std::string & HTTPbuffer){
} }
if (seenHeaders){ if (seenHeaders){
if (length > 0){ if (length > 0){
if (headerOnly){
return true;
}
unsigned int toappend = length - body.length(); unsigned int toappend = length - body.length();
if (toappend > 0){ if (toappend > 0){
body.append(HTTPbuffer, 0, toappend); body.append(HTTPbuffer, 0, toappend);

View file

@ -33,6 +33,7 @@ namespace HTTP {
std::string url; std::string url;
std::string protocol; std::string protocol;
unsigned int length; unsigned int length;
bool headerOnly; ///< If true, do not parse body if the length is a known size.
private: private:
bool seenHeaders; bool seenHeaders;
bool seenReq; bool seenReq;