簡體   English   中英

FFmpeg RTP_Mpegts 通過 RTP 協議

[英]FFmpeg RTP_Mpegts over RTP protocol

我正在嘗試實現基於 FFmpeg 的客戶端/服務器應用程序。 不幸的是 RTP_MPEGTS 沒有記錄在官方的FFmpeg Documentation - Formats 中 無論如何,我從這個舊線程中找到了靈感。

服務器端

(1) 捕獲麥克風音頻作為輸入。 (2) 將其編碼為 pcm 8khz 單聲道,(3) 通過 rtp 協議將其作為 RTP_MPEGTS 格式發送到本地。

ffmpeg -f avfoundation -i none:2  -ar 8000 -acodec pcm_u8 -ac 1 -f rtp_mpegts rtp://127.0.0.1:41954
  • 這有效,但在啟動時它會警告“[mpegts @ 0x7fda13024600] 幀大小未設置”

客戶端(在同一台機器上)

(1) 接收 rtp 音頻流輸入 (2) 將其寫入文件或播放。

ffmpeg -i rtp://127.0.0.1:41954 -vcodec copy -y "output.wav"
  • 我正在使用-vcodec copy因為我已經在另一個 rtp 流中驗證了它,其中-acodec copy不起作用。
  • 這卡住了,當用 Ctrl+C 快捷方式關閉時,它會打印:

     Input #0, rtp, from 'rtp://127.0.0.1:41954': Duration: N/A, start: 8.956122, bitrate: N/A Program 1 Metadata: service_name : Service01 service_provider: FFmpeg Stream #0:0: Data: bin_data ([6][0][0][0] / 0x0006) Output #0, wav, to 'output.wav': Output file #0 does not contain any stream

  1. 我不明白客戶端是否沒有收到任何流,或者它無法將 rtp 數據包寫入“output.wav”文件。 (客戶端或服務器問題?)
  2. 舊線程中解釋了一種解決方法。 在服務器上可以運行 2 個 ffmpeg 實例:一個由於 mpegts 產生“tmp.ts”文件,另一個將“tmp.ts”作為輸入並通過 rtp 傳輸。 有可能嗎?

  3. 有沒有更好的方法來以最低的延遲實現這個客戶端/服務器?


感謝您提供的任何幫助。

我用.aac文件對此進行了測試,它有效:

流媒體:

(注意我使用多播地址。

但是如果你在同一台機器上測試流和接收,你可能會使用你的127.0.0.1作為本地主機的回送地址。)

ffmpeg -f lavfi -i testsrc \
-stream_loop -1 -re -i "music.aac" \
-map 0:v -map 1:a \
-ar 8000 -ac 1 \
-f rtp_mpegts "rtp://239.1.1.9:1234"

您需要rtp_mpegts器的視頻源。 我用lavfi創建了一個。

我使用-stream_loop為我的測試永遠循環.aac文件。 您不需要使用麥克風作為輸入。

捕獲流:

ffmpeg -y -i "rtp://239.1.1.9:1234" -c:a pcm_u8 "captured_stream.wav"

我在-c:a pcm_u8捕獲時使用-c:a pcm_u8 ,因為在流媒體中使用它在捕獲端不起作用。

輸出是低質量的8bit 8kHz mono音頻文件,但這正是您所要求的。

暫無
暫無

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

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