1.2 使用FFmpeg读取rtmp流并用openCV显示视频

第2课 使用FFmpeg读取rtmp流并用openCV显示视频

​ 本课对应源文件下载链接:

https://download.youkuaiyun.com/download/XiBuQiuChong/88801295

这节课我们开始利用ffmpeg和opencv来实现一个rtmp播放器。播放器的最基本的功能其实就两个:显示画面和播放声音。在实现这两个功能前,我们需要先用ffmpeg连接到rtmp服务器,当然也可以打开一个文件。

一、最终实现的效果

c4fea8416dc4fd4ccfee2c8f9d26eff1.png

二、使用FFmpeg读取rtmp流并用openCV显示的原理

要显示视频画面,就要先用FFmpeg拉取rtmp流,rtmp流中既有视频流也有音频流,FFmpeg对其中的视频流进行解码获取到视频帧,然后将视频帧用openCV转换为Mat数组,最后用openCV将Mat数组显示出来就可以了。用openCV将Mat数组显示的时候,会弹出新的窗口,不太符合常规需求,可以进一步把Mat数组绘制到MFC窗口以达到上图显示的效果。

三、rtmp播放器实现的主要代码

1.压缩备份上节课工程文件夹为demo.rar,并修改工程文件夹demo为demo2,及时备份源文件并在原基础上继续迭代开发是一种好习惯。

2.打开fmlp.cpp,修改其中的删除原来init函数中的代码,并加入以下代码:

runFFmpegHandle = CreateThread(NULL, 0, runFFmpegThreadProc, (LPVOID)this, 0, NULL);

如果把MFC对话框相关代码看作主线程函数的话,上述代码的作用是新建一个线程,并在新的线程中执行与ffmpeg及opencv有关的操作。这样做的好处就是实现了“各司其责”,MFC所在的主线程主要用来处理UI(界面)方面的工作,ffmpeg及opencv子线程主要用来处理网络连接、图形处理等方面的工作,互不影响,简洁高效。

3.因为我们需要连接rtmp服务器,所以我们需要在fmlp.h中增加一个字符串类型的rtmp地址;另外还需要定义子线程句柄及相关函数:

CString inRtmpURL;

HANDLE runFFmpegHandle;

static DWORD WINAPI runFFmpegThreadProc(LPVOID lpParam);

int runFFmpeg();

BOOL isRunning = false;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西部秋虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值