我意识到在Android对HLS的支持程度方面存在一些问题。我正在尝试编写一个小的videoplayer演示程序(以在尽可能多的设备上工作);最好不要使用第三方库;它可以流式传输HLS视频。
注释:我目前正在JellyBean 4.2.2上测试,但可以访问其他版本
我已经设法使用了MediaPlayer类,以便我的应用程序能够开始播放流(例如苹果的测试视频BipBopAll),但它似乎加载了错误的流部分,因为视频似乎在29分钟后开始(因此它在大约30秒后结束)。
我使用的代码非常简单:
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();
}
我已经在 4.0.4上测试了同样的代码,它工作正常。在3.0.1中测试,在15分钟时加载流,然后从那里正确运行。
如何确保流从开头开始,并在多个Android版本上正确播放?
或者,有没有我应该使用的更好的实现?
发布于 2013-06-14 22:19:36
经过进一步的调查,我发现了以下信息,希望能帮助其他人在Android上使用HLS流媒体。
Android编码-视频编码和分割设置会对视频支持的版本产生很大影响。我最终使用HandBrake创建了一个视频,设置如下:
Segmentation -使用苹果MediaFileSegmenter,我发现添加“-no-Segmentation-point-duration”和"-z none“标志可以创建一个可以在Android3.0->4.2上运行的视频
姜饼-我无法让Android2.3开箱即用,但我发现使用Vitamio库工作得很好(有关更多信息,请参阅this question )
发布于 2013-11-19 02:11:46
一些版本的Android似乎将http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8上的HLS解释为live HLS而不是VOD HLS,因此媒体播放器在接近"live“点时开始播放,接近内容结束时,大约29分钟。
原因如下:在4.3之前,HLS播放列表文件中的最后一行不会被解析,除非它以'\n‘结尾。
查看该文件的更改历史:http://androidxref.com/4.3_r2.1/history/frameworks/av/media/libstagefright/httplive/M3UParser.cpp,在12/31/12,有一些更改修复了该问题。这个问题在4.4上已经不存在了。
因此,解决旧版本问题的一种方法是在服务器上播放列表的最后一行之后添加换行符,或者在应用程序中实现一个HTTP代理来有效地添加该换行符,这可能不是微不足道的……
发布于 2013-05-29 18:20:05
你有没有尝试在URL中给播放器一个start参数?
如下所示:
"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8?start=0“
https://stackoverflow.com/questions/16810673
复制相似问题