基于FFmpeg的视频播放器开发系列教程(七):FFmpeg拉rtmp流

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

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信号

connect(&m_NetDlg, SIGNAL(PushStream(QString)), this, SLOT(slotPushStream(QString)));

       槽函数代码

void FFVideoPlayer::slotPushStream(QString address)
{
	LOG4CPLUS_INFO(MyLog::getInstance()->logger, "Push Net Stream");
	g_NetStream = 1;

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

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

//重写重绘函数
void VideoWidget::paintEvent(QPaintEvent *e)
{
	if (g_NetStream == 1)
	{
		QPainter painter;

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

      显示如下

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

发布了124 篇原创文章 · 获赞 84 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/yao_hou/article/details/103790618