如何在 android 的 videoview 中播放 .mp4 视频?
Posted
技术标签:
【中文标题】如何在 android 的 videoview 中播放 .mp4 视频?【英文标题】:How to play .mp4 video in videoview in android? 【发布时间】:2013-06-28 06:31:38 【问题描述】:我正在开发一个视频播放器应用程序,我想在原生视频视图中播放 .mp4
视频。我无法使用 URL 播放视频。我收到错误“抱歉,无法播放此视频”,而且我也无法在本机视频视图中播放下载的视频。
我在视频视图中播放视频的代码:
String mUrl = "http://www.servername.com/projects/projectname/videos/1361439400.mp4";
VideoView mVideoView = (VideoView)findViewById(R.id.videoview)
videoMediaController = new MediaController(this);
mVideoView.setVideoPath(mUrl);
videoMediaController.setMediaPlayer(mVideoView);
mVideoView.setMediaController(videoMediaController);
mVideoView.requestFocus();
mVideoView.start();
【问题讨论】:
可能不支持特定的 mp4 编码。我在单独的答案中回答。要测试你可以尝试另一个 mp4,例如这个对我有用:archive.org/download/Pbtestfilemp4videotestmp4/video_test.mp4 我也这样做,但我仍然无法播放 .mp4 视频 08-12 14:37:30.599: D/MediaPlayer(23633): 无法在客户端打开文件,正在尝试服务器端 08- 12 14:37:33.095: E/MediaPlayer(23633): 错误 (1, -2147483648) 08-12 14:37:33.096: E/MediaPlayer(23633): 错误 (1,-2147483648) 08-12 14:37 :33.096: D/VideoView(23633): Error: 1,-2147483648 得到这个错误 【参考方案1】:终于对我有用了。
private VideoView videoView;
videoView = (VideoView) findViewById(R.id.videoView);
Uri video = Uri.parse("http://www.servername.com/projects/projectname/videos/1361439400.mp4");
videoView.setVideoURI(video);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
@Override
public void onPrepared(MediaPlayer mp)
mp.setLooping(true);
videoView.start();
);
【讨论】:
sn-p上面的mp是什么?? 它是一个媒体播放器的对象。 @HirenPatel 但最初它显示黑屏。【参考方案2】:我不确定这是不是问题,但对我有用的是调用 mVideoView.start();
inside mVideoView.setOnPreparedListener
事件回调。
例如:
Uri uriVideo = Uri.parse(<your link here>);
MediaController mediaController = new MediaController(mContext);
mediaController.setAnchorView(mVideoView);
mVideoView.setMediaController(mediaController);
mVideoView.setVideoURI(uriVideo);
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
@Override
public void onPrepared(MediaPlayer mp)
mVideoView.start();
);
【讨论】:
【参考方案3】:在 Kotlin 中你可以这样做
val videoView = findViewById<VideoView>(R.id.videoView)
// If url is from raw
/* val url = "android.resource://" + packageName
.toString() + "/" + R.raw.video*/
// If url is from network
val url = "http://www.servername.com/projects/projectname/videos/1361439400.mp4"
val video =
Uri.parse(url)
videoView.setVideoURI(video)
videoView.setOnPreparedListener
videoView.start()
【讨论】:
【参考方案4】:MP4 只是一个容器——它里面的视频和音频流都会被编码成不同的格式。
Android 本身仅支持某些类型的格式。 This is the list here.
确保支持视频和音频编码类型。仅仅因为它说“mp4”并不意味着它应该可以播放。
【讨论】:
那么,如何知道/设置视频编码技术【参考方案5】:检查您正在渲染的视频的格式。 mp4 格式的渲染从 API 级别 11 开始 格式必须是mp4(H.264)
我遇到了同样的问题,我必须将我的视频转换为多种格式,然后才能点击格式:使用总视频转换器将视频转换为 mp4。它就像一个魅力。
【讨论】:
我遇到了同样的问题,我必须先将我的视频转换为多种格式,然后才能点击格式:使用总视频转换器将视频转换为 mp4。相信我,它就像魅力一样 根据 android 纪录片 mp4 仅支持 API Level 11 (Gingerbread) 下次请在增强时编辑您的答案,而不是添加 cmets。我已经为你转移了其中一个 cmets。【参考方案6】:这样使用:
Uri uri = Uri.parse(URL); //Declare your url here.
VideoView mVideoView = (VideoView)findViewById(R.id.videoview)
mVideoView.setMediaController(new MediaController(this));
mVideoView.setVideoURI(uri);
mVideoView.requestFocus();
mVideoView.start();
另一种方法:
String LINK = "type_here_the_link";
VideoView mVideoView = (VideoView) findViewById(R.id.videoview);
MediaController mc = new MediaController(this);
mc.setAnchorView(videoView);
mc.setMediaPlayer(videoView);
Uri video = Uri.parse(LINK);
mVideoView.setMediaController(mc);
mVideoView.setVideoURI(video);
mVideoView.start();
如果您收到此错误Couldn't open file on client side, trying server side Error in Android。还有Refer this。 希望这会给你一些解决方案。
【讨论】:
我也这样做,但我仍然无法播放 .mp4 视频 08-12 14:37:30.599: D/MediaPlayer(23633): 无法在客户端打开文件,正在尝试服务器端 08- 12 14:37:33.095: E/MediaPlayer(23633): 错误 (1, -2147483648) 08-12 14:37:33.096: E/MediaPlayer(23633): 错误 (1,-2147483648) 08-12 14:37 :33.096: D/VideoView(23633): Error: 1,-2147483648 得到这个错误 错误信息“无法播放此视频”以上是关于如何在 android 的 videoview 中播放 .mp4 视频?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 中对 VideoView 执行放大/缩小?
如何在android中播放视频时拍摄videoview的快照?
如何检测 VideoView 何时开始播放(Android)?
如何在 android 的 videoview 中播放 .mp4 视频?