博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll] (1)
阅读量:6514 次
发布时间:2019-06-24

本文共 4728 字,大约阅读时间需要 15 分钟。

正文

     HikPlayM4.dll

 

using
 System;
using
 System.Runtime.InteropServices;
using
 System.Drawing;
namespace
 HikPlayer
{
    
#region
 struct
    
public
 
struct
 FRAME_INFO
    {
        
///
 
<summary>
        
///
 画面宽,单位像素。如果是音频数据则为0
        
///
 
        
///
 long nWidth;
        
///
 
</summary>
        
public
 
int
 nWidth;
        
///
 
<summary>
        
///
 画面高。如果是音频数据则为0
        
///
 
        
///
 long nHeight;
        
///
 
</summary>
        
public
 
int
 nHeight;
        
///
 
<summary>
        
///
 时标信息,单位毫秒。
        
///
 
        
///
 long nStamp;
        
///
 
</summary>
        
public
 
int
 nStamp;
        
///
 
<summary>
        
///
 数据类型,T_AUDIO16,T_RGB32, T_YV12
        
///
 
        
///
 long nType;
        
///
 
</summary>
        
public
 
int
 nType;
        
///
 
<summary>
        
///
 编码时产生的图像帧率。
        
///
 
        
///
 long nFrameRate;
        
///
 
</summary>
        
public
 
int
 nFrameRate;
    }
    
///
 
<summary>
    
///
 typedef struct{ 
    
///
     long nFilePos;   //文件位置; 
    
///
     long nFrameNum;  //帧序号; 
    
///
     long nFrameTime;  //帧时标(ms); 
    
///
 }FRAME_POS,*PFRAME_POS;  
    
///
 
</summary>
    
public
 
struct
 PFRAME_POS
    {
        
///
 
<summary>
        
///
 出错的文件位置 
        
///
 
        
///
 long nFilePos;
        
///
 
</summary>
        
public
 
int
 nFilePos;
        
///
 
<summary>
        
///
 出错后正常的帧号 
        
///
 
        
///
 long nFrameNum;
        
///
 
</summary>
        
public
 
int
 nFrameNum;
        
///
 
<summary>
        
///
 出错后正常的时间(相对此文件开始时间) 
        
///
 
        
///
 long nFrameTime;
        
///
 
</summary>
        
public
 
int
 nFrameTime;
        
///
 
<summary>
        
///
 出错时的帧号 
        
///
 
        
///
 long nErrorFrameNum;
        
///
 
</summary>
        
public
 
int
 nErrorFrameNum;
        
///
 
<summary>
        
///
 出错的绝对时间(设备录象文件有用) 
        
///
 
        
///
 SYSTEMTIME *pErrorTime;
        
///
 
</summary>
        
public
 DateTime pErrorTime;
        
///
 
<summary>
        
///
 出错时丢失的帧数 
        
///
 
        
///
 long nErrorLostFrameNum;
        
///
 
</summary>
        
public
 
int
 nErrorLostFrameNum;
        
///
 
<summary>
        
///
  出错时错误的数据大小 
        
///
 
        
///
 long nErrorFrameSize;
        
///
 
</summary>
        
public
 
int
 nErrorFrameSize;
    }
    
public
 
struct
 FRAME_TYPE
    {
        
///
 
<summary>
        
///
 数据帧首地址
        
///
 
        
///
 char *pDataBuf; 
        
///
 
</summary>
        
public
 
byte
[] pDataBuf;
        
///
 
<summary>
        
///
 数据帧的大小 
        
///
 long nSize; 
        
///
 
</summary>
        
public
 
int
 nSize;
        
///
 
<summary>
        
///
 数据帧的个数
        
///
 
        
///
 long nFrameNum;  
        
///
 
</summary>
        
public
 
int
 nFrameNum;
        
///
 
<summary>
        
///
 是否音频帧
        
///
 
        
///
 BOOL bIsAudio;   
        
///
 
</summary>
        
public
 
bool
 bIsAudio;
        
///
 
<summary>
        
///
 保留
        
///
 
        
///
 long nReserved; 
        
///
 
</summary>
        
public
 
int
 nReserved;
    }
    
#endregion
    
#region
 delegate
    
///
 
<summary>
    
///
 void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)
    
///
 
    
///
 注意:关于回调函数。因为vb不支持多线程,所以当回调函数是VB声明的函数时,在vc的线程中调用
    
///
 vb的函数,会有问题。详见:Microsoft Knowledge Base Article - Q198607 “PRB: Access Violation in VB 
    
///
 Run-Time Using AddressOf ”。 
    
///
 
</summary>
    
///
 
<param name="nPort">
播放器通道号
</param>
    
///
 
<param name="pBuf">
解码后的音视频数据
</param>
    
