在菜单栏输入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
{
。。。
。。。
}
显示如下
声音暂时没有处理,以后加上。