本文将介紹 FFmpeg 如何播放 RTSP/Webcam/File 流。流程如下:
代碼: https://github.com/ikuokuo/rtsp-wasm-player, 子子產品 rtsp-local-player
<code>./configure</code> 手動選擇了:解碼 h264,hevc 、解封裝 rtsp,rawvideo 、及協定 file ,以支援 RTSP/Webcam/File 流。
其中, Webcam 因于 Linux ,故用的 v4l2。 Windows 可用 dshow, macOS 可用 avfoundation ,詳見 Capture/Webcam。
這裡依據自己需求進行選擇,當然,也可以直接編譯全部。
拉流過程,主要涉及的子產品:
avdevice: IO 裝置支援(次要,為了 Webcam)
avformat: 打開流,解封裝,拿小包(主要)
avcodec: 收包,解碼,拿幀(主要)
swscale: 圖像縮放,轉碼(次要)
完整代碼,見 stream.cc 。
打開輸入流:
找出視訊流:
循環拿包:
完整代碼,見 stream_video.cc 。
解碼初始化:
解碼收包,返幀:
注意處理特别傳回碼: <code>EAGAIN</code> 表示要繼續收包、<code>EOF</code> 表示結束,另外還有些特别碼。
完整代碼,見 main_ui_with_opencv.cc 。
轉碼成 <code>bgr24</code>,用于顯示:
完整代碼,見 glfw_frame.h, main_ui_with_opengl.cc 。
轉碼成 <code>yuyv420p</code> 用于顯示:
片段着色器,直接轉成 <code>RGB</code>:
本文代碼想要編譯運作的話,請依照 README 進行。
GoCoding 個人實踐的經驗分享,可關注公衆号!