找不到有关androidx.media2.VideoView
的信息。
我想从正在使用VideoView1
的网址流式传输视频,但是我无法使用VideoView2
来实现。
他们在文档中描述了这种方法:
setVideoUri
开放乐趣setVideoUri(uri: Uri!, headers: MutableMap<String!, String!>?): Unit
使用特定的标题设置视频URI。
但是这种方法似乎不再可用(我正在使用mediaWidgetVersion 1.0.0-alpha06
)
答案 0 :(得分:2)
供以后参考 androidx.media2.widget.VideoView 的简单用法是:
- 根据需要创建 MediaMetadata 。在这里,我只是设置媒体标题
val mediaMetaData = MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_TITLE, "media title")
.build()
- 从任何来源创建 MediaItem 。在这里,我使用url作为来源
val mediaItem = UriMediaItem.Builder(videoUrl.toUri())
.setMetadata(mediaMetaData) // optional
.build()
- 通过调用
创建 SessionPlayer 并将其设置为 VideoViewsetPlayer
val mediaPlayer = MediaPlayer(this)
with(mediaPlayer) {
videoView.setPlayer(this)
setMediaItem(mediaItem)
// play when ready
prepare().addListener(
Runnable { play() },
Executors.BACKGROUND_EXECUTOR
)
}
答案 1 :(得分:0)
您应该使用MediaItem内部构建器来创建UriMediaItem
UriMediaItem yourUriMediaItemHere = new UriMediaItem.Builder(context, uri).build();
然后使用像这样的videoViews setMediaItem方法
videoView.setMediaItem(yourUriMediaItemHere);
答案 2 :(得分:0)
根据此文档: https://developer.android.com/reference/androidx/media2/widget/VideoView
将VideoView与SessionPlayer或MediaController一起使用 对于不需要与MediaSession进行通信的简单用例,应用程序需要创建一个扩展了SessionPlayer(例如MediaPlayer)的播放器实例,并通过调用setPlayer(SessionPlayer)将其链接到此视图。 对于需要MediaSession的更高级的用例(例如,处理媒体按键事件,与其他MediaSession应用程序集成为助手),应用程序需要创建一个附加到MediaSession的MediaController并通过调用setMediaController(MediaController)将其链接到此视图。 / p>
但是有一个非常重要的事情没有从本文档中注意到。
以下是有关如何使用此新package com.custom.ui.base.border;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.border.EmptyBorder;
/**
* This border for toolbar button component holds group of buttons. Clicking on this, one popup comes that
* contains all the options buttons available against this toolbar button.
*
* @version 1.0.0.1 (Sep 15, 2010)
* @author Arindam Roy
*/
public class ToolbarButtonOptionsBorder extends EmptyBorder {
/**
* Indicates width of the Down arrow icon width
*/
private int optionArrowWidth = 7;
/**
* Creates new instance of ToolbarButtonOptionsBorder
*/
public ToolbarButtonOptionsBorder() {
super(new Insets(4, 4, 4, 8));
}
/**
* Paints the border for the specified component with the specified position and size.
*
* @param c the component for which this border is being painted
* @param g the paint graphics
* @param x the x position of the painted border
* @param y the y position of the painted border
* @param width the width of the painted border
* @param height the height of the painted border
*/
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
super.paintBorder(c, g, x, y, width, height);
g.setColor(Color.LIGHT_GRAY);
int xPoints[] = new int[]{x + width - optionArrowWidth - 1, x + width - 1, x + width - 2 - (optionArrowWidth / 2)};
int yPoints[] = new int[]{y + (height / 2) - 1, y + (height / 2) - 1, y + (height / 2) + 3};
g.fillPolygon(xPoints, yPoints, xPoints.length);
g.drawLine(x + width - optionArrowWidth - 2, y + 5, x + width - optionArrowWidth - 2, height - 3);
g.setColor(Color.BLACK);
xPoints = new int[]{x + width - optionArrowWidth, x + width - 2, x + width - 2 - (optionArrowWidth / 2)};
yPoints = new int[]{y + (height / 2) - 1, y + (height / 2) - 1, y + (height / 2) + 2};
g.fillPolygon(xPoints, yPoints, xPoints.length);
}
}
的代码段。
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
的无用消息。