簡體   English   中英

Android - 將rtsp(h264)流保存到mp4文件

[英]Android - Save an rtsp (h264) stream to mp4 file

我正在開展一個我需要的項目

  1. 讀取來自IPCamera的輸入H.264編碼流 - 我可以通過rtsp://192.168.1.83:8001 / rtsp url獲取此信息

  2. 顯示IPCamera流 - 我可以使用


final VideoView vv = (VideoView) findViewById(R.id.video_view_h264);
        MediaController mc = new MediaController(getApplicationContext());
        vv.setVideoURI(video);
        vv.setMediaController(mc);
        vv.requestFocus();
        vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            public void onPrepared(MediaPlayer mp) {
                vv.start();
            }
        });

  1. 現在我想將此流記錄到MP4文件中。 這是我被困的地方,我正在考慮以下選項

a)MediaRecorder - 根據我的谷歌搜索,我相信這個類的輸入只能來自設備相機。 有沒有辦法調整這個我可以從rtsp流提供輸入的地方?

b)MediaCodec API - 4.1以后Android已經發布了這個低級API以及MediaExtractor和MediaCodec。 對於此選項,我認為rtsp流不能用於以下代碼段

final String STREAM_URL = "rtsp://192.168.1.83:8001/";
MediaExtractor mediaExtractor = new MediaExtractor();
mediaExtractor.setDataSource(STREAM_URL); // I get an exception 04-28 18:30:18.914: E/AndroidRuntime(8140): Caused by: java.io.IOException: Failed to instantiate extractor.

c)我可以從網址讀取並將其存儲為文件。 如何將此流轉換為MP4文件? 任何代碼段都非常有用。

我也試過使用FFMPEG,但性能太差,我放棄了這個選項。

我非常感謝上述三個選項的任何輸入或我可以考慮的任何其他附加選項。

謝謝 !!

確實, MediaRecorder對處理直接流媒體內容沒有任何支持。 從框架的角度來看,有像MediaExtractor中的解析器對象和MediaCodec等編解碼器對象,但還沒有MediaExtractor器抽象(尚未)。

AOSPrecordVideo是一個命令行實用程序,旨在實現基於文件的簡單錄制。 作為實現的一部分,創建編碼器並將其傳遞給MPEG4Writer ,如此處所示 您可以重用此代碼並嘗試直接將傳入流寫入文件。

為此,您可以將流輸入建模為MediaSource並直接將其傳遞給MediaSource 你將不得不建立一些基本metaData從流源,並把它傳遞給下游的作家。 如果可以直接對輸入源建模,則可能不需要創建新的MediaRecorder

在這里得到完全相同的問題。 FFmpeg解決了這個問題,對我來說似乎非常有效,但它依賴於硬件,它需要針對每個設備的cpu的特定arm版本進行編譯。

另一種方法jcodec( http://jcodec.org/ )但還沒有想出如何用它保存rtsp流。 它是一個純粹的java庫,但沒有太多可用的文檔。

請告訴我你是否想辦法做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM