1

我设法从这样的网址播放直播

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);
4

1 回答 1

0

您不能使用MediaPlayer将原始流保存在文件中。您可以使用其中之一:

1-从实时流中捕获或解码 RAW 帧并将它们传递给 ffmpeg 并将它们以 .h264 格式保存到 sdcard。

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

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

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

于 2016-10-04T08:05:14.723 回答