我正在使用以下代码播放HLS流:
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource("http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_all.m3u8");
mediaPlayer.setDisplay(holder);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
使用此代码,根据播放到VLC中的相同流,我在视频中看到的内容大约晚了5分钟。
播放器开始播放.m3u8文件的第一个块。 但是hls规范确定第一个块是较旧的,最后一个是最新的。所以玩家应该开始播放文件的最后一块。
我怀疑与setDataSource方法的参数有关,但我无法弄清楚如何。
答案 0 :(得分:2)
我遇到了同样的问题 - 看起来在Android上启动实时HLS提要(没有EXT-X-ENDLIST标记)时,核心HLS解析组件中的错误无法启动实时点(Feed的结尾),而是从流的开头开始。
code.google.com上有一个关于此问题的错误 - 您可以在其中“加注星标”或在其中投票:
答案 1 :(得分:1)
我不相信HLS规范没有明确说明要开始的段,但通常是从现场hls的第三个段开始。
您所指的流是视频点播(VOD)HLS来源。唯一的区别是播放列表使用#EXT-X-ENDLIST终止。导致:
$ curl http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_700.m3u8 ... #EXTINF:10, http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_700/Seg_060110_103747_44/nasatv_700_060110_103747_87966.ts #EXTINF:0, http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_700/Seg_060110_103747_44/nasatv_700_060110_103747_87967.ts #EXT-X-ENDLIST
看看Envivio页面,我相信他们有一些你可以测试的实时HLS频道。
一般性评论:在测试HLS方面,不要依赖VLC。