[vlc-devel] [PATCH 2/2] demux: asf: do ES audio selection for mms (fix #8797, #3400, #3797)

David Glaude david.glaude at gmail.com
Sun Feb 15 17:51:25 CET 2015


Dear, (sorry for previous message)

I am afraid this or some other change in modules/access/mms/mmsh.c or
modules/demux/asf/asf.c
is breaking the access to the European Parliament LIVE and VOD stream (they
are multilingual and multi-bitrate).

With 2.1.5 and similar release, the work arround to see all the available
language (and video track) is to use --mms-all.
It has uggly side effect such as opening 3 video windows and requesting
from the streamer all the track (with a lot of unecessary bandwidth
consumed... but it kind of work).

With 2.2.0 rc2 (I tested the lattest nightly build) --mms-all is not
required anymore. By default, it only request one video track and one audio
track (this might be due to another patch) but it display all the available
audio and play one V+A combo.

The problem is when changing audio track it either fail (silence) or freeze
(no sound and no video at all).

Here is a reproduction steps with an easy stream (3V+4A where the audio are
DE+EN+FR+ZU):
1) Open the network stream and paste the URL: mms://
vodwms.europarl.europa.eu/wmv/nas/nasvod02/cod1502/wm_pad/Channel01/VODChapter_20150212_17114500_17403100_Ch01_1138bb4a14b7c14553a-1582.wmv?wmcache=0
2) Wait for the video to start, audio is DE and the language selection UI
display 1-DE, 2-EN, 3-FR, 4-ZU
3) Switch to English from the UI. $BUG$ no sound it playing but the video
"continue"
4) Switch to French from the UI. OK the video continue and french can be
heard
5) Switch to Zulu. $BUG$ VLC freeze, the video stop and no audio

Actually, switching between DE and FR always work, switching to EN seems to
always give silence and switch to ZU always "freeze".

I will try with some 3.0.0 nightly build and then try to find the nightly
build of 2.2.0 just before and just after this patch to see if it really is
the culprit.

It is obviously a step in the right direction (to display the list of
language and let us pick in streaming mode) but it currently make 2.2.0 a
bit unusable for EP content.

David Glaude

2013-12-03 19:05 GMT+01:00 Francois Cartegnie <fcvlcdev at free.fr>:

> ---
>  modules/access/mms/mmsh.c | 20 ++++++++++++++++++++
>  modules/demux/asf/asf.c   | 34 ++++++++++++++++++++++++++--------
>  2 files changed, 46 insertions(+), 8 deletions(-)
>
> diff --git a/modules/access/mms/mmsh.c b/modules/access/mms/mmsh.c
> index d354d28..414dfd4 100644
> --- a/modules/access/mms/mmsh.c
> +++ b/modules/access/mms/mmsh.c
> @@ -261,6 +261,26 @@ static int Control( access_t *p_access, int i_query,
> va_list args )
>              *pb_bool =  p_sys->asfh.stream[i_int].i_selected ? true :
> false;
>              break;
>
> +        case ACCESS_SET_PRIVATE_ID_STATE:
> +            i_int = (int)va_arg( args, int );
> +            b_bool = (bool)va_arg( args, int );
> +            if( (i_int < 0) || (i_int > 127) )
> +                return VLC_EGENERIC;
> +            else
> +            {
> +                int i_cat = p_sys->asfh.stream[i_int].i_cat;
> +                for ( int i=0; i< 128; i++ )
> +                {
> +                    /* First unselect all streams from the same cat */
> +                    if ( i_cat == p_sys->asfh.stream[i].i_cat )
> +                        p_sys->asfh.stream[i].i_selected = false;
> +                }
> +                p_sys->asfh.stream[i_int].i_selected = true;
> +                Stop( p_access );
> +                Seek( p_access, p_access->info.i_pos );
> +                return VLC_SUCCESS;
> +            }
> +
>          case ACCESS_SET_PAUSE_STATE:
>              b_bool = (bool)va_arg( args, int );
>              if( b_bool )
> diff --git a/modules/demux/asf/asf.c b/modules/demux/asf/asf.c
> index f169d37..bde94e6 100644
> --- a/modules/demux/asf/asf.c
> +++ b/modules/demux/asf/asf.c
> @@ -354,6 +354,7 @@ static int Control( demux_t *p_demux, int i_query,
> va_list args )
>      demux_sys_t *p_sys = p_demux->p_sys;
>      vlc_meta_t  *p_meta;
>      int64_t     i64, *pi64;
> +    int         i;
>      double      f, *pf;
>
>      switch( i_query )
> @@ -388,6 +389,20 @@ static int Control( demux_t *p_demux, int i_query,
> va_list args )
>          }
>          return SeekPercent( p_demux, i_query, args );
>
> +    case DEMUX_SET_ES:
> +    {
> +        i = (int)va_arg( args, int );
> +        int i_ret = stream_Control( p_demux->s,
> +                                    STREAM_SET_PRIVATE_ID_STATE, i, true
> );
> +        if ( i_ret == VLC_SUCCESS )
> +        {
> +            SeekPrepare( p_demux );
> +            p_sys->i_seek_track = 0;
> +            WaitKeyframe( p_demux );
> +        }
> +        return i_ret;
> +    }
> +
>      case DEMUX_GET_POSITION:
>          if( p_sys->i_time < 0 ) return VLC_EGENERIC;
>          if( p_sys->i_length > 0 )
> @@ -1003,15 +1018,18 @@ static int DemuxInit( demux_t *p_demux )
>          tk->p_esp = NULL;
>          tk->p_frame = NULL;
>
> -        /* Check (in case of mms) if this track is selected (ie will
> receive data) */
> -        if( !stream_Control( p_demux->s, STREAM_GET_PRIVATE_ID_STATE,
> -                             (int) p_sp->i_stream_number,
> &b_access_selected ) &&
> -            !b_access_selected )
> +        if ( strncmp( p_demux->psz_access, "mms", 3 ) )
>          {
> -            tk->i_cat = UNKNOWN_ES;
> -            msg_Dbg( p_demux, "ignoring not selected stream(ID:%u) (by
> access)",
> -                     p_sp->i_stream_number );
> -            continue;
> +            /* Check (not mms) if this track is selected (ie will receive
> data) */
> +            if( !stream_Control( p_demux->s, STREAM_GET_PRIVATE_ID_STATE,
> +                                 (int) p_sp->i_stream_number,
> &b_access_selected ) &&
> +                !b_access_selected )
> +            {
> +                tk->i_cat = UNKNOWN_ES;
> +                msg_Dbg( p_demux, "ignoring not selected stream(ID:%u)
> (by access)",
> +                         p_sp->i_stream_number );
> +                continue;
> +            }
>          }
>
>          /* Find the associated extended_stream_properties if any */
> --
> 1.8.3.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20150215/0908ae90/attachment.html>


More information about the vlc-devel mailing list