Changeset 8da8aa9818c5f129db745331bf2b87f173eaf0c0
- Timestamp:
- 04/10/07 19:46:20
(1 year ago)
- Author:
- Rémi Denis-Courmont <rem@videolan.org>
- git-committer:
- Rémi Denis-Courmont <rem@videolan.org> 1191519980 +0000
- git-parent:
[5d33b82e889d2d8c3d9f040eaa0d6a6e51d270b0]
- git-author:
- Rémi Denis-Courmont <rem@videolan.org> 1191519980 +0000
- Message:
Factorize rtpmap formatting
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r5d33b82 |
r8da8aa9 |
|
| 220 | 220 | |
|---|
| 221 | 221 | VLC_EXPORT( char *, vlc_sdp_Start, ( vlc_object_t *obj, const char *cfgpref, const struct sockaddr *src, size_t srclen, const struct sockaddr *addr, size_t addrlen ) ); |
|---|
| 222 | | VLC_EXPORT( char *, sdp_AddMedia, (char **sdp, const char *type, const char *protocol, int dport, unsigned pt, vlc_bool_t bw_indep, unsigned bw, const char *rtpmap, const char *fmtp) ); |
|---|
| | 222 | VLC_EXPORT( char *, sdp_AddMedia, (char **sdp, const char *type, const char *protocol, int dport, unsigned pt, vlc_bool_t bw_indep, unsigned bw, const char *ptname, unsigned clockrate, unsigned channels, const char *fmtp) ); |
|---|
| 223 | 223 | VLC_EXPORT( char *, sdp_AddAttribute, (char **sdp, const char *name, const char *fmt, ...) ATTRIBUTE_FORMAT( 3, 4 ) ); |
|---|
| 224 | 224 | |
|---|
| reaffd94 |
r8da8aa9 |
|
| 283 | 283 | |
|---|
| 284 | 284 | /* for sdp */ |
|---|
| 285 | | char *psz_rtpmap; |
|---|
| | 285 | const char *psz_enc; |
|---|
| 286 | 286 | char *psz_fmtp; |
|---|
| 287 | 287 | int i_clock_rate; |
|---|
| … | … | |
| 744 | 744 | sdp_AddMedia( &psz_sdp, mime_major, proto, inclport * id->i_port, |
|---|
| 745 | 745 | id->i_payload_type, VLC_FALSE, id->i_bitrate, |
|---|
| 746 | | id->psz_rtpmap, id->psz_fmtp); |
|---|
| | 746 | id->psz_enc, id->i_clock_rate, id->i_channels, |
|---|
| | 747 | id->psz_fmtp); |
|---|
| 747 | 748 | |
|---|
| 748 | 749 | if( rtsp_url != NULL ) |
|---|
| … | … | |
| 853 | 854 | id->ssrc[3] = rand()&0xff; |
|---|
| 854 | 855 | |
|---|
| 855 | | id->psz_rtpmap = NULL; |
|---|
| | 856 | id->psz_enc = NULL; |
|---|
| 856 | 857 | id->psz_fmtp = NULL; |
|---|
| 857 | 858 | id->i_clock_rate = 90000; /* most common case for video */ |
|---|
| … | … | |
| 930 | 931 | { |
|---|
| 931 | 932 | id->i_payload_type = 33; |
|---|
| 932 | | id->psz_rtpmap = strdup( "MP2T/90000" ); |
|---|
| | 933 | id->psz_enc = "MP2T"; |
|---|
| 933 | 934 | } |
|---|
| 934 | 935 | else |
|---|
| 935 | 936 | { |
|---|
| 936 | | id->psz_rtpmap = strdup( "MP2P/90000" ); |
|---|
| | 937 | id->psz_enc = "MP2P"; |
|---|
| 937 | 938 | } |
|---|
| 938 | 939 | } |
|---|
| … | … | |
| 943 | 944 | if( p_fmt->audio.i_channels == 1 && p_fmt->audio.i_rate == 8000 ) |
|---|
| 944 | 945 | id->i_payload_type = 0; |
|---|
| 945 | | if( asprintf( &id->psz_rtpmap, "PCMU/%d/%d", p_fmt->audio.i_rate, |
|---|
| 946 | | p_fmt->audio.i_channels ) == -1 ) |
|---|
| 947 | | id->psz_rtpmap = NULL; |
|---|
| | 946 | id->psz_enc = "PCMU"; |
|---|
| 948 | 947 | id->pf_packetize = rtp_packetize_l8; |
|---|
| 949 | 948 | break; |
|---|
| … | … | |
| 951 | 950 | if( p_fmt->audio.i_channels == 1 && p_fmt->audio.i_rate == 8000 ) |
|---|
| 952 | 951 | id->i_payload_type = 8; |
|---|
| 953 | | if( asprintf( &id->psz_rtpmap, "PCMA/%d/%d", p_fmt->audio.i_rate, |
|---|
| 954 | | p_fmt->audio.i_channels ) == -1 ) |
|---|
| 955 | | id->psz_rtpmap = NULL; |
|---|
| | 952 | id->psz_enc = "PCMA"; |
|---|
| 956 | 953 | id->pf_packetize = rtp_packetize_l8; |
|---|
| 957 | 954 | break; |
|---|
| … | … | |
| 966 | 963 | id->i_payload_type = 10; |
|---|
| 967 | 964 | } |
|---|
| 968 | | if( asprintf( &id->psz_rtpmap, "L16/%d/%d", p_fmt->audio.i_rate, |
|---|
| 969 | | p_fmt->audio.i_channels ) == -1 ) |
|---|
| 970 | | id->psz_rtpmap = NULL; |
|---|
| | 965 | id->psz_enc = "L16"; |
|---|
| 971 | 966 | id->pf_packetize = rtp_packetize_l16; |
|---|
| 972 | 967 | break; |
|---|
| 973 | 968 | case VLC_FOURCC( 'u', '8', ' ', ' ' ): |
|---|
| 974 | | if( asprintf( &id->psz_rtpmap, "L8/%d/%d", p_fmt->audio.i_rate, |
|---|
| 975 | | p_fmt->audio.i_channels ) == -1 ) |
|---|
| 976 | | id->psz_rtpmap = NULL; |
|---|
| | 969 | id->psz_enc = "L8"; |
|---|
| 977 | 970 | id->pf_packetize = rtp_packetize_l8; |
|---|
| 978 | 971 | break; |
|---|
| 979 | 972 | case VLC_FOURCC( 'm', 'p', 'g', 'a' ): |
|---|
| 980 | 973 | id->i_payload_type = 14; |
|---|
| 981 | | id->psz_rtpmap = strdup( "MPA/90000" ); |
|---|
| | 974 | id->psz_enc = "MPA"; |
|---|
| 982 | 975 | id->pf_packetize = rtp_packetize_mpa; |
|---|
| 983 | 976 | break; |
|---|
| 984 | 977 | case VLC_FOURCC( 'm', 'p', 'g', 'v' ): |
|---|
| 985 | 978 | id->i_payload_type = 32; |
|---|
| 986 | | id->psz_rtpmap = strdup( "MPV/90000" ); |
|---|
| | 979 | id->psz_enc = "MPV"; |
|---|
| 987 | 980 | id->pf_packetize = rtp_packetize_mpv; |
|---|
| 988 | 981 | break; |
|---|
| 989 | 982 | case VLC_FOURCC( 'a', '5', '2', ' ' ): |
|---|
| 990 | | id->psz_rtpmap = strdup( "ac3/90000" ); |
|---|
| | 983 | id->psz_enc = "ac3"; |
|---|
| 991 | 984 | id->pf_packetize = rtp_packetize_ac3; |
|---|
| 992 | 985 | break; |
|---|
| 993 | 986 | case VLC_FOURCC( 'H', '2', '6', '3' ): |
|---|
| 994 | | id->psz_rtpmap = strdup( "H263-1998/90000" ); |
|---|
| | 987 | id->psz_enc = "H263-1998"; |
|---|
| 995 | 988 | id->pf_packetize = rtp_packetize_h263; |
|---|
| 996 | 989 | break; |
|---|
| 997 | 990 | case VLC_FOURCC( 'h', '2', '6', '4' ): |
|---|
| 998 | | id->psz_rtpmap = strdup( "H264/90000" ); |
|---|
| | 991 | id->psz_enc = "H264"; |
|---|
| 999 | 992 | id->pf_packetize = rtp_packetize_h264; |
|---|
| 1000 | 993 | id->psz_fmtp = NULL; |
|---|
| … | … | |
| 1058 | 1051 | char hexa[2*p_fmt->i_extra +1]; |
|---|
| 1059 | 1052 | |
|---|
| 1060 | | id->psz_rtpmap = strdup( "MP4V-ES/90000" ); |
|---|
| | 1053 | id->psz_enc = "MP4V-ES"; |
|---|
| 1061 | 1054 | id->pf_packetize = rtp_packetize_split; |
|---|
| 1062 | 1055 | if( p_fmt->i_extra > 0 ) |
|---|
| … | … | |
| 1075 | 1068 | char hexa[2*p_fmt->i_extra +1]; |
|---|
| 1076 | 1069 | |
|---|
| 1077 | | if( asprintf( &id->psz_rtpmap, "mpeg4-generic/%d", |
|---|
| 1078 | | p_fmt->audio.i_rate ) == -1 ) |
|---|
| 1079 | | id->psz_rtpmap = NULL; |
|---|
| | 1070 | id->psz_enc = "mpeg4-generic"; |
|---|
| 1080 | 1071 | id->pf_packetize = rtp_packetize_mp4a; |
|---|
| 1081 | 1072 | sprintf_hexa( hexa, p_fmt->p_extra, p_fmt->i_extra ); |
|---|
| … | … | |
| 1107 | 1098 | config[5]=0xc0; |
|---|
| 1108 | 1099 | |
|---|
| 1109 | | if( asprintf( &id->psz_rtpmap, "MP4A-LATM/%d/%d", |
|---|
| 1110 | | p_fmt->audio.i_rate, |
|---|
| 1111 | | p_fmt->audio.i_channels ) == -1) |
|---|
| 1112 | | id->psz_rtpmap = NULL; |
|---|
| | 1100 | id->psz_enc = "MP4A-LATM"; |
|---|
| 1113 | 1101 | id->pf_packetize = rtp_packetize_mp4a_latm; |
|---|
| 1114 | 1102 | sprintf_hexa( hexa, config, 6 ); |
|---|
| … | … | |
| 1120 | 1108 | } |
|---|
| 1121 | 1109 | case VLC_FOURCC( 's', 'a', 'm', 'r' ): |
|---|
| 1122 | | id->psz_rtpmap = strdup( p_fmt->audio.i_channels == 2 ? |
|---|
| 1123 | | "AMR/8000/2" : "AMR/8000" ); |
|---|
| | 1110 | id->psz_enc = "AMR"; |
|---|
| 1124 | 1111 | id->psz_fmtp = strdup( "octet-align=1" ); |
|---|
| 1125 | 1112 | id->pf_packetize = rtp_packetize_amr; |
|---|
| 1126 | 1113 | break; |
|---|
| 1127 | 1114 | case VLC_FOURCC( 's', 'a', 'w', 'b' ): |
|---|
| 1128 | | id->psz_rtpmap = strdup( p_fmt->audio.i_channels == 2 ? |
|---|
| 1129 | | "AMR-WB/16000/2" : "AMR-WB/16000" ); |
|---|
| | 1115 | id->psz_enc = "AMR-WB"; |
|---|
| 1130 | 1116 | id->psz_fmtp = strdup( "octet-align=1" ); |
|---|
| 1131 | 1117 | id->pf_packetize = rtp_packetize_amr; |
|---|
| … | … | |
| 1133 | 1119 | case VLC_FOURCC( 's', 'p', 'x', ' ' ): |
|---|
| 1134 | 1120 | id->i_payload_type = p_sys->i_payload_type++; |
|---|
| 1135 | | if( asprintf( &id->psz_rtpmap, "SPEEX/%d", |
|---|
| 1136 | | p_fmt->audio.i_rate ) == -1) |
|---|
| 1137 | | id->psz_rtpmap = NULL; |
|---|
| | 1121 | id->psz_enc = "SPEEX"; |
|---|
| 1138 | 1122 | id->pf_packetize = rtp_packetize_spx; |
|---|
| 1139 | 1123 | break; |
|---|
| 1140 | 1124 | case VLC_FOURCC( 't', '1', '4', '0' ): |
|---|
| 1141 | | id->psz_rtpmap = strdup( "t140/1000" ); |
|---|
| | 1125 | id->psz_enc = "t140" ; |
|---|
| 1142 | 1126 | id->i_clock_rate = 1000; |
|---|
| 1143 | 1127 | id->pf_packetize = rtp_packetize_t140; |
|---|
| … | … | |
| 1219 | 1203 | } |
|---|
| 1220 | 1204 | |
|---|
| 1221 | | free( id->psz_rtpmap ); |
|---|
| 1222 | 1205 | free( id->psz_fmtp ); |
|---|
| 1223 | 1206 | |
|---|
| r5d33b82 |
r8da8aa9 |
|
| 206 | 206 | const char *type, const char *protocol, int dport, |
|---|
| 207 | 207 | unsigned pt, vlc_bool_t bw_indep, unsigned bw, |
|---|
| 208 | | const char *rtpmap, const char *fmtp) |
|---|
| | 208 | const char *ptname, unsigned clock, unsigned chans, |
|---|
| | 209 | const char *fmtp) |
|---|
| 209 | 210 | { |
|---|
| 210 | 211 | char *newsdp, *ptr; |
|---|
| … | … | |
| 238 | 239 | |
|---|
| 239 | 240 | /* RTP payload type map */ |
|---|
| 240 | | if (rtpmap != NULL) |
|---|
| 241 | | sdp_AddAttribute (sdp, "rtpmap", "%u %s", pt, rtpmap); |
|---|
| | 241 | if (ptname != NULL) |
|---|
| | 242 | { |
|---|
| | 243 | if ((strcmp (type, "audio") == 0) && (chans != 1)) |
|---|
| | 244 | sdp_AddAttribute (sdp, "rtpmap", "%u %s/%u/%u", pt, ptname, clock, |
|---|
| | 245 | chans); |
|---|
| | 246 | else |
|---|
| | 247 | sdp_AddAttribute (sdp, "rtpmap", "%u %s/%u", pt, ptname, clock); |
|---|
| | 248 | } |
|---|
| 242 | 249 | /* Format parameters */ |
|---|
| 243 | 250 | if (fmtp != NULL) |
|---|