Commit 639b15bc authored by kostya's avatar kostya

Read and write extended timestamps for RTMP packets.

Extracted from patch by Sergiy in thread "[PATCH] rtmp-output"



git-svn-id: file:///var/local/repositories/ffmpeg/trunk@20683 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent d8a023cb
...@@ -111,6 +111,11 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p, ...@@ -111,6 +111,11 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
extra = AV_RL32(buf); extra = AV_RL32(buf);
} }
} }
if (timestamp == 0xFFFFFF) {
if (url_read_complete(h, buf, 4) != 4)
return AVERROR(EIO);
timestamp = AV_RB32(buf);
}
} }
if (ff_rtmp_packet_create(p, channel_id, type, timestamp, data_size)) if (ff_rtmp_packet_create(p, channel_id, type, timestamp, data_size))
return -1; return -1;
...@@ -148,13 +153,15 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt, ...@@ -148,13 +153,15 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt,
//TODO: header compression //TODO: header compression
bytestream_put_byte(&p, pkt->channel_id | (mode << 6)); bytestream_put_byte(&p, pkt->channel_id | (mode << 6));
if (mode != RTMP_PS_ONEBYTE) { if (mode != RTMP_PS_ONEBYTE) {
bytestream_put_be24(&p, pkt->timestamp); bytestream_put_be24(&p, pkt->timestamp >= 0xFFFFFF ? 0xFFFFFF : pkt->timestamp);
if (mode != RTMP_PS_FOURBYTES) { if (mode != RTMP_PS_FOURBYTES) {
bytestream_put_be24(&p, pkt->data_size); bytestream_put_be24(&p, pkt->data_size);
bytestream_put_byte(&p, pkt->type); bytestream_put_byte(&p, pkt->type);
if (mode == RTMP_PS_TWELVEBYTES) if (mode == RTMP_PS_TWELVEBYTES)
bytestream_put_le32(&p, pkt->extra); bytestream_put_le32(&p, pkt->extra);
} }
if (pkt->timestamp >= 0xFFFFFF)
bytestream_put_be32(&p, pkt->timestamp);
} }
url_write(h, pkt_hdr, p-pkt_hdr); url_write(h, pkt_hdr, p-pkt_hdr);
while (off < pkt->data_size) { while (off < pkt->data_size) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment