Загрузка rtsp-потока для локального воспроизведения

Мне удается воспроизвести прямую трансляцию с такого URL-адреса

rtsp://192.168.0.18:554/user=admin&password=&channel=1&stream=0.sdp?

Но я хочу загрузить этот поток во временный файл, а затем воспроизвести его локально, чтобы мне казалось, что время буферизации короткое (возможно, задержка около 2-4 секунд)

Возможно ли это сделать с помощью rtsp? или мне нужно использовать http?Потому что этот URL работает только по протоколу rtsp

Если да, то небольшой пример мне бы очень помог

Пример моих кодов

cA.mPlayer1 = new MediaPlayer();
  try {
    cA.mPlayer1.setDataSource("rtsp://192.168.0.18:554/user=admin&password=&channel=1&stream=0.sdp?");
    cA.mPlayer1.prepareAsync();
    cA.mPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
      @Override
      public void onPrepared(MediaPlayer mediaPlayer) {
        cA.mPlayer1.start();
        Toast.makeText(getBaseContext(), "Connecting...", Toast.LENGTH_LONG).show();
      }
    });
  } catch (IOException e) {
    e.printStackTrace();
  }
  cA.mCallback1 = new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {

      cA.mPlayer1.setDisplay(surfaceHolder);

    }
    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {
    }
    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
    }
  };

final SurfaceView surfaceView1 =
        (SurfaceView) findViewById(R.id.surfaceView1);
// Configure the Surface View.
surfaceView1.setKeepScreenOn(true);
// Configure the Surface Holder and register the callback.
SurfaceHolder holder1 = surfaceView1.getHolder();
holder1.addCallback(cA.mCallback1);
holder1.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

person Fay Zan    schedule 04.10.2016    source источник


Ответы (1)


вы не можете использовать MediaPlayer для сохранения необработанного потока в файле. вы можете использовать один из них:

1- Захватите или декодируйте кадры RAW из прямой трансляции, передайте их в ffmpeg и сохраните на SD-карту в формате .h264.

2- Затем снова выберите необработанный файл .h264 и декодируйте файл с помощью ffmpeg, а затем сохраните файл с расширением .mp4 на SD-карту.

3- удалить файл .h264 программно, и сохранить только .mp4, или какой формат вы хотите. Попробуйте воспроизведение .mp4.

https://stackoverflow.com/a/24586256/6502368

person mehd azizi    schedule 04.10.2016