天天看點

FFmpeg 播放 RTSP/Webcam 流

本文将介紹 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 個人實踐的經驗分享,可關注公衆号!

繼續閱讀