Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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
Java 如何在Android中播放.mp4视频作为背景视频?_Java_Android - Fatal编程技术网

Java 如何在Android中播放.mp4视频作为背景视频?

Java 如何在Android中播放.mp4视频作为背景视频?,java,android,Java,Android,我看过很多教程,但有些地方不对劲。我有一个简单的主要活动,它的布局上有一个视频视图。我从youtube下载了一段视频,其中.mp4文件大小约为10MB。我在youtube上找到了一个关于videoview的很好的示例,链接如下 公共类MainActivity扩展了AppCompatActivity{ private VideoView bgVideo; @Override protected void onCreate(Bundle savedInstanceState) {

我看过很多教程,但有些地方不对劲。我有一个简单的主要活动,它的布局上有一个视频视图。我从youtube下载了一段视频,其中.mp4文件大小约为10MB。我在youtube上找到了一个关于videoview的很好的示例,链接如下

公共类MainActivity扩展了AppCompatActivity{

private VideoView bgVideo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bgVideo=(VideoView) findViewById(R.id.bg_videoview);

        Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.bgvideo);

        bgVideo.setVideoURI(uri);
        bgVideo.start();

        bgVideo.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true);
            }
        });
    }
}
我使用genymotion emulator。当我运行应用程序时,我会出现“无法播放此”错误。在android监视器上会出现类似这样的情况

06-07 03:16:28.675 2146-2146/com.sample E/MediaPlayer: Error (1,-2147483648)
06-07 03:16:28.675 2146-2146/com.sample D/VideoView: Error: 1,-2147483648
06-07 03:16:28.692 2146-2146/com.sample E/MediaPlayer: Error (1,-2147483648)
06-07 03:16:28.692 2146-2146/com.sample D/VideoView: Error: 1,-2147483648
06-07 03:16:28.709 2146-2146/com.sample E/MediaPlayer: Error (1,-2147483648)
06-07 03:16:28.709 2146-2146/com.sample D/VideoView: Error: 1,-2147483648
06-07 03:16:28.742 2146-2146/com.sample E/MediaPlayer: Error (1,-32)
06-07 03:16:28.742 2146-2146/com.sample D/VideoView: Error: 1,-32
06-07 03:16:28.758 2146-2146/com.sample E/MediaPlayer: Error (1,-38)
06-07 03:16:28.758 2146-2146/com.sample D/VideoView: Error: 1,-38
06-07 03:16:29.526 2146-2146/com.sample I/Choreographer: Skipped 44 frames!  The application may be doing too much work on its main thread.

如何修复它?

您需要启动bgVideo.start-inside onPrepare

bgVideo.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true);
                bgVideo.start();
            }
        });
请尝试以下代码:

 try {
            // Start the MediaController
            MediaController mediacontroller = new MediaController(
                    MainActivity.this);
            mediacontroller.setAnchorView(bgVideo);
            // Get the URL from String VideoURL
            Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.bgvideo);

            bgVideo.setMediaController(mediacontroller);
            bgVideo.setVideoURI(uri);

        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
bgVideo.requestFocus();

    bgVideo.setOnPreparedListener(new OnPreparedListener() {

                public void onPrepared(MediaPlayer mp) {
                    mp.setLooping(true);
                    bgVideo.start();
                }
            });

您是否尝试在onPreparedListener之后启动bgVideo

bgVideo.setVideoURI(uri);

        bgVideo.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true);
            }
        });

        bgVideo.start();

另外,您使用的API版本是什么?

您可以使用
MediaPlayer
对象并在一个服务中播放。下面是示例代码:

public class Mp3PlayerService extends Service implements
        MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnSeekCompleteListener {

    /** Android Built-in Media Player */
    public MediaPlayer player;

    /** Binder for Mp3 Service */
    private final IBinder iBinder = new Mp3PlayerService.BackgroundAudioServiceBinder();

    @Override
    public void onCreate() {
        super.onCreate();
        player = new MediaPlayer();
        player.setOnCompletionListener(this);
        player = new MediaPlayer();
        try {
          playSongLocal();
          playSongNetwork();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }


    private void playsongLocal() {
        AssetFileDescriptor afd;
        player.reset();
        try {
            LogUtils.LOGE(TAG, "playing aaa.mp3");
            afd = getApplicationContext().getAssets().openFd("aaa.mp3");
            player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
            player.prepareAsync();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void playsongNetwork() {
        player.reset();
        try {
            player.setDataSource(networkUrlLink);
            player.prepareAsync();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return iBinder;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    public void onDestroy() {
        if (player.isPlaying()) {
            player.stop();
        }
        player.release();
    }

    /** return itself when beeing asked */
    public class BackgroundAudioServiceBinder extends Binder {
        public Mp3PlayerService getService() {
            return Mp3PlayerService.this;
        }
    }

检查。尝试在设备上运行而不是模拟或使用android 7.0 API 24。@Timosis是否尝试在onPreparedListener之后使用video.start?是的,但结果相同。我发现了这个问题。在android 4.1之前,方法是android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.UpdatentFilter(android.graphics.PorterDuffColorFilter、android.content.res.ColorStateList、android.graphics.PorterDuff$模式)会错误地覆盖android.graphics.drawable.drawable中的包私有方法是否尝试了其他视频?抱歉,结果是相同的!