On 1/18/18 6:53 PM, Brendan McGrath wrote:
> I tried your suggestion and it still didn't work. So I took another look at 
> the spec and it looks like what was originally there was correct (as seen in 
> the below example):
> https://tools.ietf.org/html/rfc8216#section-8.6
>
> In that example - english-audio.m3u8 appears in both a MEDIA and STREAM-INF 
> entry with the STREAM-INF entry including an AUDIO tag that references back 
> to itself.
>
> So I believe this patch can be dropped.
>
> What I did discover was that it worked when I added a CODECS tag to the 
> STREAM-INF variant of the audio stream. The spec just says:
> Every EXT-X-STREAM-INF tag SHOULD include a CODECS attribute
>
> So I guess this is a bug in iOS.
I agree. But, there is a patch available 
https://patchwork.ffmpeg.org/patch/7000/ to add CODECS tag. 
You could check if applying that patch solves your issue. 
>
> On 18/01/18 21:59, Dixit, Vishwanath wrote:
>>
>> On 1/18/18 2:39 PM, Brendan McGrath wrote:
>>> When using an 'agroup' within var_stream_map - the audio stream is
>>> being added to the master playlist file as both an audio rendition
>>> and an individual stream (with an AUDIO reference back to itself).
>>>
>>> This patch ensures an audio rendition does not also appear within
>>> the stream info list.
>>>
>>> What follows is an example of the command to create this issue and
>>> the contents of the master playlist before and after this patch is
>>> applied:
>>>
>>> ffmpeg -i in.ts -b:a:0 128k -b:v:0 1800k -b:v:1 1024k -map 0:a \
>>> -map 0:v -map 0:v -f hls -var_stream_map "a:0,agroup:audio_0 "\
>>> "v:0,agroup:audio_0 v:1,agroup:audio_0" -master_pl_name \
>>> tv_hls.m3u8 tv_hls_%v.m3u8
>>>
>>> Before:
>>>   #EXTM3U
>>>   #EXT-X-VERSION:3
>>>   
>>> #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio_0",NAME="audio_0",DEFAULT=YES,URI="tv_hls_0.m3u8"
>>>   #EXT-X-STREAM-INF:BANDWIDTH=140800,AUDIO="group_audio_0"
>>>   tv_hls_0.m3u8
>>>
>>>   
>>> #EXT-X-STREAM-INF:BANDWIDTH=2120800,RESOLUTION=1920x1080,AUDIO="group_audio_0"
>>>   tv_hls_1.m3u8
>>>
>>>   
>>> #EXT-X-STREAM-INF:BANDWIDTH=1267200,RESOLUTION=1920x1080,AUDIO="group_audio_0"
>>>   tv_hls_2.m3u8
>>>
>>> After:
>>>   #EXTM3U
>>>   #EXT-X-VERSION:3
>>>   
>>> #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio_0",NAME="audio_0",DEFAULT=YES,URI="tv_hls_0.m3u8"
>>>   
>>> #EXT-X-STREAM-INF:BANDWIDTH=2120800,RESOLUTION=1920x1080,AUDIO="group_audio_0"
>>>   tv_hls_1.m3u8
>>>
>>>   
>>> #EXT-X-STREAM-INF:BANDWIDTH=1267200,RESOLUTION=1920x1080,AUDIO="group_audio_0"
>>>   tv_hls_2.m3u8
>>>
>>> Signed-off-by: Brendan McGrath <red...@redmandi.dyndns.org>
>>> ---
>>>
>> Some use cases may need audio only variant streams. Ex: when bandwidth is 
>> too low. Also, I think the playback issue you are seeing, is because of 
>> AUDIO referencing back to itself, but, not because of audio only variant 
>> stream. So, instead of completely removing the audio only variant streams, 
>> you can just remove the self-referencing attribute (AUDIO=) from the 
>> #EXT-X-STREAM-INF tag’s attribute list, for the audio only variant streams.
>> #EXTM3U
>> #EXT-X-VERSION:3
>> #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio_0",NAME="audio_0",DEFAULT=YES,URI="tv_hls_0.m3u8"
>> #EXT-X-STREAM-INF:BANDWIDTH=140800
>> tv_hls_0.m3u8
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=2120800,RESOLUTION=1920x1080,AUDIO="group_audio_0"
>> tv_hls_1.m3u8
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=1267200,RESOLUTION=1920x1080,AUDIO="group_audio_0"
>> tv_hls_2.m3u8
>>
>>
>>> Pre-patch - the hls stream I was testing would not play on the iOS devices 
>>> I was testing with.
>>>
>>> With the patch applied - they now play the stream
>>>
>>>   libavformat/hlsenc.c | 3 +++
>>>   1 file changed, 3 insertions(+)
>>>
>>> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
>>> index e36120c..a75853b 100644
>>> --- a/libavformat/hlsenc.c
>>> +++ b/libavformat/hlsenc.c
>>> @@ -1172,6 +1172,9 @@ static int create_master_playlist(AVFormatContext *s,
>>>       for (i = 0; i < hls->nb_varstreams; i++) {
>>>           vs = &(hls->var_streams[i]);
>>>   +        if (!vs->has_video && !vs->has_subtitle && vs->agroup)
>>> +            continue;
>>> +
>>>           m3u8_name_size = strlen(vs->m3u8_name) + 1;
>>>           m3u8_rel_name = av_malloc(m3u8_name_size);
>>>           if (!m3u8_rel_name) { 
>>
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel 
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel 



_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to