Android 在exo player上播放视频,从我的youtube直播
我想将我的Youtube直播视频播放到我的android移动应用程序,即当我在Youtube上直播时,我想在exo player中播放该视频。 这是我的exoplayer代码,用于播放实时视频url。 我使用了youtube提取器Android 在exo player上播放视频,从我的youtube直播,android,exoplayer2.x,youtube-livestreaming-api,Android,Exoplayer2.x,Youtube Livestreaming Api,我想将我的Youtube直播视频播放到我的android移动应用程序,即当我在Youtube上直播时,我想在exo player中播放该视频。 这是我的exoplayer代码,用于播放实时视频url。 我使用了youtube提取器实现'com.github.HaarigerHarald:android youtubeExtractor:master SNAPSHOT' new YouTubeExtractor(this) { @Override public
实现'com.github.HaarigerHarald:android youtubeExtractor:master SNAPSHOT'
new YouTubeExtractor(this) {
@Override
public void onExtractionComplete(SparseArray<YtFile> ytFiles, VideoMeta vMeta) {
if (ytFiles != null) {
String url = ytFiles.get(22).getUrl();
playVideo(url);
}
}
}.extract("https://www.youtube.com/watch?v=LCfuylCR5ZQ", true, true);
private void playVideo() {
//Creating default track selector
TrackSelection.Factory adaptiveTrackSelection = new AdaptiveTrackSelection.Factory(new DefaultBandwidthMeter());
player = ExoPlayerFactory.newSimpleInstance(
new DefaultRenderersFactory(ExoPlayerJavaActivity.this),
new DefaultTrackSelector(adaptiveTrackSelection),
new DefaultLoadControl());
playerView.setPlayer(player);
DefaultBandwidthMeter defaultBandwidthMeter = new DefaultBandwidthMeter();
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(ExoPlayerJavaActivity.this,
Util.getUserAgent(ExoPlayerJavaActivity.this, "Employee Management"), defaultBandwidthMeter);
Uri uri = Uri.parse("https://www.youtube.com/watch?v=LCfuylCR5ZQ");
Handler mainHandler = new Handler();
MediaSource mediaSource = new HlsMediaSource(uri,
dataSourceFactory, mainHandler, null);
player.prepare(mediaSource);
player.setPlayWhenReady(playWhenReady);
player.addListener(new Player.EventListener() {
@Override
public void onTimelineChanged(Timeline timeline, Object manifest, int reason) {
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
}
@Override
public void onLoadingChanged(boolean isLoading) {
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
switch (playbackState) {
case ExoPlayer.STATE_READY:
loading.setVisibility(View.GONE);
break;
case ExoPlayer.STATE_BUFFERING:
loading.setVisibility(View.VISIBLE);
break;
}
}
@Override
public void onRepeatModeChanged(int repeatMode) {
}
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
}
@Override
public void onPlayerError(ExoPlaybackException error) {
}
@Override
public void onPositionDiscontinuity(int reason) {
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
}
@Override
public void onSeekProcessed() {
}
});
player.seekTo(currentWindow, playbackPosition);
player.prepare(mediaSource, true, false);
}
所有这些联系都意味着两件事;第一,你的媒体是无效的;第二,不支持实时流。为了排除媒体问题,VLC可以播放该链接吗?我使用了
YouTube提取器
,它正在播放普通视频,但不播放实况视频。请检查更新的代码@SharkIt似乎你不明白你仍然会遇到的错误,也不想尝试与其他播放器播放链接以排除这不是媒体问题,所以。。。既然您正在寻找调试帮助,我可以建议您发布一个吗?,,所有这些链接意味着两件事;第一,你的媒体是无效的;第二,不支持实时流。为了排除媒体问题,VLC可以播放该链接吗?我使用了YouTube提取器
,它正在播放普通视频,但不播放实况视频。请检查更新的代码@SharkIt似乎你不明白你仍然会遇到的错误,也不想尝试与其他播放器播放链接以排除这不是媒体问题,所以。。。既然您正在寻找调试帮助,我可以建议您发布一个吗?
E/ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.source.UnrecognizedInputFormatException: Input does not start with the #EXTM3U header.
at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:149)
at com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:48)
at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:138)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:320)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)