FFmpeg 可以將 RTMP 測試來源發布到分配的端點,但命令執行完畢並不等於驗收通過。使用已知輸入,保護 URL 和密鑰,然後驗證發布端活動、解碼後的媒體以及所選接收端路徑。
先選擇存取模式
在受控模式下,Publisher 和 Receiver 是同一已設定流名稱上的不同角色,可以使用相同的 RTMP URL。在 Guest 模式下,請有意開放端點並使用非空流名稱;接收端必須使用同一名稱。
發布前準備
從部署中獲取 RTMP 發布 URL 和流密鑰。不要將真實密鑰貼上到 shell 歷史記錄、工單或文章中。確認您的 FFmpeg 構建提供 RTMP 支援:FFmpeg 協議文檔說明協議選項;其格式文檔涵蓋複用器行為。
ffmpeg -protocols | grep rtmp
預期結果:命令列出該構建支援的一種 RTMP 協議變體。如果沒有列出,請依據已安裝的構建調整測試,不要假定軟體包一定包含該協議。
按即時速率發布文件
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"
預期結果:FFmpeg 持續報告幀進度,而不是按存儲允許的最快速度發送文件。此有限測試中,-re按原始速率讀取文件。請以監聽器提供的值替換佔位符;不要改動應用路徑或密鑰。
當輸出契約需要時進行轉碼
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/關鍵幀間隔、位元率、解析度和音訊參數。
先在伺服器驗證,再驗證預期結果
- 確認 RTMP Server 報告預期的發布端和入站位元率。
- 從設定的接收端或監看點檢查影像和音訊。
- 測試一個預定的下游輸出:錄製、路由或瀏覽器播放器。
- 中斷進程一次,並驗證接收端狀態和恢復方案。
對於即時採集設備,請以其文檔規定的 FFmpeg 輸入語法替換文件輸入,並保留相同的伺服器端驗收檢查。在瞭解監聽器如何處理重複工作階段前,不要使用自動重連循環;循環可能掩蓋第一個有用錯誤。
使用為此任務提供的端點協議
使用此任務提供的端點協議。Callaba RTMP Server 提供監聽器、存取規則和活動視圖;瀏覽器觀看使用單獨設定的輸出。
相關設定
在Callaba RTMP Server中設定監聽器,使用操作員指南檢查存取與狀態,或者當目標是瀏覽器交付時遵循RTMP 轉 HLS流程。
本地診斷髮送端和接收端
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中設定監聽器,然後在操作員指南中驗證存取和活動。