Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.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
尝试使用android.media.MediaPlayer和SurfaceView播放媒体文件时出现问题?_Android - Fatal编程技术网

尝试使用android.media.MediaPlayer和SurfaceView播放媒体文件时出现问题?

尝试使用android.media.MediaPlayer和SurfaceView播放媒体文件时出现问题?,android,Android,我正在尝试使用android.media.MediaPlayer类来播放.mp4文件。我正在模拟器上进行尝试。不幸的是,我在运行应用程序时只看到一个空白屏幕 我已将文件testmp4放入文件夹mnt/sdcard/ 这是我正在使用的代码。有人能告诉我我做错了什么吗 package com.mediaplayer; import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer;

我正在尝试使用android.media.MediaPlayer类来播放.mp4文件。我正在模拟器上进行尝试。不幸的是,我在运行应用程序时只看到一个空白屏幕

我已将文件testmp4放入文件夹mnt/sdcard/

这是我正在使用的代码。有人能告诉我我做错了什么吗

package com.mediaplayer;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MyPlayBack extends Activity implements SurfaceHolder.Callback{
    /** Called when the activity is first created. */
    private  MediaPlayer mediaPlayer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

         mediaPlayer=new MediaPlayer();
        SurfaceView surface=(SurfaceView)findViewById(R.id.surface);
        SurfaceHolder holder=surface.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        holder.setFixedSize(400, 300);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub



    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        mediaPlayer.setDisplay(holder);
        try {
            mediaPlayer.setDataSource("/sdcard/testmp4.mp4");
            mediaPlayer.prepare();
            mediaPlayer.start();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        mediaPlayer.release();
    }
}
main.xml


<强>编辑< /强>:最近我发现当我让应用程序运行很长一段时间时,我看到空白的白色屏幕。但是当我按下后退按钮,我可以看到视频剪辑的帧在应用关闭之前的片刻。我认为<>强>视频在白屏后面播放。前方。

为什么要重新发明车轮?使用VideoView,就是为了这个。如果你想知道如何正确看待它,请看下面的例子


而且,模拟器不适合使用视频。使用真实设备进行视频应用程序开发/测试。

为什么不使用VideoView?在真实的设备上试一试,模拟器对于视频播放来说很糟糕!谢谢。我会查看VideoView和getbackYup,在他的情况下,我想只使用VideoView就足够了,但是如果你只想播放视频的音乐(活动不可见),然后打开活动,在mediaplayer的位置显示并恢复视频,您还需要使用surfaceholder设置回显示(surfaceCreated和surfaceChanged中的mediaplayer.setDisplay(surfaceholder)和surfaceDestroyed中的mediaplayer.setDisplay(null))。但在这两种情况下:不需要SurfaceView,因为它实际上是在重新发明轮子:)
<?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"
 />
</LinearLayout>