首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FFmpeg视频播放器开发-FFmpeg拉rtmp流(七)

FFmpeg视频播放器开发-FFmpeg拉rtmp流(七)

原创
作者头像
嵌入式音视频
发布2022-09-24 17:13:34
发布2022-09-24 17:13:34
4.1K00
代码可运行
举报
运行总次数:0
代码可运行

在菜单栏输入rtmp流地址后,关闭窗口,在closeEvent方法中发送信号,主线程接收到该信号后,调用网络流线程解码,同时视频显示窗口刷新解码后的img, 这样网络流就可以播放了。

代码语言:javascript
代码运行次数:0
运行
复制
void NetStreamDlg::closeEvent(QCloseEvent * e)
{
	QString address = ui.lineEdit_IP->text();
	CommonUtils::writeIni(m_iniPath, m_iniKey, address);
	emit(PushStream(address));
}

菜单栏

这是湖南卫视的rtmp流 rtmp://58.200.131.2:1935/livetv/hunantv

主界面接收PushStream信号

代码语言:javascript
代码运行次数:0
运行
复制
connect(&m_NetDlg, SIGNAL(PushStream(QString)), this, SLOT(slotPushStream(QString)));

槽函数代码

代码语言:javascript
代码运行次数:0
运行
复制
void FFVideoPlayer::slotPushStream(QString address)
{
	LOG4CPLUS_INFO(MyLog::getInstance()->logger, "Push Net Stream");
	g_NetStream = 1;

	setWindowTitle(address);
	NetStreamThread::getInstance()->startPlay(address);
}

通过调用NetStreamThread线程类解码rtmp流,这和本地文件播放差不多,然后再界面控件刷新。

代码语言:javascript
代码运行次数:0
运行
复制
//重写重绘函数
void VideoWidget::paintEvent(QPaintEvent *e)
{
	if (g_NetStream == 1)
	{
		QPainter painter;

		//显示网络流
		painter.begin(this);
		painter.drawImage(QPoint(448, 170), m_Image);
		painter.end();
	}
	else
	{
      。。。
      。。。
}

显示如下

声音暂时没有处理,以后加上。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档