Как записать живой rtsp, воспроизводимый через VideoView (Vitamio)

Я пытаюсь записать видео в прямом эфире, воспроизводимое vitamio videoView. прямо сейчас я использую MediaRecorded, но он просто не работает.

как мне это сделать? у меня есть эти 3 основных метода записи.

есть ли другой способ записи прямого эфира?

holder = mVideoView.getHolder();
    holder.addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            initRecorder();
        }

    });

 private void initRecorder() {
    if (recorder == null) recorder = new MediaRecorder();
    recorder.setPreviewDisplay(holder.getSurface());
    //recorder.setCamera(mCamera);

    recorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    //       mrecorder.setOutputFormat(8);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    recorder.setVideoEncodingBitRate(512 * 1000);
    recorder.setVideoFrameRate(25);
    recorder.setVideoSize(352, 288);
    recorder.setOutputFile(Utils.getTuracoFolder() + "/video.mp4");

    try {
        recorder.prepare();
    } catch (IllegalStateException e) {
        // This is thrown if the previous calls are not called with the
        // proper order
        e.printStackTrace();
        TLog.e(TAG, e.getMessage());
    } catch (IOException e) {
        e.printStackTrace();
        TLog.e(TAG, e.getMessage());
    }
}

private void toggleRecording() {
    if (recorder == null) return;
    if (recording) {
        try {
            recorder.stop();
            recorder.reset();
            initRecorder();
            recording = false;
            TLog.d(TAG, "Stopped Recording");
        } catch (Exception ex) {
            TLog.d(TAG, "Error  - " + ex.getMessage());
        }

    } else {
        try {
            recorder.start();
        } catch (IllegalStateException e) {
            TLog.e(TAG, e.getMessage());
        }
        Log.v(TAG, "Recording Started");
        recording = true;
    }
}

person user4264972    schedule 18.05.2016    source источник


Ответы (1)


я сделал это, но с ffmpeg. так что сделайте это, чтобы загрузить потоковую передачу m3u8 с помощью ffmpeg.

обновить gradle.built

dependencies {

compile 'com.writingminds:FFmpegAndroid:0.3.2'

}

теперь в вашем классе активности напишите это

 FFmpeg ffmpeg;

//команда, которая создаст новый файл mani.mp4 в корне

String  cmdd="-i http://rt-a.akamaihd.net/ch_04@325608/720p.m3u8 -c:a copy -c:v copy -bsf:a aac_adtstoasc "+ new File(Environment.getExternalStorageDirectory() + "/mani.mp4").getAbsolutePath();
String[] cmd = cmdd.split(" ");


 ffmpeg = FFmpeg.getInstance(getApplicationContext());

    try {
        ffmpeg.loadBinary(new LoadBinaryResponseHandler() {

            @Override
            public void onStart() {}

            @Override
            public void onFailure() {}

            @Override
            public void onSuccess() {}

            @Override
            public void onFinish() {}
        });

    } catch (FFmpegNotSupportedException e) {
        // Handle if FFmpeg is not supported by device

        Log.e("com",e.toString());
    }
 try {
        // to execute "ffmpeg -version" command you just need to pass "-version"
        ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

            @Override
            public void onStart() {}


            @Override
            public void onProgress(String message) {
               // will print information about every new frame it find on given link
               Log.e("com",message);

            }

            @Override
            public void onFailure(String message) {
                }

            @Override
            public void onSuccess(String message) {
                }

            @Override
            public void onFinish() {}
        });
    } catch (FFmpegCommandAlreadyRunningException e) {
        // Handle if FFmpeg is already running

    }

чтобы остановить загрузку, запустите это при нажатии кнопки

ffmpeg.killRunningProcesses();

Не забудьте добавить интернет и разрешение на чтение/запись

person madara uchiha    schedule 30.06.2016
comment
Я объявляю разрешение в манифесте и меняю compileSdk на 15, он показывает: разрешение отклонено. - person YETI; 04.08.2016