2016-10-04 84 views
0

我設法打從URL實時流如本下載RTSP流本地播放

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

回答

0

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

1-從直播流中捕獲或解碼RAW幀,並將它們傳遞給ffmpeg並以.h264格式將它們保存到SD卡中。然後再選擇.h264原始文件並使用ffmpeg解碼文件,然後將擴展名爲.mp4的文件保存到SD卡中。

3-以編程方式刪除.h264文件,並僅保存.mp4或您想要的格式。 嘗試播放.mp4。

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