好多开发者在QT环境下实现RTMP或RTSP播放时,首先考虑到的是集成VLC,集成后,却发现VLC在延迟、断网重连、稳定性等各个方面不尽人意,无法满足上线环境需求。本文以调用大牛直播SDK(官方)的Windows平台播放端SDK为例,介绍下如何在QT下实现低延迟的RTMP|RTSP播放器,废话不多说,先上图:
大牛直播SDK有MFC的demo,所以在QT上实现播放轻车熟路,如果需要多窗口播放,也可以参考转发的demo,转发的那个4窗口预览的demo做了二次封装,调用更方便。
窗体布局不再赘述,就是个普通的6窗口布局,不得不说,QT在窗体布局这块,相对MFC真的太方便了。
考虑到大多场景下,开发者有多路播放诉求,针对这种情况,我们对player做个简单的封装:
开始播放:
bool player_wrapper::StartPlay(const std::string& url, bool is_rtsp_tcp_mode, bool is_mute)
{
if (is_playing_)
return false;
if (!OpenPlayerHandle(url, is_rtsp_tcp_mode, is_mute))
return false;
player_api_->SetBuffer(player_handle_, 100);
player_api_->SetMute(player_handle_, is_mute ? 1 : 0);
player_api_->SetRtspAutoSwitchTcpUdp(player_handle_, true);
player_api_->SetRtspTimeout(player_handle_, 10);
player_api_->SetRenderWindow(player_handle_, render_wnd_);
player_api_->SetRenderScaleMode(player_handle_, 1);
auto ret = player_api_->StartPlay(player_handle_);
if (NT_ERC_OK != ret)
{
if (!is_recording_)
{
player_api_->Close(player_handle_);
player_handle_ = NULL;
}
return false;
}
is_playing_ = true;
return true;
}
开始播放封装,调用了O