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

2022-09-24 17:13:34 浏览数 (2)

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

代码语言:javascript复制
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复制
connect(&m_NetDlg, SIGNAL(PushStream(QString)), this, SLOT(slotPushStream(QString)));

槽函数代码

代码语言:javascript复制
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复制
//重写重绘函数
void VideoWidget::paintEvent(QPaintEvent *e)
{
	if (g_NetStream == 1)
	{
		QPainter painter;

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

显示如下

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

0 人点赞