Я создаю приложение для трансляции потокового видео с малины pi на мое устройство Android. У меня есть три функциональных способа воспроизведения этого потока:
rtsp://media.smart-streaming.com/mytest/mp4:sample_phone_150k.mp4
- Media Player + SurfaceView
- VideoView
- Intent.ACTION_VIEW
Проблема заключается в том, что приложение воспроизводит вышеупомянутый поток, но не играет мою (rtsp://192.168.1.143: 8554/vid.mp4)... , но VLC делает.
Я попробовал потоковое видео с VLC и LIVE555 в нескольких видеоформатах, а также попытался воспроизвести видео, записанное на телефоне.
Вот мой код:
//Stream methods 0 = MediaPlayer & SurfaceView, 1 = VideoView, 2 = Native Video Player
final int STREAM_USING = 0;
//MediaPlayer on surfaceView
String streamPath = "rtsp://192.168.1.143:8554/vid.mp4";//"rtsp://media.smart-streaming.com/mytest/mp4:sample_phone_150k.mp4";//"rtsp://192.168.1.143:8554/vid.mp4";//;"rtp://239.255.0.1:5004/";
Uri streamUri;
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
//VideoView
VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //MediaPlayer
    switch (STREAM_USING) {
        case 0: {
            surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
            surfaceHolder = surfaceView.getHolder();
            surfaceHolder.setFixedSize(800, 480);
            surfaceHolder.addCallback(this);
            surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    if (what == MediaPlayer.MEDIA_ERROR_SERVER_DIED) {
                        mediaPlayer.release();
                        mediaPlayer = new MediaPlayer();
                        //mediaPlayer.stop();
                        play();
                    }
                    return false;
                }
            });
            mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
                @Override
                public void onBufferingUpdate(MediaPlayer mp, int percent) {
                    Toast.makeText(getApplicationContext(), "BUFF : " + percent, Toast.LENGTH_SHORT).show();
                    if (!mediaPlayer.isPlaying()) {
                        mediaPlayer.start();
                    }
                }
            });
            //Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            //i.setType("video/*");
            //startActivityForResult(i, 1234);
            streamUri = Uri.parse(streamPath);
            play();
            break;
        }
        case 1: {
            videoView = (VideoView) findViewById(R.id.videoView);
            videoView.setVideoURI(Uri.parse(streamPath));
            MediaController mediaController = new MediaController(this);
            //mediaController.setAnchorView(videoView);
            videoView.setMediaController(mediaController);
            videoView.requestFocus();
            try {
                videoView.start();
            }
            catch (SecurityException se) {
                Log.e("SE", se.getMessage());
                se.printStackTrace();
            }
            break;
        }
        case 2: {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(streamPath));
            startActivity(intent);
            break;
        }
        default: {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(streamPath));
            startActivity(intent);
        }
    }
}
private void play() {
    try {
        //final FileInputStream fis = new FileInputStream(streamPath);
        mediaPlayer.stop();
        mediaPlayer.reset();
        mediaPlayer.setDataSource(MainActivity.this, streamUri);
        //mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                //mediaPlayer.reset();
                mediaPlayer.start();
            }
        });
    } catch (SecurityException se) {
        Log.e("SE", se.getMessage());
        se.printStackTrace();
    } catch (IOException ie) {
        ie.printStackTrace();
    }
}
Любая помощь приветствуется, я пробовал в течение недели, чтобы это не сработало: (
