c# 海康威視 Winform播放mp4視頻


最近有個視頻播放系統,需要對海康的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只用到了幾個播放,暫停,快進,后退,播放時間,當前時間幾個功能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM