最近有個視頻播放系統,需要對海康的mp4格式視頻進行播放,由於普通播放器無法對該視頻進行播放原因是海康對視頻進行了自己的編碼,需要相應的解碼才可以對視頻進行播放。
下面是對海康威視視頻播放的c#代碼(需要從海康官網下載播放庫)。
一,這個是核心庫通過c#對海康提供的動態鏈接庫dll方法的封裝。
1 public class PlayCtrlSDK 2 { 3 #region 解碼庫 4 [SecurityCritical] 5 [DllImport("PlayCtrl.dll")] 6 public static extern uint PlayM4_GetLastError(int nPort); 7 /// <summary> 8 /// 獲取文件當前播放位置(百分比)。 9 /// </summary> 10 /// <param name="nPort"></param> 11 /// <returns></returns> 12 [SecurityCritical] 13 [DllImport("PlayCtrl.dll")] 14 public static extern float PlayM4_GetPlayPos(int nPort); 15 /// <summary> 16 ///設置文件當前播放位置(百分比)。 17 /// </summary> 18 /// <param name="nPort"></param> 19 /// <returns></returns> 20 [SecurityCritical] 21 [DllImport("PlayCtrl.dll")] 22 public static extern float PlayM4_SetPlayPos(int nPort, float fRelativePos); 23 /// <summary> 24 /// 獲取文件大小 25 /// </summary> 26 /// <returns></returns> 27 [SecurityCritical] 28 [DllImport("PlayCtrl.dll")] 29 public static extern uint PlayM4_GetFileHeadLength(); 30 /// <summary> 31 /// 獲取文件總時間 32 /// </summary> 33 /// <param name="nPort"></param>PlayM4_GetPlayedTime 34 /// <returns></returns> 35 [SecurityCritical] 36 [DllImport("PlayCtrl.dll")] 37 public static extern uint PlayM4_GetFileTime(int nPort); 38 /// <summary> 39 /// 獲取當前播放時間 40 /// </summary> 41 /// <param name="nPort"></param> 42 /// <returns></returns> 43 [SecurityCritical] 44 [DllImport("PlayCtrl.dll")] 45 public static extern uint PlayM4_GetPlayedTime(int nPort); 46 [SecurityCritical] 47 [DllImport("PlayCtrl.dll")] 48 public static extern int PlayM4_GetCaps(); 49 /// <summary> 50 /// 關閉聲音 51 /// </summary> 52 /// <returns></returns> 53 [SecurityCritical] 54 [DllImport("PlayCtrl.dll")] 55 public static extern bool PlayM4_StopSound(); 56 /// <summary> 57 /// 獲取未使用的通道號 58 /// </summary> 59 /// <param name="nPort"></param> 60 /// <returns></returns> 61 [SecurityCritical] 62 [DllImport("PlayCtrl.dll")] 63 public static extern bool PlayM4_GetPort(ref int nPort); 64 /// <summary> 65 ///播放聲音 66 /// </summary> 67 /// <param name="nPort"></param> 68 [SecurityCritical] 69 [DllImport("PlayCtrl.dll")] 70 public static extern bool PlayM4_PlaySound(int nPort); 71 /// <summary> 72 /// 設置流播放模式 73 /// </summary> 74 /// <param name="port"></param> 75 /// <param name="mode"></param> 76 /// <returns></returns> 77 [SecurityCritical] 78 [DllImport("PlayCtrl.dll")] 79 public static extern bool PlayM4_SetStreamOpenMode(int nPort, int mode); 80 /// <summary> 81 /// 打開流 82 /// </summary> 83 /// <param name="nPort"></param> 84 /// <param name="pFileHeadBuf"></param> 85 /// <param name="nSize"></param> 86 /// <param name="nBufPoolSize"></param> 87 /// <returns></returns> 88 [SecurityCritical] 89 [DllImport("PlayCtrl.dll")] 90 public static extern bool PlayM4_OpenStream(int nPort, byte[] pFileHeadBuf, UInt32 nSize, uint nBufPoolSize); 91 /// <summary> 92 /// 設置播放緩沖區最大緩沖幀數 93 /// </summary> 94 /// <param name="nPort"></param> 95 /// <param name="nNum"></param> 96 /// <returns></returns> 97 [SecurityCritical] 98 [DllImport("PlayCtrl.dll")] 99 public static extern bool PlayM4_SetDisplayBuf(int nPort, uint nBufPoolSize); 100 /// <summary> 101 /// 打開文件 102 /// </summary> 103 /// <param name="nPort"></param> 104 /// <param name="hWnd"></param> 105 /// <returns></returns> 106 [SecurityCritical] 107 [DllImport("PlayCtrl.dll")] 108 public static extern bool PlayM4_OpenFile(int nPort, string fileName); 109 /// <summary> 110 /// 關閉文件 111 /// </summary> 112 /// <param name="nPort"></param> 113 /// <param name="hWnd"></param> 114 /// <returns></returns> 115 [SecurityCritical] 116 [DllImport("PlayCtrl.dll")] 117 public static extern bool PlayM4_CloseFile(int nPort); 118 /// <summary> 119 /// 開啟播放 120 /// </summary> 121 /// <param name="nPort"></param> 122 /// <param name="hWnd"></param> 123 /// <returns></returns> 124 [SecurityCritical] 125 [DllImport("PlayCtrl.dll")] 126 public static extern bool PlayM4_Play(int nPort, IntPtr hWnd); 127 /// <summary> 128 /// 開始倒放 129 /// </summary> 130 /// <param name="nPort"></param> 131 /// <returns></returns> 132 [SecurityCritical] 133 [DllImport("PlayCtrl.dll")] 134 public static extern bool PlayM4_ReversePlay(int nPort); 135 /// <summary> 136 /// 輸入流數據 137 /// </summary> 138 /// <param name="nPort"></param> 139 /// <param name="pBuf"></param> 140 /// <param name="nSize"></param> 141 /// <returns></returns> 142 [SecurityCritical] 143 [DllImport("PlayCtrl.dll")] 144 public static extern bool PlayM4_InputData(int nPort, byte[] pBuf, uint nSize); 145 /// <summary> 146 /// 關閉播放 147 /// </summary> 148 /// <param name="nPort"></param> 149 /// <returns></returns>PlayM4_Pause 150 [SecurityCritical] 151 [DllImport("PlayCtrl.dll")] 152 public static extern bool PlayM4_Stop(int nPort); 153 /// <summary> 154 ///暫停/播放1:暫停,0:恢復 155 /// </summary> 156 /// <param name="nPort"></param> 157 /// <returns></returns> 158 [SecurityCritical] 159 [DllImport("PlayCtrl.dll")] 160 public static extern bool PlayM4_Pause(int nPort, uint nPause); 161 /// <summary> 162 /// 關閉流 163 /// </summary> 164 /// <param name="nPort"></param> 165 /// <returns></returns> 166 [SecurityCritical] 167 [DllImport("PlayCtrl.dll")] 168 public static extern bool PlayM4_CloseStream(int nPort); 169 /// <summary> 170 /// 釋放已使用的通道號 171 /// </summary> 172 /// <param name="nPort"></param> 173 /// <returns></returns> 174 [SecurityCritical] 175 [DllImport("PlayCtrl.dll")] 176 public static extern bool PlayM4_FreePort(int nPort); 177 178 #endregion 179 }
二,自定義控件:如下圖
三。引用控件實現效果如下:
實現功能很簡單,主要是對海康播放庫的調用。自己做的這個demo只用到了幾個播放,暫停,快進,后退,播放時間,當前時間幾個功能。