下载rtsp流以在本地播放

时间:2016-10-04 07:45:34

标签: android http video-streaming rtsp progressive-download

我设法从这个网址播放实时流

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

但是我想将这个流下载到一个临时文件然后在本地播放,这样我就可以让缓冲时间看起来很短(可能延迟2-4秒)

是否可以使用rtsp执行此操作?或者我是否必须使用http?因为此网址仅适用于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);

1 个答案:

答案 0 :(得分:0)

您无法使用MediaPlayer将Raw流保存在文件中。你可以使用其中一个:

  

1-从实时流中捕获或解码RAW帧并将其传递给ffmpeg并将其保存为.h264格式的SD卡。

     

2-然后再次选择.h264原始文件并使用ffmpeg对文件进行解码,并将扩展名为.mp4的文件保存到SD卡中。

     

3-以编程方式删除.h264文件,并仅保存.mp4或您想要的格式。   试试.mp4播放。

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