mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-04 01:36:07 +00:00
flvenc: Factorize timestamp writing
The code is trivial but the semantics in the spec are ambiguous. This should help keep parts of the muxer interpreting them consistently.
This commit is contained in:
parent
d7eb8d8475
commit
4d3dd167df
@ -230,12 +230,17 @@ static void put_amf_string(AVIOContext *pb, const char *str)
|
||||
avio_write(pb, str, len);
|
||||
}
|
||||
|
||||
// FLV timestamps are 32 bits signed, RTMP timestamps should be 32-bit unsigned
|
||||
static void put_timestamp(AVIOContext *pb, int64_t ts) {
|
||||
avio_wb24(pb, ts & 0xFFFFFF);
|
||||
avio_w8(pb, (ts >> 24) & 0x7F);
|
||||
}
|
||||
|
||||
static void put_avc_eos_tag(AVIOContext *pb, unsigned ts)
|
||||
{
|
||||
avio_w8(pb, FLV_TAG_TYPE_VIDEO);
|
||||
avio_wb24(pb, 5); /* Tag Data Size */
|
||||
avio_wb24(pb, ts); /* lower 24 bits of timestamp in ms */
|
||||
avio_w8(pb, (ts >> 24) & 0x7F); /* MSB of ts in ms */
|
||||
put_timestamp(pb, ts);
|
||||
avio_wb24(pb, 0); /* StreamId = 0 */
|
||||
avio_w8(pb, 23); /* ub[4] FrameType = 1, ub[4] CodecId = 7 */
|
||||
avio_w8(pb, 2); /* AVC end of sequence */
|
||||
@ -492,8 +497,7 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par) {
|
||||
par->codec_type == AVMEDIA_TYPE_VIDEO ?
|
||||
FLV_TAG_TYPE_VIDEO : FLV_TAG_TYPE_AUDIO);
|
||||
avio_wb24(pb, 0); // size patched later
|
||||
avio_wb24(pb, 0); // ts
|
||||
avio_w8(pb, 0); // ts ext
|
||||
put_timestamp(pb, 0);
|
||||
avio_wb24(pb, 0); // streamid
|
||||
pos = avio_tell(pb);
|
||||
if (par->codec_id == AV_CODEC_ID_AAC) {
|
||||
@ -978,8 +982,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
|
||||
avio_wb24(pb, size + flags_size);
|
||||
avio_wb24(pb, ts & 0xFFFFFF);
|
||||
avio_w8(pb, (ts >> 24) & 0x7F); // timestamps are 32 bits _signed_
|
||||
put_timestamp(pb, ts);
|
||||
avio_wb24(pb, flv->reserved);
|
||||
|
||||
if (par->codec_type == AVMEDIA_TYPE_DATA ||
|
||||
|
Loading…
Reference in New Issue
Block a user