HLS流不播放视频,但它们确实播放音频。
设备信息:
三星Galaxy S5
Android 4.4.2 / Build KOT49H
Chrome 36.0.1985.131
在其他Android版本和设备上播放的HLS Streams:
使用Samsung S5上的浏览器应用程序“Internet”,它将播放HLS流的视频,这让我觉得这可能是Chrome的一个问题,但是,在Nexus 5设备上进行测试时确切相同的Chrome版本(Android 4.4.4除外),视频播放效果正常。
Android问题排队已Issue 63810: No video in HLS live streaming on Android KitKat,我尽了最大努力。
如何获取有关问题性质的更多信息?
这是Android 4.4.2 Samsung S5的合法错误吗?
答案 0 :(得分:2)
我已经注意到4.4.2中的其他问题中的这种行为,其中的问题似乎因设备和制造商而异。通过实验,我注意到以下几点:
我们的产品主要用于播放列表 - 当ended
事件触发一个视频时,我们会更改视频src
并致电.load()
和.play()
转到下一个。在某些设备上,如果第一个src
是HLS视频播放正常,但如果第一个src
是mp4或webm,那么切换到HLS会导致您丢失视频。在其他设备上,它是相反的行为 - 从HLS开始失败但切换到它成功。在某些设备上,如果您在开始播放之前进入全屏,HLS会有视频,而在其他设备上,如果您在开始播放后进入全屏,则只有视频。在某些设备上,开始播放后,全屏按钮会消失。
这不太理想,老实说非常黑客,但我想出了这个丑陋的解决方案:
// 1.
video.addEventListener('click', requestFullScreen);
// 2.
function requestFullScreen() {
video.removeEventListener('click', requestFullScreen);
video.webkitRequestFullScreen();
}
// 3.
function reloadVideo() {
var ext = video.src.substr( video.src.lastIndexOf('.') ).toLowerCase();
if( ext == '.m3u8' ) {
video.load();
video.play();
}
}
// 4.
video.addEventListener('webkitbeginfullscreen', reloadVideo, false);
video.addEventListener('webkitendfullscreen', reloadVideo, false);
// 5.
video.addEventListener('webkitfullscreenchange', reloadVideo, false);
我还有很多其他的黑客攻击。例如,Galaxy S4上的股票互联网浏览器在到达视频结尾时并不总是抛出ended
事件。出于这个原因,我每1秒检查一次setInterval
。如果视频在过去1秒内移动的时间少于0.5秒且,则从未暂停(我有一个在resume
和pause
事件中设置的标记)然后假设你已经到了最后。
答案 1 :(得分:1)
我使用preload="none"
取得了成功。切换到auto
只能播放音频,使用none
可以正常播放视频和音频。这是在三星S3,Android 4.4.2上测试的。
编辑:autoplay
也会导致问题。删除它似乎是必要的。