本文将介绍 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 个人实践的经验分享,可关注公众号!