通过HTTPS上Android 2.3的播放.m3u8文件(Playing .m3u8 file t

2019-07-19 16:23发布

在我的代码中的某个时刻,应用发现指向.m3u8文件的URL。 这是接下来会发生什么:

mVideoView.setVideoURI(Uri.parse(feed.getUrl().toString())); // feed.getUrl returns the url
mVideoView.start();

它适用于Android 3.1+的罚款。 没有在早期版本,因为它使用HTTPS(看到这一点: http://developer.android.com/guide/appendix/media-formats.html )

所以我所做的是我创造了我的应用程序的新版本为Android 2.2以上版本使用vitamio,这应该使我更容易的库。 但是,如果(android.widget.VideoView)完美处理它,(io.vov.vitamio.widget.VideoView)需要很长的时间来加载流,并最终说这句话的同时崩溃:

但是,当我尝试加载此网址: http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8它工作正常!

我不能分享我需要使用的URL,但在这里它是指向.m3u8的内容:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=264000
playlist.m3u8?session=003016302664236&index=0
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1364000
playlist.m3u8?session=003016302664236&index=1
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=44000
playlist.m3u8?session=003016302664236&index=2

因此,主要的区别我可以这一个,苹果一个样本之间看,是我使用HTTPS,我的文件是指向其他.m3u8文件(而苹果的.m3u8指向.ts文件)..似乎都使用AAC音频。

这个问题似乎vitamio是相关的。 我怎样才能解决这个崩溃? 非常感谢你。

Answer 1:

我找到了解决办法!

所以,我应该说的第一件事是,我很困惑,我没有使用HTTPS,但我的解决方案应为https使用过。

首先,你可能需要使用Vitamio像我一样,因为姜饼不支持现场直播(再次,看这个 )。 现在的事情是,如果您的M3U8文件是.ts文件列表,它应该工作的罚款。 但是,如果它指向其他M3U8文件..

那么你得自己解析它。 你能做到这样,例如:

url = new URL(livetvchannel.getUrl());
InputStream M3U8 = (InputStream) url.getContent();      
BufferedReader br = new BufferedReader(new InputStreamReader(M3U8));
for(int i = 0; i < 2; ++i)
    br.readLine();
String target = br.readLine(); //this parses the third line of the playlist
br.close();
url = new URL(baseURL.concat(target)); 
//if the m3u8 url is relative, you have to concat it with the path
//Note: You have to do all this in a thread, you can't do network on UiThread


mVideoView.setVideoURI(Uri.parse(url.toString())); //Run this on UiThread

网址将指向视频流。 和你去那里! 到底是不是很辛苦。 :)



文章来源: Playing .m3u8 file through HTTPS on android 2.3