diff --git a/lib/flv_tag.cpp b/lib/flv_tag.cpp index 925330b5..c0c41275 100644 --- a/lib/flv_tag.cpp +++ b/lib/flv_tag.cpp @@ -691,7 +691,7 @@ bool FLV::Tag::DTSCMetaInit(DTSC::Meta & M, std::set & selTra amfdata.getContentP(1)->addContent(AMF::Object("width", M.tracks[*it].width, AMF::AMF0_NUMBER)); amfdata.getContentP(1)->addContent(AMF::Object("height", M.tracks[*it].height, AMF::AMF0_NUMBER)); amfdata.getContentP(1)->addContent(AMF::Object("videoframerate", (double)M.tracks[*it].fpks / 1000.0, AMF::AMF0_NUMBER)); - amfdata.getContentP(1)->addContent(AMF::Object("videodatarate", (double)M.tracks[*it].bps * 128.0, AMF::AMF0_NUMBER)); + amfdata.getContentP(1)->addContent(AMF::Object("videodatarate", (double)M.tracks[*it].bps / 128.0, AMF::AMF0_NUMBER)); ++i; } if (M.tracks[*it].type == "audio") { @@ -712,7 +712,7 @@ bool FLV::Tag::DTSCMetaInit(DTSC::Meta & M, std::set & selTra amfdata.getContentP(1)->addContent(AMF::Object("audiochannels", M.tracks[*it].channels, AMF::AMF0_NUMBER)); amfdata.getContentP(1)->addContent(AMF::Object("audiosamplerate", M.tracks[*it].rate, AMF::AMF0_NUMBER)); amfdata.getContentP(1)->addContent(AMF::Object("audiosamplesize", M.tracks[*it].size, AMF::AMF0_NUMBER)); - amfdata.getContentP(1)->addContent(AMF::Object("audiodatarate", (double)M.tracks[*it].bps * 128.0, AMF::AMF0_NUMBER)); + amfdata.getContentP(1)->addContent(AMF::Object("audiodatarate", (double)M.tracks[*it].bps / 128.0, AMF::AMF0_NUMBER)); ++i; } } diff --git a/lib/rtmpchunks.cpp b/lib/rtmpchunks.cpp index dc1bedb5..8a08caee 100644 --- a/lib/rtmpchunks.cpp +++ b/lib/rtmpchunks.cpp @@ -145,10 +145,10 @@ std::string & RTMPStream::Chunk::Pack() { } //support for 0x00ffffff timestamps if (ntime) { - output += (unsigned char)(ntime & 0xff); - output += (unsigned char)((ntime >> 8) & 0xff); - output += (unsigned char)((ntime >> 16) & 0xff); output += (unsigned char)((ntime >> 24) & 0xff); + output += (unsigned char)((ntime >> 16) & 0xff); + output += (unsigned char)((ntime >> 8) & 0xff); + output += (unsigned char)(ntime & 0xff); } len_left = 0; while (len_left < len) { @@ -172,10 +172,10 @@ std::string & RTMPStream::Chunk::Pack() { } } if (ntime) { - output += (unsigned char)(ntime & 0xff); - output += (unsigned char)((ntime >> 8) & 0xff); - output += (unsigned char)((ntime >> 16) & 0xff); output += (unsigned char)((ntime >> 24) & 0xff); + output += (unsigned char)((ntime >> 16) & 0xff); + output += (unsigned char)((ntime >> 8) & 0xff); + output += (unsigned char)(ntime & 0xff); } } } @@ -460,10 +460,10 @@ bool RTMPStream::Chunk::Parse(Socket::Buffer & buffer) { return false; } //can't read timestamp indata = buffer.copy(i + 4); - timestamp = indata[i++ ]; - timestamp += indata[i++ ] * 256; - timestamp += indata[i++ ] * 256 * 256; timestamp += indata[i++ ] * 256 * 256 * 256; + timestamp += indata[i++ ] * 256 * 256; + timestamp += indata[i++ ] * 256; + timestamp = indata[i++ ]; ts_delta = timestamp; DEBUG_MSG(DLVL_DONTEVEN, "Extended timestamp: %u", timestamp); } diff --git a/src/output/output_rtmp.cpp b/src/output/output_rtmp.cpp index 38bcb4a0..ae54ca6e 100644 --- a/src/output/output_rtmp.cpp +++ b/src/output/output_rtmp.cpp @@ -404,10 +404,10 @@ namespace Mist{ rtmpheader[1] = 0xff; rtmpheader[2] = 0xff; rtmpheader[3] = 0xff; - rtmpheader[header_len++] = timestamp & 0xff; - rtmpheader[header_len++] = (timestamp >> 8) & 0xff; - rtmpheader[header_len++] = (timestamp >> 16) & 0xff; rtmpheader[header_len++] = (timestamp >> 24) & 0xff; + rtmpheader[header_len++] = (timestamp >> 16) & 0xff; + rtmpheader[header_len++] = (timestamp >> 8) & 0xff; + rtmpheader[header_len++] = timestamp & 0xff; }else{ //regular timestamp rtmpheader[1] = (timestamp >> 16) & 0xff; @@ -422,10 +422,10 @@ namespace Mist{ //set the header's first byte to the "continue" type chunk, for later use rtmpheader[0] = 0xC4; if (timestamp >= 0x00ffffff){ - rtmpheader[1] = timestamp & 0xff; - rtmpheader[2] = (timestamp >> 8) & 0xff; - rtmpheader[3] = (timestamp >> 16) & 0xff; - rtmpheader[4] = (timestamp >> 24) & 0xff; + rtmpheader[1] = (timestamp >> 24) & 0xff; + rtmpheader[2] = (timestamp >> 16) & 0xff; + rtmpheader[3] = (timestamp >> 8) & 0xff; + rtmpheader[4] = timestamp & 0xff; } //sent actual data - never send more than chunk_snd_max at a time