[FFmpeg-devel] [PATCH] sdp: Emit only one c= line for multiple streams, if they have the same destination
Luca Abeni
lucabe72
Tue Oct 5 15:31:06 CEST 2010
Hi Martin,
I'll have a look at this patch later (or tomorrow). Can you provide an
ffmpeg command line generating an SDP that vlc cannot read?
(I never managed to produce such SDPs, and I use ffmpeg to stream
sessions with multiple streams almost dayly).
Thanks,
Luca
On Tue, 2010-10-05 at 16:20 +0300, Martin Storsjo wrote:
> VLC/Live555 is unable to play a stream with multiple c= lines.
> ---
> libavformat/sdp.c | 17 ++++++++++++++++-
> 1 files changed, 16 insertions(+), 1 deletions(-)
>
> diff --git a/libavformat/sdp.c b/libavformat/sdp.c
> index a4bf7fb..a884d2c 100644
> --- a/libavformat/sdp.c
> +++ b/libavformat/sdp.c
> @@ -466,6 +466,7 @@ int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
> AVMetadataTag *title = av_metadata_get(ac[0]->metadata, "title", NULL, 0);
> struct sdp_session_level s;
> int i, j, port, ttl;
> + int samedest = 0;
> char dst[32], dst_type[5];
>
> memset(buff, 0, size);
> @@ -477,7 +478,19 @@ int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
>
> port = 0;
> ttl = 0;
> - if (n_files == 1) {
> + if (n_files > 1) {
> + sdp_get_address(dst, sizeof(dst), &ttl, ac[0]->filename);
> + samedest = 1;
> + for (i = 1; i < n_files && samedest; i++) {
> + char dst_tmp[32];
> + int ttl_tmp = 0;
> + sdp_get_address(dst_tmp, sizeof(dst_tmp), &ttl_tmp,
> + ac[i]->filename);
> + if (strcmp(dst_tmp, dst) || ttl_tmp != ttl)
> + samedest = 0;
> + }
> + }
> + if (n_files == 1 || samedest) {
> port = sdp_get_address(dst, sizeof(dst), &ttl, ac[0]->filename);
> resolve_destination(dst, sizeof(dst), dst_type, sizeof(dst_type));
> if (dst[0]) {
> @@ -497,6 +510,8 @@ int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
> if (n_files != 1) {
> port = sdp_get_address(dst, sizeof(dst), &ttl, ac[i]->filename);
> resolve_destination(dst, sizeof(dst), dst_type, sizeof(dst_type));
> + if (samedest)
> + dst[0] = 0;
> }
> for (j = 0; j < ac[i]->nb_streams; j++) {
> ff_sdp_write_media(buff, size,
More information about the ffmpeg-devel
mailing list