流媒體二次開發 -- C++
好了,現在讓我們先從VC6.0開始研究海康流媒體二次開發吧。
首先,聯絡杭州海康威視官方獲取流媒體二次開發SDK文件和Demo示例(client.dll,PlayM4.dll)這兩個Dll檔案是進行流媒體二次開發必需DLL。接著,用官方Demo裡的.exe程式測試你所獲取的流媒體實時流是否可用。好了,到這裡如果可以看到視訊播放了,那麼你的流媒體實時流URL就是正確的了。
執行VC6.0,開啟clientTest工程檔案,如果沒有看見clientTest.dsw,可以任意開啟一個.cpp檔案,編譯時系統自動生成.dsw工程檔案。這裡需注意的是,本文運用的是VC6.0,因此海康Demo裡的例子編譯會提示出錯資訊:無法識別關鍵字super。在研究過程中,我將這些編譯錯誤一一解決,編譯通過,但是執行時,卻無啟動任何操作介面。於是結合SDK開發文件,研究Demo裡流媒體播放的程式碼,發現不是很複雜,於是就自己在VC6.0重新寫一個測試流媒體播放的程式。
1. C++新建MFC AppWizard[exe]工程(單個或多個Dialog)
2. 在Dialog上拖拉picture,button,editbox控制元件,並右擊屬性更改控制元件名稱
這裡的picture裡的Image可以通過選單Insert-Resource,匯入圖片(系統自動命名IDB_BITMAP1),然後在上述picture屬性框中Image選擇匯入圖片名稱即可。
3. 接著選擇button,右擊選中ClassWizard,新增點選事件
(1)可以看到Button預設有BN_CLICKED,BN_DOUBLECLICKED事件,因此可以不必再新增。
(2)可以看見Dialog中所有控制元件都在此顯示,因此在這裡我們為EditBox新增變數
4. 右擊Button,選擇Events,可以更改單擊事件名稱OnBtnPlay
5. 雙擊Button,進入點選事件,可以在此編寫播放事件(暫時不編寫,等待準備工作就緒再編寫)
6. 工程FileView檢視-HeadFiles匯入client.h,clntsink.h
7. 更改clientTestDlg.h檔案,繼承clntsink回撥函式集,並宣告2個全域性變數,int m_hSession;int m_hdown;
#include "client.h"
#include "afxcmn.h"
#include "afxwin.h"
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CClientTestDlg dialog
#define NORMALBACK
#ifdef NORMALBACK
class CClientTestDlg : public CDialog,public IHikClientAdviseSink
#else
class CClientTestDlg : public CDialog
#endif
{
// Construction
public:
CClientTestDlg(CWnd* pParent = NULL); // standard constructor
#ifdef NORMALBACK
virtual int OnPosLength(unsigned long nLength);
virtual int OnPresentationOpened(int success);
virtual int OnPresentationClosed();
virtual int OnPreSeek(unsigned long uOldTime, unsigned long uNewTime);
virtual int OnPostSeek(unsigned long uOldTime, unsigned long uNewTime);
virtual int OnStop();
virtual int OnPause(unsigned long uTime);
virtual int OnBegin(unsigned long uTime);
virtual int OnRandomBegin(unsigned long uTime);
virtual int OnContacting(const char* pszHost);
virtual int OnBuffering(unsigned int uFlag, unsigned short uPercentComplete);
virtual int OnPutErrorMsg(const char* pError);
virtual int OnChangeRate(int flag);
virtual int OnDisconnect();
#endif
.....................
public:
int m_hSession;
int m_hdown;
8. 更改clientTest.cpp檔案(引用client.h),在初始化InitInstance中加入InitStreamClientLib();, FiniStreamClientLib();
9. 到這裡,我們可以開始在clientTestDlg.cpp(引用client.h, clintsink.h)中編寫Button點選事件:
// TODO: Add your control notification handler code here
int nRet;
if (m_hSession >=0)
{
nRet=HIKS_Stop(m_hSession);
m_opened=-1;
}
HWND hWnd = GetDlgItem(IDC_STATIC_PictureShow)->GetSafeHwnd();
m_hSession=HIKS_CreatePlayer(this,hWnd,DoRecord);
if (m_hSession!=-1)
{
UpdateData(true);
nRet=HIKS_OpenURL(m_hSession,m_URLvalue.GetBuffer(0),0);
if (nRet != 1)
{
HIKS_Destroy(m_hSession);
m_hSession=-1;
m_opened=-1;
return;
}
}
while (m_opened < 0)
{
Sleep(500);
}
if (m_opened <= 0)
{
HIKS_Destroy(m_hSession);
m_hSession = -1;
m_opened = -1;
}
nRet=HIKS_Play(m_hSession);
if(nRet != 1)
{
HIKS_Stop(m_hSession);
m_hSession = -1;
m_opened = -1;
}
注意:
(1)選單欄Project-settings,選擇Link,新增client.lib 。在VC安裝目錄下,找到Include,新增client.h,clntsink.h;在Lib新增client.lib
(2)在debug編譯的clientTest.exe,新增client.cll,playm4.cll等檔案
相關文章
- C++大作業二次開發C++
- 流媒體行業加速發展行業
- NX二次開發-使用NXOPEN C++嚮導模板做二次開發C++
- 影片直播原始碼開發中的流媒體協議:rtmp協議原始碼協議
- 從0-1搭建流媒體系統之ZLMediaKit 安裝、執行、推流、拉流 音影片開發系列
- 當音樂流媒體平臺開始Netflix化
- 流媒體資源 (Streaming Assets)
- 基於c++的排雷小遊戲二次開發C++遊戲
- 流媒體音視訊開發有哪些學習書籍?推薦11本
- Conviva:2021年流媒體報告之發現內容
- 第一週-軟體二次開發
- 82%使用者青睞流媒體直播,媒體發展「直播+」業態三大招
- Comscore:2023年流媒體報告
- ABI:2019年流媒體報告
- DASH流媒體MPD中的segmentTemplate
- Luminate:2024年流媒體報告
- Conviva:2021年流媒體報告
- Fandom:2022年流媒體報告
- surging 如何使用流媒體服務
- 淺析 HLS 流媒體協議協議
- FFmpeg開發筆記(五十)聊聊幾種流媒體傳輸技術的前世今生筆記
- 軟體開發工作流-GitFlowGit
- 認識流媒體協議,從 RTSP 協議解析開始!協議
- ThinkSNS:軟體二次開發怎麼做?
- 關於流媒體的效能測試
- 什麼是流媒體伺服器?伺服器
- 使用Nginx搭建流媒體伺服器Nginx伺服器
- LiveVideoStackCon | 面向線上教育業務的流媒體分發演進IDE
- 車牌識別一體機二次開發
- 網站修改二次開發,網站二次開發流程網站
- Wireshark在多媒體開發中的使用
- 【ERP軟體】ERP體系二次開發有哪些危險?
- 流媒體在西班牙:付費共享才是王道?
- 直播流媒體伺服器解決方案伺服器
- YouGov:2020年流媒體服務報告Go
- windows編譯ZLMediaKit流媒體服務webrtcWindows編譯Web
- MAGNA:流媒體電視廣告報告
- Comscore:2022年流媒體行業報告行業
- 流媒體傳輸協議之 RTP(下篇)協議