Changeset 832cb393faa2548cbee96df95499f374daf4e8ed
- Timestamp:
- 06/11/08 20:39:51 (3 months ago)
- git-parent:
- Files:
-
- modules/stream_out/rtp.c (modified) (5 diffs)
- modules/stream_out/rtp.h (modified) (1 diff)
- modules/stream_out/rtpfmt.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
modules/stream_out/rtp.c
r3561b9b r832cb39 813 813 } 814 814 815 /** 816 * Shrink the MTU down to a fixed packetization time (for audio). 817 */ 818 static void 819 rtp_set_ptime (sout_stream_id_t *id, unsigned ptime_ms, size_t bytes) 820 { 821 /* Samples per second */ 822 size_t spl = (id->i_clock_rate - 1) * ptime_ms / 1000 + 1; 823 bytes *= id->i_channels; 824 spl *= bytes; 825 826 if (spl < rtp_mtu (id)) /* MTU is big enough for ptime */ 827 id->i_mtu = 12 + spl; 828 else /* MTU is too small for ptime, align to a sample boundary */ 829 id->i_mtu = (id->i_mtu / bytes) * bytes; 830 } 815 831 816 832 /** Add an ES as a new RTP stream */ … … 969 985 id->i_payload_type = 0; 970 986 id->psz_enc = "PCMU"; 971 id->pf_packetize = rtp_packetize_l8; 987 id->pf_packetize = rtp_packetize_split; 988 rtp_set_ptime (id, 20, 1); 972 989 break; 973 990 case VLC_FOURCC( 'a', 'l', 'a', 'w' ): … … 975 992 id->i_payload_type = 8; 976 993 id->psz_enc = "PCMA"; 977 id->pf_packetize = rtp_packetize_l8; 994 id->pf_packetize = rtp_packetize_split; 995 rtp_set_ptime (id, 20, 1); 978 996 break; 979 997 case VLC_FOURCC( 's', '1', '6', 'b' ): … … 988 1006 } 989 1007 id->psz_enc = "L16"; 990 id->pf_packetize = rtp_packetize_l16; 1008 id->pf_packetize = rtp_packetize_split; 1009 rtp_set_ptime (id, 20, 1); 991 1010 break; 992 1011 case VLC_FOURCC( 'u', '8', ' ', ' ' ): 993 1012 id->psz_enc = "L8"; 994 id->pf_packetize = rtp_packetize_l8; 1013 id->pf_packetize = rtp_packetize_split; 1014 rtp_set_ptime (id, 20, 1); 995 1015 break; 996 1016 case VLC_FOURCC( 'm', 'p', 'g', 'a' ): … … 1516 1536 } 1517 1537 1518 /**1519 * @return number of audio samples to include for a given packetization time1520 * (this really only makes sense for audio formats).1521 */1522 size_t rtp_plen (const sout_stream_id_t * id, unsigned ptime_ms)1523 {1524 return id->i_channels * (((id->i_clock_rate - 1) * ptime_ms / 1000) + 1);1525 }1526 1527 1528 1538 /***************************************************************************** 1529 1539 * Non-RTP mux modules/stream_out/rtp.h
r449fd28 r832cb39 47 47 void rtp_packetize_send (sout_stream_id_t *id, block_t *out); 48 48 size_t rtp_mtu (const sout_stream_id_t *id); 49 size_t rtp_plen (const sout_stream_id_t * id, unsigned ptime);50 49 51 int rtp_packetize_l16 (sout_stream_t *, sout_stream_id_t *, block_t *);52 int rtp_packetize_l8 (sout_stream_t *, sout_stream_id_t *, block_t *);53 50 int rtp_packetize_mpa (sout_stream_t *, sout_stream_id_t *, block_t *); 54 51 int rtp_packetize_mpv (sout_stream_t *, sout_stream_id_t *, block_t *); modules/stream_out/rtpfmt.c
r3561b9b r832cb39 304 304 } 305 305 306 int rtp_packetize_l16( sout_stream_t *p_stream, sout_stream_id_t *id,307 block_t *in )308 {309 const uint8_t *p_data = in->p_buffer;310 size_t i_data = in->i_buffer;311 size_t i_plen = 2 * rtp_plen (id, 20);312 313 for( unsigned i_packet = 0; i_data > 0; i_packet++ )314 {315 int i_payload = __MIN( i_plen, i_data );316 block_t *out = block_New( p_stream, 12 + i_payload );317 318 /* rtp common header */319 rtp_packetize_common( id, out, 0,320 (in->i_pts > 0 ? in->i_pts : in->i_dts) );321 memcpy( &out->p_buffer[12], p_data, i_payload );322 323 out->i_buffer = 12 + i_payload;324 out->i_dts = in->i_dts + i_packet * 20000;325 out->i_length = i_payload * 20000 / i_plen;326 327 rtp_packetize_send( id, out );328 329 p_data += i_payload;330 i_data -= i_payload;331 }332 333 return VLC_SUCCESS;334 }335 336 int rtp_packetize_l8( sout_stream_t *p_stream, sout_stream_id_t *id,337 block_t *in )338 {339 const uint8_t *p_data = in->p_buffer;340 size_t i_data = in->i_buffer;341 size_t i_plen = rtp_plen (id, 20);342 343 for( unsigned i_packet = 0; i_data > 0; i_packet++ )344 {345 int i_payload = __MIN( i_plen, i_data );346 block_t *out = block_New( p_stream, 12 + i_payload );347 348 /* rtp common header */349 rtp_packetize_common( id, out, 0,350 (in->i_pts > 0 ? in->i_pts : in->i_dts) );351 memcpy( &out->p_buffer[12], p_data, i_payload );352 353 out->i_buffer = 12 + i_payload;354 out->i_dts = in->i_dts + i_packet * 20000;355 out->i_length = i_payload * 20000 / i_plen;356 357 rtp_packetize_send( id, out );358 359 p_data += i_payload;360 i_data -= i_payload;361 }362 363 return VLC_SUCCESS;364 }365 366 306 int rtp_packetize_mp4a( sout_stream_t *p_stream, sout_stream_id_t *id, 367 307 block_t *in )
