MediaPlayer的视频没玩过 [英] MediaPlayer Video not played
本文介绍了MediaPlayer的视频没玩过的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想文件夹使用媒体播放器播放从资产的视频。我首先拷贝在SD卡上。详细code是如下。
活动
公共类ActivityMediaPlayer扩展活动实现回调,OnBufferingUpdateListener,OnCompletionListener,在preparedListener {
私人SurfaceView米preVIEW;
私人SurfaceHolder持有人;
私人MediaPlayer的mMediaPlayer;
私人诠释mVideoWidth;
私人诠释mVideoHeight;
私有静态最后字符串变量=MediaPlayerDemo;
文件fvvVideoFile;
@覆盖
公共无效的onCreate(包冰柱){
super.onCreate(冰柱);
的setContentView(R.layout.lt_mediaplayer);
米preVIEW =(SurfaceView)findViewById(R.id.surface);
持有人= M preview.getHolder();
holder.addCallback(ActivityMediaPlayer.this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
字符串FICHIER_BLOW =testvideo.mp4;
fvvVideoFile =新的文件(Environment.getExternalStorageDirectory(),FICHIER_BLOW);
的BufferedOutputStream bufEcrivain;
尝试 {
bufEcrivain =新的BufferedOutputStream((新的FileOutputStream(fvvVideoFile)));
的BufferedInputStream VideoReader =新的BufferedInputStream(getResources()getAssets()开(视频/ testvideo.mp4));
byte []的BUFF =新的字节[32 * 1024];
INT LEN;
而((LEN = VideoReader.read(浅黄色))大于0){
bufEcrivain.write(BUFF,0,len个);
}
bufEcrivain.flush();
bufEcrivain.close();
}
赶上(FileNotFoundException异常E){e.printStackTrace();}
赶上(IOException异常E){e.printStackTrace();}
}
私人无效的playVideo(){
尝试 {
MediaPlayer的熔点为新的MediaPlayer();
乌里mpVideo = Uri.fromFile(fvvVideoFile);
尝试 {
mp.setDataSource(ActivityMediaPlayer.this,mpVideo);
MP prepare()。
}
赶上(抛出:IllegalArgumentException E){e.printStackTrace();}
赶上(IllegalStateException异常E){e.printStackTrace();}
赶上(IOException异常E){e.printStackTrace();}
}赶上(例外五){
Log.e(TAG,错误:+ e.getMessage(),E);
}
}
公共无效于prepared(MediaPlayer的媒体播放器){
mVideoWidth = mMediaPlayer.getVideoWidth();
mVideoHeight = mMediaPlayer.getVideoHeight();
如果(mVideoWidth = 0&安培;!&安培;!mVideoHeight = 0){
holder.setFixedSize(mVideoWidth,mVideoHeight);
mMediaPlayer.start();
}
}
@覆盖
公共无效surfaceChanged(SurfaceHolder为arg0,诠释ARG1,诠释ARG2,诠释ARG3){}
@覆盖
公共无效surfaceCreated(SurfaceHolder为arg0){
的playVideo();
}
@覆盖
公共无效surfaceDestroyed(SurfaceHolder为arg0){}
@覆盖
公共无效onBufferingUpdate(MediaPlayer的熔点,INT百分比){}
@覆盖
公共无效onCompletion(MediaPlayer的MP){}
@覆盖
保护无效的onDestroy(){
super.onDestroy();
如果(mMediaPlayer!= NULL){
mMediaPlayer.release();
mMediaPlayer = NULL;
}
}}
布局
< XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:方向=垂直
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT>
< SurfaceView机器人:ID =@ + ID /面
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_gravity =中心>
< / SurfaceView>
< / LinearLayout中>
有未显示视频,也不是表示logcat中的任何错误。难道我做错了什么吗?
解决方案
mp.setDisplay(架);
添加上述语句
公共无效surfaceCreated(SurfaceHolder持有者){
// TODO自动生成方法存根
}
这将解决这个问题。
I am trying to play a video from assets folder using media player. I am copying it on SD card first. The detailed code is as below.
Activity
public class ActivityMediaPlayer extends Activity implements Callback, OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener{
private SurfaceView mPreview;
private SurfaceHolder holder;
private MediaPlayer mMediaPlayer;
private int mVideoWidth;
private int mVideoHeight;
private static final String TAG = "MediaPlayerDemo";
File fvvVideoFile;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.lt_mediaplayer);
mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback(ActivityMediaPlayer.this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
String FICHIER_BLOW = "testvideo.mp4";
fvvVideoFile=new File(Environment.getExternalStorageDirectory(), FICHIER_BLOW);
BufferedOutputStream bufEcrivain;
try {
bufEcrivain = new BufferedOutputStream((new FileOutputStream(fvvVideoFile)));
BufferedInputStream VideoReader = new BufferedInputStream(getResources().getAssets().open("video/testvideo.mp4"));
byte[] buff = new byte[32 * 1024];
int len;
while( (len = VideoReader.read(buff)) > 0 ){
bufEcrivain.write(buff,0,len);
}
bufEcrivain.flush();
bufEcrivain.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
}
private void playVideo() {
try {
MediaPlayer mp = new MediaPlayer();
Uri mpVideo =Uri.fromFile(fvvVideoFile);
try {
mp.setDataSource(ActivityMediaPlayer.this, mpVideo);
mp.prepare();
}
catch (IllegalArgumentException e) {e.printStackTrace();}
catch (IllegalStateException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
}catch (Exception e) {
Log.e(TAG,"error: " + e.getMessage(), e);
}
}
public void onPrepared(MediaPlayer mediaplayer) {
mVideoWidth = mMediaPlayer.getVideoWidth();
mVideoHeight = mMediaPlayer.getVideoHeight();
if (mVideoWidth != 0 && mVideoHeight != 0) {
holder.setFixedSize(mVideoWidth, mVideoHeight);
mMediaPlayer.start();
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
playVideo();
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {}
@Override
public void onCompletion(MediaPlayer mp) {}
@Override
protected void onDestroy() {
super.onDestroy();
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}}
Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<SurfaceView android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
</SurfaceView>
</LinearLayout>
It is not displaying the video nor it is showing any error in Logcat. Am I doing something wrong here?
解决方案
mp.setDisplay(holder);
add the above statement in
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
This will solve the problem.
这篇关于MediaPlayer的视频没玩过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文