在Google VR for Android示例中播放m3u8

4

我尝试在Google VRVideoView示例中播放m3u8格式的URL https://developers.google.com/vr/android/samples/vrview。当使用mp4或flv格式时,一切正常,但是当我尝试使用m3u8格式时,出现以下错误:

com.google.vr.sdk.samples.simplevideowidget E/VrVideoPlayerInternal: 136877483.onPlayerError com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.extractor.ExtractorSampleSource$UnrecognizedInputFormatException: None of the available extractors (WebmExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor) could read the stream. at com.google.android.exoplayer.SampleSourceTrackRenderer.maybeThrowError(SampleSourceTrackRenderer.java:263) at com.google.android.exoplayer.SampleSourceTrackRenderer.maybeThrowError(SampleSourceTrackRenderer.java:149) at com.google.android.exoplayer.ExoPlayerImplInternal.incrementalPrepareInternal(ExoPlayerImplInternal.java:275) at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:154) at android.os.HandlerThread.run(HandlerThread.java:61) at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
由于: com.google.android.exoplayer.extractor.ExtractorSampleSource$UnrecognizedInputFormatException: None of the available extractors (WebmExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor) could read the stream. at com.google.android.exoplayer.extractor.ExtractorSampleSource$ExtractorHolder.selectExtractor(ExtractorSampleSource.java:899) at com.google.android.exoplayer.extractor.ExtractorSampleSource$ExtractingLoadable.load(ExtractorSampleSource.java:829) at com.google.android.exoplayer.upstream.Loader$LoadTask.run(Loader.java:209) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761)
我可以看到这个错误堆栈中使用了Exoplayer来播放视频,但它不应该能够与m3u8一起工作吗?这是我使用的URL:http://www.nacentapps.com/m3u8/index.m3u8
谢谢您的帮助!

m3u8是一个播放列表文件,不是实际的媒体文件。这个SO问题可能会有所帮助:https://dev59.com/eF0Z5IYBdhLWcg3wdQPT - Morrison Chang
我在这里遇到的问题是我无法直接访问ExoPlayer。我只能操作一个VrVideoView对象,该对象内部使用ExoPlayer。我还编辑了我的先前消息:TS文件可以正常工作。 - Antoine
你不能只是读取.m3u8文件,然后通过迭代每个视频将URL传递给VrVideoView.loadVideo(url)方法,并在加载下一个视频之前等待VrVideoEventListener.onCompleted()吗? - Morrison Chang
你找到解决方案了吗?我能做些什么? - ovluca
3个回答

1

要播放m3u8,您只需要将选项输入格式更改为,并且它就会

'Uri uri = Uri.parse("https:proper_url.m3u8");
VrVideoView.Options vrVideoView = new VrVideoView.Options(); 
vrVideoView.inputFormat = VrVideoView.Options.FORMAT_HLS; 
videoWidgetView.loadVideo(uri, vrVideoView)'

0

0

在初始化Exoplayer时,使用以下代码播放.m3u8文件:

Handler mHandler = new Handler();

String userAgent = Util.getUserAgent(context, "Exo Player");

DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory(
                userAgent, null,
                DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
                1800000,
                true);

HlsMediaSource mediaSource = new HlsMediaSource(Uri.parse(mediaUrl),dataSourceFactory, 1800000,mHandler, null);

if (mediaUrl != null) {
    videoPlayer.prepare(mediaSource);
    videoPlayer.setPlayWhenReady(true);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接