Java 如何使用新的androidx.media2.widget.VideoView 问题
无法找到有关androidx.media2.VideoView的信息。 我想从使用Java 如何使用新的androidx.media2.widget.VideoView 问题,java,android,kotlin,android-jetpack,androidx,Java,Android,Kotlin,Android Jetpack,Androidx,无法找到有关androidx.media2.VideoView的信息。 我想从使用VideoView1的url流式传输视频,但是使用VideoView2无法实现 我的研究 在文件中,他们描述了这种方法: setVideoUri 打开funsetVideoUri(uri:uri!,headers:MutableMap?):Unit 使用特定标头设置视频URI 但是,此方法似乎不再可用(我使用的是MediaWidgetVersion1.0.0-alpha06)您应该像这样使用MediaItem内部生
VideoView1
的url流式传输视频,但是使用VideoView2
无法实现
我的研究
在文件中,他们描述了这种方法:
setVideoUri
打开funsetVideoUri(uri:uri!,headers:MutableMap?):Unit
使用特定标头设置视频URI
但是,此方法似乎不再可用(我使用的是MediaWidgetVersion1.0.0-alpha06)您应该像这样使用MediaItem内部生成器来创建一个MediaItem
UriMediaItem yourUriMediaItemHere=new UriMediaItem.Builder(上下文,uri.build();
然后像这样使用videoViews setMediaItem方法
videoView.setMediaItem(yourUriMediaItemHere);
供将来参考androidx.media2.widget.VideoView的简单用法如下:
如果需要,创建媒体元数据。在这里,我只是简单地设置媒体标题
从任何来源创建MediaItem。这里我使用url作为源
创建SessionPlayer并通过调用setPlayer
根据这份文件:
将VideoView与SessionPlayer或MediaController一起使用
对于不需要与MediaSession通信的简单用例,应用程序需要创建一个扩展SessionPlayer(例如MediaPlayer)的播放器实例,并通过调用setPlayer(SessionPlayer)将其链接到此视图。
对于需要MediaSession的更高级用例(例如,处理媒体密钥事件、作为助手与其他MediaSession应用集成),应用程序需要创建连接到MediaSession的MediaController,并通过调用setMediaController(MediaController)将其链接到此视图
但是有一件非常重要的事情没有从这份文件中注意到
下面是关于如何使用这个新的VideoView
的代码片段
MediaMetadata mediaMetaData = new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_TITLE, url)
.build();
UriMediaItem mediaItem = new UriMediaItem.Builder(Uri.parse(url)).build();
mediaItem.setMetadata(mediaMetaData);
MediaPlayer mediaPlayer = new MediaPlayer(getActivity());
mediaPlayer.setMediaItem(mediaItem);
mediaPlayer.prepare();
videoView.setPlayer(mediaPlayer);
您必须调用mediaPlayer.prepare()
通知mediaPlayer
开始加载。
否则,您将得到带有无用消息的IllegalStateException
。我现在无法测试这个,但是,从源代码看,现在您似乎会使用VideoView\setMediaItem()
方法,您可以使用androidx.media2.UriMediaItem.Builder
类构造适当的MediaItem
。它有一个构造函数,它接受一个上下文
和一个Uri
,还有一个构造函数将它们与头映射
和一个列表
,这两个都是可选的(@Nullable
)。刚刚有机会测试一下,它得到了确认。只需将setVideoUri(Uri,?)
调用替换为对setMediaItem(MediaItem)
的调用,其中MediaItem
由androidx.media2.UriMediaItem.Builder构建而成。
val mediaItem = UriMediaItem.Builder(videoUrl.toUri())
.setMetadata(mediaMetaData) // optional
.build()
val mediaPlayer = MediaPlayer(this)
with(mediaPlayer) {
videoView.setPlayer(this)
setMediaItem(mediaItem)
// play when ready
prepare().addListener(
Runnable { play() },
Executors.BACKGROUND_EXECUTOR
)
}
MediaMetadata mediaMetaData = new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_TITLE, url)
.build();
UriMediaItem mediaItem = new UriMediaItem.Builder(Uri.parse(url)).build();
mediaItem.setMetadata(mediaMetaData);
MediaPlayer mediaPlayer = new MediaPlayer(getActivity());
mediaPlayer.setMediaItem(mediaItem);
mediaPlayer.prepare();
videoView.setPlayer(mediaPlayer);