天天看点

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

继续阅读