On 1/19/18 8:42 AM, Brendan McGrath wrote:
> Thanks Karthick - I can confirm that your patch does solve the issue.
Thanks for the confirmation.
>
> However - I noticed your patch does not include HEVC. I believe this format 
> is now supported in HLS (and that several players including iOS 11 now 
> provide support).
Yes, I just supported H264 since I was working on it. But that patch is modular 
enough to easily extend CODECS tag support for HEVC. 
Maybe somebody can add the HEVC support in CODECS tag later :)
>
> On 19/01/18 00:41, Jeyapal, Karthick wrote:
>> 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
>
>



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

Reply via email to