|
|
|
@@ -93,7 +93,7 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p, |
|
|
|
|
|
|
|
hdr >>= 6; |
|
|
|
if (hdr == RTMP_PS_ONEBYTE) { |
|
|
|
timestamp = prev_pkt[channel_id].timestamp; |
|
|
|
timestamp = prev_pkt[channel_id].ts_delta; |
|
|
|
} else { |
|
|
|
if (url_read_complete(h, buf, 3) != 3) |
|
|
|
return AVERROR(EIO); |
|
|
|
@@ -116,9 +116,10 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p, |
|
|
|
return AVERROR(EIO); |
|
|
|
timestamp = AV_RB32(buf); |
|
|
|
} |
|
|
|
if (hdr != RTMP_PS_TWELVEBYTES) |
|
|
|
timestamp += prev_pkt[channel_id].timestamp; |
|
|
|
} |
|
|
|
if (hdr != RTMP_PS_TWELVEBYTES) |
|
|
|
timestamp += prev_pkt[channel_id].timestamp; |
|
|
|
|
|
|
|
if (ff_rtmp_packet_create(p, channel_id, type, timestamp, data_size)) |
|
|
|
return -1; |
|
|
|
p->extra = extra; |
|
|
|
@@ -126,6 +127,7 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p, |
|
|
|
prev_pkt[channel_id].channel_id = channel_id; |
|
|
|
prev_pkt[channel_id].type = type; |
|
|
|
prev_pkt[channel_id].data_size = data_size; |
|
|
|
prev_pkt[channel_id].ts_delta = timestamp - prev_pkt[channel_id].timestamp; |
|
|
|
prev_pkt[channel_id].timestamp = timestamp; |
|
|
|
prev_pkt[channel_id].extra = extra; |
|
|
|
while (data_size > 0) { |
|
|
|
@@ -151,6 +153,7 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt, |
|
|
|
uint8_t pkt_hdr[16], *p = pkt_hdr; |
|
|
|
int mode = RTMP_PS_TWELVEBYTES; |
|
|
|
int off = 0; |
|
|
|
pkt->ts_delta = pkt->timestamp - prev_pkt[pkt->channel_id].timestamp; |
|
|
|
|
|
|
|
//TODO: header compression |
|
|
|
if (pkt->channel_id < 64) { |
|
|
|
@@ -165,7 +168,7 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt, |
|
|
|
if (mode != RTMP_PS_ONEBYTE) { |
|
|
|
uint32_t timestamp = pkt->timestamp; |
|
|
|
if (mode != RTMP_PS_TWELVEBYTES) |
|
|
|
timestamp -= prev_pkt[pkt->channel_id].timestamp; |
|
|
|
timestamp = pkt->ts_delta; |
|
|
|
bytestream_put_be24(&p, timestamp >= 0xFFFFFF ? 0xFFFFFF : timestamp); |
|
|
|
if (mode != RTMP_PS_FOURBYTES) { |
|
|
|
bytestream_put_be24(&p, pkt->data_size); |
|
|
|
@@ -200,6 +203,7 @@ int ff_rtmp_packet_create(RTMPPacket *pkt, int channel_id, RTMPPacketType type, |
|
|
|
pkt->type = type; |
|
|
|
pkt->timestamp = timestamp; |
|
|
|
pkt->extra = 0; |
|
|
|
pkt->ts_delta = 0; |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|