流媒體二次開發 -- 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#
- 流媒體行業加速發展行業
- 流媒體加密加密
- C++大作業二次開發C++
- NX二次開發-使用NXOPEN C++嚮導模板做二次開發C++
- 流媒體技術基礎-流媒體傳輸協議(二)協議
- 流媒體技術之概念
- 流媒體 Buffer 設計原理
- 流媒體學習---------序 (轉)
- 基於c++的排雷小遊戲二次開發C++遊戲
- 流媒體音視訊開發有哪些學習書籍?推薦11本
- 移動流媒體技術及其應用發展方向
- 第一週-軟體二次開發
- crtmpserver系列(一):流媒體概述Server
- FMS 流媒體視訊技術
- 流媒體資源 (Streaming Assets)
- nginx+ffmpeg搭建流媒體伺服器(直播流)Nginx伺服器
- FFmpeg開發筆記(五十)聊聊幾種流媒體傳輸技術的前世今生筆記
- 軟體開發工作流-GitFlowGit
- 當音樂流媒體平臺開始Netflix化
- ThinkSNS:軟體二次開發怎麼做?
- 軟體怎樣做到支援二次開發
- 什麼是流媒體伺服器?伺服器
- 用VLC做流媒體伺服器伺服器
- fms 流媒體影片技術介紹
- 雲遊戲流媒體整體架構設計(雲遊戲流媒體技術前瞻,最近雲遊戲概念很火,加之對流媒體技術略有研究,簡單寫一些)遊戲架構
- 不滿足於流媒體業務,亞馬遜也要開始做遊戲了亞馬遜遊戲
- 車牌識別一體機二次開發
- Wireshark在多媒體開發中的使用
- Dresdon二次開發
- ThinkS二次開發
- 直播流媒體伺服器解決方案伺服器
- 流媒體傳輸協議之 RTP (上篇)協議
- 流媒體傳輸協議之 RTP(下篇)協議
- 1.RTMP流媒體伺服器搭建伺服器
- 流媒體技術之傳輸協議協議
- vlc簡單搭建流媒體伺服器伺服器
- “笑”傲流媒體―SMIL基礎教程(轉)