using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Nanji_Island { using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Net.Sockets; using System.Threading; //消息(LIB)/事件(COM) 代码 public enum EventCode { RECVDATATIMEOUT = 1 //收取流时,如果10秒内都没有数据,则会发送此消息 , FOCUSCHANGE //播放器焦点改变时发生 , STARTPLAY //开始播放 , ENTERWAITFORBUFFER //进入缓冲 , SETUP_VIDEO_PARAM_OK //SetupDecoder返回成功 , SETUP_AUDIO_PARAM_OK //SetupDecoder返回成功 , SNAPSHORT_FINISH //抓图结束 , BINDPORTERROR //邦定端口失败 , VSS_STOPPLAY //播放VSS文件结束 , VSS_STARTPLAY //开始播放 , VSS_PLAYNEXT //播放下一个文件 , VSS_SETUPERROR //调用setup返回失败 , CREATE_THREAD_ERROR //创建线程失败 , LOC_STOPPLAY //停止本地文件播放 , LOC_OPENFILEERROR //本地文件播放时打开文件失败 , LOC_PLAYERROR //播放失败退出 , LOC_PAUSEPLAY //暂停播放 , LOC_OPENFILE_ERROR //打开本地文件失败 , RECV_RETUN_ERROR //RTPRECV读取数据返回少于16个字节 , FIRSTPLAY //第一次播放 , RECORDEND , CAPTUREPICEND , PLAYTIMECHANGE }; public enum PLAYDLL_ERROR_CODE { ERR_PLY_AUDIOPARAM_ERROR = -999991, ERR_PLY_VIDEOPARAM_ERROR, ERR_PLY_VIDEOCHANNELID_ERROR, ERR_PLY_NOT_DECODER_MODE, ERR_PLY_DECODERTHREAD_NOTSTART, ERR_PLY_SOUND_OFF_SKIPBUFFER, ERR_PLY_NOAUDIOON_ERROR, ERR_PLAY_NOTPLAYMODE_ERROR, ERR_PLY_DISPLAY_OFF_ERROR, ERR_PLAY_FILETYPE_ERROR, ERR_PLAY_AVIFILE_ERROR, ERR_PLAY_NOTPLAYMODE, ERR_PLAY_CONTROL_PARAM_ERROR, ERR_PLAY_CONTROLTYPE_ERROR, ERR_PLAYER_ISPLAYING_FILE, ERR_PLAYER_OPENFILEERROR, ERR_PLAY_STOPPLAYFIRST, ERR_PLAY_BUFFER_ISFULL, ERR_PLAY_NOT_PLAYLOCFILE_MODE, ERR_PLAY_NOTFIND_VIDEO_ERROR, ERR_PLAY_NOTREPLAY_MODE_ERROR, ERR_PLAY_NOPLAYING_ERROR, ERR_PLAY_OUT_OFF_MEMORY, ERR_PLAY_INITDSOUND_FAIL, ERR_PLAY_PARAM_ERROR, ERR_POINTER_ISNULL, }; ///播放动作1正常,2停止,3快进,4慢放,5帧进,6定点播放 public enum PLAYFILE_ACTION { PLAYER_ACTION_PLAY = 1, PLAYER_ACTION_STOP, PLAYER_ACTION_FAST, PLAYER_ACTION_SLOW, PLAYER_ACTION_FRAMESKIP, PLAYER_ACTION_SEEK, PLAYER_ACTION_PAUSE, PLAYER_ACTION_RESUME, PLAYER_ACTION_CAPIMG = 10, PLAYER_ACTION_CHANGE_SOUND, PLAYER_ACTION_RECV_DECODEPARAM, PLAYER_ACTION_NOSKIPFRAME_FAST, }; public struct FRAME_INFO { int nWidth; int nHeight; int nStamp; int nType; int nFrameRate; int bIsVideo; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] int[] nLinseSize; }; public delegate int fDecCallBackFunction(int nPort, IntPtr pBuf, int nSize, ref FRAME_INFO pFrameInfo, IntPtr pUser, int nReserved2); public delegate int fStatusEventCallBack(int nPort, Int32 nStateCode, IntPtr pResponse, IntPtr pUser); public delegate int fDisplayFinishCallBack(int lType/*=0x10000001*/, IntPtr lPara1/*==HDC*/, int lPara2/*==NULL*/);//add 20130217 play file by zfuwen public class PLAYERDLL { public PLAYERDLL() { } /// /// 调用其它接口之前,应该先调用此接口,进行初始化,结束时,应该调用IP_TPS_ReleaseAll进行释放 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_Init(); /// /// 打开流 /// /// 视频播放标记,由用户定义,建议从1开始编号 /// 解码参数,由netsdkdll中的事件EVENT_RECVVIDEOPARAM和EVENT_RECVAUDIOPARAM取得 /// 参数长度 /// 是否为音频 /// 缓冲帧最多帧数,注意不是内存大小 /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_OpenStream(int nPort, IntPtr pParam, int pSize, int isAudioParam, int nMaxBufFrameCount); /// /// 在指定hWnd上进行播放,如果hWnd==Inprt.Zero则使用解码方式进行解码回放 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_Play(int nPort, IntPtr hWnd); /// /// 播放声音 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_PlaySound(int nPort); /// /// 传入音频数据 /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_InputAudioData(int nPort, IntPtr pBuf, int nSize, int timestamp); /// /// 传入视频数据 /// /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_InputVideoData(int nPort, IntPtr pBuf, int nSize, int isKey, int timestamp); /// /// 抓图,传入目录 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_CatchPic(int Port, string sDirName); /// /// 指定文件名进行抓图 /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_CatchPicByFileName(int nPort, string sFileName, int isJpg); /// /// 停止所有声音 /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_StopSound(); /// /// 停止播放指定视频 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_Stop(int nPort); /// /// 关闭解码器,注意,调用此接口只是关闭解码器,并不会释放相关资源,如果要直接释放相关资源则要调用IP_TPS_DeleteStream /// 一般在关闭当前流重新播放新流时,可以使用此接口 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_CloseStream(int nPort); /// /// 关闭解码器并释放资源 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_DeleteStream(int nPort); /// /// 关闭所有解码器,注意只是关闭解码器,并不释放相关资源 /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_CloseAll(); /// /// 释放所有资源,此函数,一般只有退出应用程序进程时才调用。 /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_ReleaseAll(); /// /// 设置解码数据回调函数 /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetDecCallBack(int nPort, fDecCallBackFunction func, IntPtr pUser); /// /// 取得当前版本号 /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetVersion(); /// /// 设置状态回调函数 /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetStatusEventCallBack(int nPort, fStatusEventCallBack func, IntPtr pUser); /// /// 播放本地文件 /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_PlayLocFile(int nPort, IntPtr hWnd, string filename, int fileType); /// /// 停止播放本地文件 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_StopPlayLocFile(int nPort); /// /// 取当当前播放时间,仅用于回放指定文件时 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetPlayTime(int nPort, ref int nRetTime); /// /// 取得当前文件所有时间,用于回放指定文件时 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetFileTime(int nPort, ref int nRetTime); /// /// 回放文件控制,一般控制快进慢放,暂停等。 /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_ControlPlay(int nPort, int nAvtionType, int param); /// /// 传入鼠标动作,以处理,注意不要传双击事件 /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_InputMouseEvent(int nPort, int nMsgType, Int32 wp, Int32 lp); /// /// 设置缩放类型 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetZoomRectOn(int nPort, int nType); /// /// 取当前状态,是否启用电子缩放 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetZoomRectStatus(int nPort); /// /// 切换满屏显示状态 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetFullFillStatus(int nPort, int bIsFullFill); /// /// 获取当前满屏显示状态 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetFullFillStatus(int nPort); /// /// 设置视频是否播放 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetVideoOn(int nPort, int bIsOn); /// /// 切换视频,不建议使用此函数。 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SwitchVideo(int from, int to); /// /// 调节亮度和对比度 /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetContrast(int nPort, int nBrightness, int nContrast, int bIsEnable); /// /// 调节显示效果gamma值 /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetGamma(int nPort, int nGammaValue, int bIsEnable); /// /// 设置显示区域 /// /// /// /// /// //[DllImport("DllPlayer.dll")] //public static extern int IP_TPS_PlayByArea(int nPort, IntPtr hWnd, RECT rcArea); /// /// 设置缓存大小 /// /// 通道号 /// 缓存最小值,当缓存数据小于此时,播放速度将会减慢,默认为200,以取得更优的流畅性,减少缓冲次数 /// 缓存最大值,当缓存数据大于此时时,播放速度将会加快,以取得更好的时延,默认500 /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetBufferTick(int nPort, int minMinSecond, int maxMaxSecond);//add 2013-03-21 /// /// 让播放重新刷新一次图像 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_RefreshSurface(int nPort);//redraw image add 20130217 by zfuwen /// /// 设置音频声音 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetVolume(int nPort, int nVolume);//add 20130217 play file by zfuwen /// /// 取得音频声音 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetVolume(int nPort, ref int pVolume);//add 20130217 play file by zfuwen /// /// 设置是否反向播放,此接口暂时不能使用,留作扩展接口 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetPlayDirection(int nPort, int nType);//add 20130217 play file by zfuwen /// /// 显示完一帧后,都会调用此回调函数,让用户可以自行进行一些自定义操作 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetDisplayFinishCallBack(int nPort, fDisplayFinishCallBack fnCallBack);//add 20130217 play file by zfuwen /// /// 播放声音,调用此方法将不停止正在播放的声音,即允许二路音频同时播放 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_PlaySoundShare(int nPort);//add 20130217 play file by zfuwen,play audio more than one stram /// /// 停止 播放声音,调用此方法将只停止指定通道的声音 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_StopSoundShare(int nPort);//add 20130217 play file by zfuwen,stop play one audio stream /// /// 打开要回放的文件,配合IP_TPS_StartPlayFile使用 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_OpenFile(ref int nPort, StringBuilder filename);//add 20130217 test file is ok? /// /// 开始播放本地文件,配合IP_TPS_OpenFile使用z /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_StartPlayFile(int nPort, IntPtr hWnd);//add 20130217 play file /// /// 调节播放结束后的消息通知接受名柄和消息类型 /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetFileEndMsgWnd(int nPort, int hWnd, int lMsg);//add 20130217 play file /// /// 设置回放模式 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetPlayBackMode(int nPort, int bIsPlayBack); /// /// 设置亮度对比度,饱和度和色调 /// /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetColor(int nPort, int lBrightness, int lContrast, int lSaturation, int lHue);//add 20130217 play file by zfuwen /// /// 获取亮度对比度,饱和度和色调 /// /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetColor(int nPort, ref int plBrightness, ref int plContrast, ref int plSaturation, ref int plHue);//add 20130217 play file by zfuwen /// /// 取当指定通道红缓存了多少帧 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetBufferCount(int nPort, ref int pRetCount); /// /// 清除指定通道的所有缓存 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_ClearBuffer(int nPort); /// /// 判断指定缓存的缓存是否已经满了 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_BufferIsFull(int nPort, int bAutoPlayMaxFrame);//add by zfuwen 20130301 /// /// 设置要显示的标题 /// /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetShowTitle(int nPort, StringBuilder TitleMsg, int x, int y, int bNeedShow); /// /// 设置日志保存目录,此函数仅用于调试 /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetLogToFile(int bLogEnable, StringBuilder strLogDir, int bAutoDel); /// /// 设置告警区域显示状态 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetMotionDetectConfigOn(int nPort, int value); /// /// 设置告警方区域布局及选择状态 /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_SetMotionDetectConfig(int nPort, int xBlocks, int yBlocks, StringBuilder pConfigString); /// /// 获取当前告警区别的选择状态 /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_GetMotionDetectConfigString(int nPort, StringBuilder pConfigString); /// /// 初始化音频播放器,注意,只播放音频时才使用此方式 /// /// /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_CreateAuidoStreamPlayer(ref int plPort, int audiotype, int samplerate, int bitspersample, int channels);//add by zfuwen 20130221 /// /// 仅有音频播放时,传入参数数据 /// /// /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_InputAuidoStreamPlayer(int lPort, IntPtr pBuffer, int buflen);//add by zfuwen 20130221 /// /// 释放音频播放器 /// /// /// [DllImport("DllPlayer.dll")] public static extern int IP_TPS_DestroyAuidoStreamPlayer(int lPort);//add by zfuwen 20130221 /// /// DLL的版本至少应该大于等于此值,才能使用这里定义的所有功能 /// public static string strNeedDllVersion = "V1.6.0.1"; } }