Android HLS Streaming - 不同的Android版本在Stream中加载不同的位置

Hae*_*nal 18 android video-streaming http-live-streaming

我意识到在Android中支持HLS的程度方面存在一些问题.我正在尝试编写一个小型视频播放器演示(尽可能多地使用设备); 最好不要使用第三方图书馆; 可以流式传输HLS视频.

注意:我目前正在测试JellyBean 4.2.2,但可以访问其他版本

我已经设法使用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();
}
Run Code Online (Sandbox Code Playgroud)

更新:我在ICS 4.0.4上测试了相同的代码,它运行正常.在3.0.1中进行测试,在15分钟时加载流,然后从那里正确运行.

我该怎么做才能确保流在开始时启动,并在多个Android版本上正确播放?

或者,我应该使用更好的实现吗?

Hae*_*nal 14

经过一些进一步的调查,我发现以下信息可以帮助其他人在Android上运行HLS流媒体.

编码 - 视频编码和分段设置会对视频支持的Android版本产生巨大影响.我最终使用HandBrake创建了一个视频,其中包含以下设置:

  • MP4文件
  • H.264; 基线简介; 3级
  • AAC音频; 44.1K; 128 比特(注意:我发现JellyBean比ICS/Honeycomb对音频更挑剔.有些音频比特率会创建Jellybean根本不会播放的视频.一般来说Mono和低比特率音频似乎在Jellybean上运行得更好).

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

姜饼 - 我无法让Android 2.3与开箱即用的HLS一起使用,但我确实发现使用Vitamio库工作得很好(有关详细信息,请参阅此问题)


小智 1

您是否尝试在 URL 中为播放器提供启动参数?

像这样:

http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8?start=0