Android HLS流式传输 ,不同的Android版本如何在流中加载不同的位置?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我设法使用MediaPlayer类,以便我的应用程序能够开始播放流(例如Apple的测试视频BipBopAll),但它似乎正在加载流的错误部分,因为视频似乎在29分钟后开始播放。

我使用的代码非常基本:

private void playTrack()
{   
    player = new MediaPlayer();

    try 
    {                   
        player.setDisplay(holder);
        player.setDataSource("http://devimages.apple.com/iphone/samples/bipbop
                              /bipbopall.m3u8");
        player.prepare();

    } 
    catch (...) 
    {
    }
    player.start();
}

我应该使用更好的实现方法吗?

提问于
用户回答回答于

某些Android版本似乎将HLS的http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8解释为实况HLS而不是VOD HLS,因此媒体播放器开始接近“实时”点,接近内容结束,大约29分钟内容。

原因如下:4.3之前,HLS播放列表文件中的最后一行没有被解析,除非以'\ n'结尾。

解决旧版本问题的一种方法是在服务器上播放列表的最后一行之后添加新行,或者在应用中实施HTTP代理,以有效地添加新行。

用户回答回答于

在进一步调查之后,我发现以下信息可以帮助其他人在Android上运行HLS流:

视频编码和分段设置可能会对视频支持的Android版本产生很大影响。我最终使用HandBrake创建了一个视频,并具有以下设置:

  • MP4文件
  • H.264; 基线概况; 3级
  • AAC Audio; 44.1K; 128bit(注意:我发现JellyBean对音频比ICS / Honeycomb更挑剔,有些音频比特率会创建Jellybean根本无法播放的视频,通常Mono和低比特率音频在Jellybean上看起来效果更好)。

分段 - 使用Apple MediaFileSegmenter,我发现添加“-no-floating-point-duration”和“-z none”标志允许我创建一个适用于Android 3.0-> 4.2的视频。

扫码关注云+社区