Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用新的androidx.media2.widget.VideoView 问题_Java_Android_Kotlin_Android Jetpack_Androidx - Fatal编程技术网

Java 如何使用新的androidx.media2.widget.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内部生

无法找到有关androidx.media2.VideoView的信息。 我想从使用
VideoView1
的url流式传输视频,但是使用
VideoView2
无法实现

我的研究 在文件中,他们描述了这种方法:

setVideoUri
打开fun
setVideoUri(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);