# HG changeset patch # User michael # Date 1122155338 0 # Node ID ee7ba4017c8d9b3c8c1a1b61c04a440623f44f11 # Parent c8d4a65729c523d86db32bfbc600a30e5baa42c0 MPEG4 streaming over RTP patch by (Luca Abeni: lucabe72, email it) diff -r c8d4a65729c5 -r ee7ba4017c8d rtp.c --- a/rtp.c Thu Jul 21 21:10:23 2005 +0000 +++ b/rtp.c Sat Jul 23 21:48:58 2005 +0000 @@ -585,7 +585,7 @@ /* send an rtp packet. sequence number is incremented, but the caller must update the timestamp itself */ -static void rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len) +static void rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m) { RTPDemuxContext *s = s1->priv_data; @@ -595,7 +595,7 @@ /* build the RTP header */ put_byte(&s1->pb, (RTP_VERSION << 6)); - put_byte(&s1->pb, s->payload_type & 0x7f); + put_byte(&s1->pb, (s->payload_type & 0x7f) | ((m & 0x01) << 7)); put_be16(&s1->pb, s->seq); put_be32(&s1->pb, s->timestamp); put_be32(&s1->pb, s->ssrc); @@ -633,7 +633,7 @@ n = (s->buf_ptr - s->buf); /* if buffer full, then send it */ if (n >= max_packet_size) { - rtp_send_data(s1, s->buf, n); + rtp_send_data(s1, s->buf, n, 0); s->buf_ptr = s->buf; /* update timestamp */ s->timestamp += n / sample_size; @@ -656,7 +656,7 @@ len = (s->buf_ptr - s->buf); if ((len + size) > max_packet_size) { if (len > 4) { - rtp_send_data(s1, s->buf, s->buf_ptr - s->buf); + rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 0); s->buf_ptr = s->buf + 4; /* 90 KHz time stamp */ s->timestamp = s->base_timestamp + @@ -678,7 +678,7 @@ s->buf[2] = count >> 8; s->buf[3] = count; memcpy(s->buf + 4, buf1, len); - rtp_send_data(s1, s->buf, len + 4); + rtp_send_data(s1, s->buf, len + 4, 0); size -= len; buf1 += len; count += len; @@ -738,7 +738,7 @@ /* 90 KHz time stamp */ s->timestamp = s->base_timestamp + av_rescale((int64_t)s->cur_timestamp * st->codec->time_base.num, 90000, st->codec->time_base.den); //FIXME pass timestamps - rtp_send_data(s1, s->buf, q - s->buf); + rtp_send_data(s1, s->buf, q - s->buf, 0); buf1 += len; size -= len; @@ -763,7 +763,7 @@ /* 90 KHz time stamp */ s->timestamp = s->base_timestamp + av_rescale((int64_t)s->cur_timestamp * st->codec->time_base.num, 90000, st->codec->time_base.den); //FIXME pass timestamps - rtp_send_data(s1, buf1, len); + rtp_send_data(s1, buf1, len, (len == size)); buf1 += len; size -= len; @@ -789,7 +789,7 @@ out_len = s->buf_ptr - s->buf; if (out_len >= s->max_payload_size) { - rtp_send_data(s1, s->buf, out_len); + rtp_send_data(s1, s->buf, out_len, 0); s->buf_ptr = s->buf; } }