没有关于HLS Stream的视频Android 4.4.2三星Galaxy S5

时间:2014-08-06 01:21:01

标签: android video video-streaming s5

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的合法错误吗?

2 个答案:

答案 0 :(得分:2)

我已经注意到4.4.2中的其他问题中的这种行为,其中的问题似乎因设备和制造商而异。通过实验,我注意到以下几点:

  1. 输入退出全屏似乎会重置渲染器。我怀疑这会强制浏览器创建一个新的视图或其他东西
  2. 重新加载视频似乎有助于渲染器
  3. 改变消息来源似乎让事情变得更糟
  4. 我们的产品主要用于播放列表 - 当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);
    
    1. 这是为了修复“在某些设备上开始播放后全屏按钮消失”bug
    2. 我们为此函数命名,以便稍后删除它。如果他们要求退出全屏,那么如果全屏按钮消失,他们就不会责怪你的播放器。在这一点上,他们会责怪手机,他们将刷新页面。这样,如果他们在尝试滚动
    3. 时不小心再次全屏显示,人们就不会生气
    4. 辅助功能。我们不想在全屏时重新启动视频,除非我们必须
    5. 股票互联网浏览器抛出这两个事件
    6. Chrome会引发此事件
    7. 我还有很多其他的黑客攻击。例如,Galaxy S4上的股票互联网浏览器在到达视频结尾时并不总是抛出ended事件。出于这个原因,我每1秒检查一次setInterval。如果视频在过去1秒内移动的时间少于0.5秒,则从未暂停(我有一个在resumepause事件中设置的标记)然后假设你已经到了最后。

答案 1 :(得分:1)

我使用preload="none"取得了成功。切换到auto只能播放音频,使用none可以正常播放视频和音频。这是在三星S3,Android 4.4.2上测试的。

编辑:autoplay也会导致问题。删除它似乎是必要的。