///
 
<param name="nSize">
解码后的音视频数据pBuf的长度
</param>
    
///
 
<param name="pFrameInfo">
图像和声音信息
</param>
    
///
 
<param name="nReserved1">
保留参数
</param>
    
///
 
<param name="nReserved2">
保留参数
</param>
    
public
 
delegate
 
void
 DecCBFun(
int
 nPort, IntPtr pBuf, 
int
 nSize, 
ref
 FRAME_INFO pFrameInfo, 
int
 nReserved1, 
int
 nReserved2);
    
///
 
<summary>
    
///
 void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReceaved)); 
    
///
 
</summary>
    
///
 
<param name="nPort">
通道号
</param>
    
///
 
<param name="pBuf">
返回图像数据
</param>
    
///
 
<param name="nSize">
返回图像数据大小
</param>
    
///
 
<param name="nWidth">
画面宽,单位像素
</param>
    
///
 
<param name="nHeight">
画面高
</param>
    
///
 
<param name="nStamp">
时标信息,单位毫秒
</param>
    
///
 
<param name="nType">
数据类型, T_YV12,T_RGB32,T_UYVY
</param>
    
///
 
<param name="nReceaved">
保留
</param>
    
public
 
delegate
 
void
 DisplayCBFun(
int
 nPort, IntPtr pBuf, 
int
 nSize, 
int
 nWidth, 
int
 nHeight, 
int
 nStamp, 
int
 nType, 
int
 nReceaved);
    
///
 
<summary>
    
///
 void CALLBACK SourceBufCallBack(long nPort,DWORD nBufSize, DWORD dwUser,void*pContext) 
    
///
 
</summary>
    
///
 
<param name="nPort">
播放器通道号
</param>
    
///
 
<param name="nBufSize">
缓冲区中剩余数据
</param>
    
///
 
<param name="dwUser">
用户数据
</param>
    
///
 
<param name="pContext">
保留数据
</param>
    
public
 
delegate
 
void
 SourceBufCallBack(
int
 nPort, 
ushort
 nBufSize, 
ushort
 dwUser, IntPtr pContext);
    
///
 
<summary>
    
///
 void FileRefDone(DWORD nPort,DWORD nUser) 
    
///
 
</summary>
    
///
 
<param name="nPort">
播放器通道号
</param>
    
///
 
<param name="nUser">
用户数据
</param>
    
public
 
delegate
 
void
 FileRefDone(
int
 nPort, 
ushort
 nUser);
    
///
 
<summary>
    
///
 void CALLBACK DrawFun(long nPort,HDC hDc,LONG nUser); 
    
///
 
</summary>
    
///
 
<param name="nPort">
通道号
</param>
    
///
 
<param name="hDc">
hDc OffScreen表面设备上下文,你可以像操作显示窗口客户区DC那样操作它。
</param>
    
///
 
<param name="nUser">
用户数据,就是上面输入的用户数据
</param>
    
public
 
delegate
 
void
 DrawFun(
int
 nPort, IntPtr hDc, 
int
 nUser);
    
///
 
<summary>
    
///
 void __stdcall Verify(long nPort, FRAME_POS * pFilePos, DWORD bIsVideo, DWORD nUser)
    
///
 
</summary>
    
///
 
<param name="nPort">
通道号
</param>
    
///
 
<param name="pFilePos">
文件位置
</param>
    
///
 
<param name="bIsVideo">
是否视频数据,1视频,0音频
</param>
    
///
 
<param name="nUser">
用户数据
</param>
    
public
 
delegate
 
void
 Verify(
int
 nPort, 
ref
 PFRAME_POS pFilePos, 
ushort
 bIsVideo, 
ushort
 nUser);
本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586635,如需转载请自行联系原作者
你可能感兴趣的文章
命名难,难于上青天
查看>>
APUE读书笔记-05标准输入输出库(7)
查看>>
23 第一周作业
查看>>
DNS解析偶尔延迟
查看>>
iOS打电话,发短信,发邮件,打开网址
查看>>
06-验证码-基本功能实现
查看>>
Java数据结构与算法(六) 希尔排序
查看>>
canvas学习笔记
查看>>
elasticsearch安装步骤
查看>>
PHP获取Cookie模拟登录CURL(转)
查看>>
PHP-权限控制类(转)
查看>>
CSS3秘笈第三版涵盖HTML5学习笔记9~12章
查看>>
bzoj1044木棍分割
查看>>
leetcode-136-Single Number
查看>>
http服务器小项目
查看>>
一些数学上的名词及操作
查看>>
Flume 读取实时更新的日志文件
查看>>
HDU 2049
查看>>
《Spring1之第十次站立会议》
查看>>
Unity Shader 噪声消融特效 - 剑灵死亡特效
查看>>