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

标签 java android

我看了很多教程,但有些地方不对。我有简单的 mainactivity,它的布局上有一个 VideoView。我从 youtube 下载了一个视频,.mp4 文件大小约为 10 mb。我在 youtube 上找到了一个关于 videoview 的很棒的示例,链接如下。

https://www.youtube.com/watch?v=tPeDn18FrGY&t=75s

公共(public)类 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 模拟器。当我运行应用程序时出现“无法播放”错误。在 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.

我该如何解决?

最佳答案

您可以使用 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;
        }
    }

关于java - 如何在 Android 中将 .mp4 视频作为背景视频播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44406382/

相关文章:

java - 从 Double ArrayList 更改为 Integer ArrayList

java - ACR122U - 传输 APDU 时出现 InvalidDeviceStateException

Java:以随机日期返回日期格式

java - 缓存和线程问题

java - 子类中的重写方法是否用于其他子类?

android - 即使成功登录到 Facebook,session.isOpened() 也会返回 false

android - 使用新 API 添加联系人时出现问题

android - 不需要的 textview 的位图轮廓

c# - Xamarin.Android 中不推荐使用某些 NotificationBuilder 方法,我应该使用哪些方法?

java - 使用创建类的对象创建构造函数