天天看點

RTMP推流攝像頭視訊推送至EasyDSS使用EasyPlayer-RTMP WIN播放崩潰閃退是什麼原因?

TSINGSEE青犀視訊聯合海康研發的推流攝像頭自從上線以來,獲得了很多使用者的信任。RTMP推流攝像頭可以将視訊流直接通過RTMP協定推送至直播間,無需增加中間元件或者裝置,使用友善簡單,配置可參考:海康定制RTMP推流攝像頭如何接入EasyDSS視訊直播點播平台?

RTMP推流攝像頭視訊推送至EasyDSS使用EasyPlayer-RTMP WIN播放崩潰閃退是什麼原因?

有客戶按照以上方式在EasyDSS示範平台上做測試,推流錄影機可以推到EasyDSS示範平台直播間,但是用EasyPlayer-RTMP WIN版去拉取RTMP流做播放的時候,播放器崩潰閃退了。以下為我們的分析過程:

1、先檢查EasyPlayer-RTMP WIN版播放器的授權是否正常,檢查後得知授權時間沒有失效。

RTMP推流攝像頭視訊推送至EasyDSS使用EasyPlayer-RTMP WIN播放崩潰閃退是什麼原因?

2、根據經驗來說,播放器本身肯定是可以播放RTMP協定流的,是以該崩潰有兩個可能:

1)跟環境有關

2)記憶體異常引起的

于是我們在客戶這個環境中單步調試EasyPlayer-RTMP WIN版Demo,在進入預覽按鈕事件後就異常退出了。

RTMP推流攝像頭視訊推送至EasyDSS使用EasyPlayer-RTMP WIN播放崩潰閃退是什麼原因?

接下來需要更加細緻的排查,一步一步調試,在定義的wszURL數組中,我們發現上傳的RTMP完整的URL不完整了,隻剩下一半。

RTMP推流攝像頭視訊推送至EasyDSS使用EasyPlayer-RTMP WIN播放崩潰閃退是什麼原因?

3、到這裡我們就可以知道是wszURL數組定義長度太短了,隻定義了128位的長度。我們給的RTMP流位址的字元串長度大于了128,于是修改定義數組長度為256。

if (m_ChannelId > 0)
	{
		int nChannelId = m_ChannelId;
		m_ChannelId = -1;
		EasyPlayer_CloseStream(nChannelId);
 		if (NULL != pDlgRender)	pDlgRender->SetChannelId(m_ChannelId);
		if (NULL != pDlgRender)			pDlgRender->Invalidate();
		if (NULL != pBtnPreview)		pBtnPreview->SetWindowText(TEXT("Play"));
	}
	else
	{
		wchar_t wszURL[256] = {0,};
		if (NULL != pEdtURL)	pEdtURL->GetWindowTextW(wszURL, sizeof(wszURL));
		if (wcslen(wszURL) < 1)		return;
char szURL[256] = {0,};
__WCharToMByte(wszURL, szURL, sizeof(szURL)/sizeof(szURL[0]));
	char szUsername[32] = {0,};
		char szPassword[32] = {0,};           

複制

RTMP推流攝像頭視訊推送至EasyDSS使用EasyPlayer-RTMP WIN播放崩潰閃退是什麼原因?

4、修改數組定義長度後,再編譯運作,無報錯,成功播放,如下圖:

RTMP推流攝像頭視訊推送至EasyDSS使用EasyPlayer-RTMP WIN播放崩潰閃退是什麼原因?

原創聲明,本文系作者授權騰訊雲開發者社群發表,未經許可,不得轉載。如有侵權,請聯系 [email protected] 删除。