[英]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
客戶端(在同一台機器上)
(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
在舊線程中解釋了一種解決方法。 在服務器上可以運行 2 個 ffmpeg 實例:一個由於 mpegts 產生“tmp.ts”文件,另一個將“tmp.ts”作為輸入並通過 rtp 傳輸。 有可能嗎?
有沒有更好的方法來以最低的延遲實現這個客戶端/服務器?
感謝您提供的任何幫助。
我用.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.