跳至主要內容
Callaba

使用 FFmpeg 發布 RTMP 流並進行驗證

本頁內容

FFmpeg 可以將 RTMP 測試來源發布到分配的端點,但命令執行完畢並不等於驗收通過。使用已知輸入,保護 URL 和密鑰,然後驗證發布端活動、解碼後的媒體以及所選接收端路徑。

先選擇存取模式

在受控模式下,Publisher 和 Receiver 是同一已設定流名稱上的不同角色,可以使用相同的 RTMP URL。在 Guest 模式下,請有意開放端點並使用非空流名稱;接收端必須使用同一名稱。

發布前準備

從部署中獲取 RTMP 發布 URL 和流密鑰。不要將真實密鑰貼上到 shell 歷史記錄、工單或文章中。確認您的 FFmpeg 構建提供 RTMP 支援:FFmpeg 協議文檔說明協議選項;其格式文檔涵蓋複用器行為。

Command
ffmpeg -protocols | grep rtmp

預期結果:命令列出該構建支援的一種 RTMP 協議變體。如果沒有列出,請依據已安裝的構建調整測試,不要假定軟體包一定包含該協議。

按即時速率發布文件

Command
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"

預期結果:FFmpeg 持續報告幀進度,而不是按存儲允許的最快速度發送文件。此有限測試中,-re按原始速率讀取文件。請以監聽器提供的值替換佔位符;不要改動應用路徑或密鑰。

當輸出契約需要時進行轉碼

Command
ffmpeg -re -stream_loop -1 -i input.mov -c:v libx264 -pix_fmt yuv420p -g 60 -c:a aac -ar 48000 -b:a 128k -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"

預期結果:接收端看到連續的發布端以及可解碼的影片和音訊。這只是示例,並非通用編碼處方:請針對實際接收端和交付工作流程選擇幀率、GOP/關鍵幀間隔、位元率、解析度和音訊參數。

先在伺服器驗證,再驗證預期結果

  1. 確認 RTMP Server 報告預期的發布端和入站位元率。
  2. 從設定的接收端或監看點檢查影像和音訊。
  3. 測試一個預定的下游輸出:錄製、路由或瀏覽器播放器。
  4. 中斷進程一次,並驗證接收端狀態和恢復方案。

對於即時採集設備,請以其文檔規定的 FFmpeg 輸入語法替換文件輸入,並保留相同的伺服器端驗收檢查。在瞭解監聽器如何處理重複工作階段前,不要使用自動重連循環;循環可能掩蓋第一個有用錯誤。

使用為此任務提供的端點協議

使用此任務提供的端點協議。Callaba RTMP Server 提供監聽器、存取規則和活動視圖;瀏覽器觀看使用單獨設定的輸出。

相關設定

在Callaba RTMP Server中設定監聽器,使用操作員指南檢查存取與狀態,或者當目標是瀏覽器交付時遵循RTMP 轉 HLS流程。

本地診斷髮送端和接收端

Command
ffmpeg -re -f lavfi -i testsrc2=size=1280x720:rate=30 -f lavfi -i sine=frequency=1000:sample_rate=48000 -c:v libx264 -pix_fmt yuv420p -g 60 -c:a aac -b:a 128k -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"

預期結果:FFmpeg 報告約 30 fps 的影片幀和一個音訊流;Callaba 報告輸入位元率。GOP 值 60 在 30 fps 下每兩秒生成一個關鍵幀,是兩秒分片工作流程的實用起點,並非必需的伺服器設定。

僅在檢查輸入後才使用複製:ffprobe -v error -show_entries stream=codec_name,codec_type -of default=nw=1 input.mp4。使用此輸出將輸入編解碼器和音訊細節與接收端文檔中的契約比較。只有二者匹配時,複製才合理。對於診斷接收端,ffplay -fflags nobuffer "rtmp://RECEIVER_HOST:PORT/APP/STREAM_NAME_OR_KEY"應在接收端連接後打開影像和音調。請參閱FFmpeg 濾鏡來源文檔瞭解 testsrc2 和 sine。

後續步驟

在Callaba RTMP Server中設定監聽器,然後在操作員指南中驗證存取和活動。