本文介绍了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:机器人=htt​​p://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的视频没玩过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 21:26