SurfaceView,SurfaceTexture和MediaPlayer无法在android中播放我的视频

Rey*_*ohn 11 video android video-streaming android-mediaplayer android-videoview

我试图在我的应用程序上播放实时流媒体视频SurfaceView,当我尝试它Vitamio时播放效果很好,但由于它是一个HTTP链接,我试图摆脱任何第三方库并使用本机类.我一直在尝试VideoView,然后我尝试了SurfaceView基本实现失败之后我尝试了像这样的纹理视频:

@Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {

        Surface surface = new Surface(surfaceTexture);

        try {

            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setDataSource(getApplicationContext(), Uri.parse(link));
            mMediaPlayer.setSurface(surface);
            mMediaPlayer.setLooping(true);
            mMediaPlayer.prepareAsync();

            // Play video when the media source is ready for playback.
            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    mediaPlayer.start();
                }
            });

            mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {

                    Log.d(TAG, "Error occured");

                    return false;
                }
            });

        } catch (IllegalArgumentException e) {
            Log.d(TAG, e.getMessage());
        } catch (SecurityException e) {
            Log.d(TAG, e.getMessage());
        } catch (IllegalStateException e) {
            Log.d(TAG, e.getMessage());
        } catch (IOException e) {
            Log.d(TAG, e.getMessage());
        }

    }
Run Code Online (Sandbox Code Playgroud)

但是每次调用MediaPlayer的OnError都没有运气,而在logcat中我得到了这个:

06-28 16:00:56.612     144-8044/? E/GenericSource? Failed to prefill data cache!
06-28 16:00:56.614    7997-8016/? E/MediaPlayer? error (1, -2147483648)
06-28 16:00:56.614    7997-7997/? E/MediaPlayer? Error (1,-2147483648)
Run Code Online (Sandbox Code Playgroud)

但问题是URL没有问题,这个网址在维他命和其他我可以测试的其他游戏上都很好,请帮忙!

Dog*_*oge 1

我在尝试通过 Android 播放视频时也遇到过痛苦MediaPlayer,我也尝试过 Vitamio。大多数时候,如果视频在 Android 上无法正常播放,MediaPlayer那是因为它的格式不受支持。

http://developer.android.com/guide/appendix/media-formats.html

这可能不是您想要的答案,但您可能必须将您尝试播放的任何内容重新编码为受支持的格式。Android的视频播放能力远弱于iPhone,这是你必须接受的事实。

相反,如果您愿意投入(大量)更多工作,您可以自己为 Android 编译 ffmpeg,为它的许多组件创建一个 jni 接口,并将视频播放到表面/纹理视图中。我个人并不推荐这条路线,因为我通过 ffmpeg 流式传输 1080p 视频的经验并不好。

最好、最简单的选择就是简单地重新编码您的视频。

背景:我制作了一个应用程序,可以同时播放来自不同供应商的多达 5 个视频。