设备网络SDK开发使用手册

NET_DVR_PlayBackByName

按文件名回放录像文件。

LONG NET_DVR_PlayBackByName(
  LONG    lUserID,
  char    *sPlayBackFileName,
  HWND    hWnd
);

Parameters

lUserID
[in] NET_DVR_Login_V40等登录接口的返回值
sPlayBackFileName
[in] 回放的文件名,长度不能超过100字节
hWnd
[in] 回放的窗口句柄,若置为空,SDK仍能收到码流数据,但不解码显示

Return Values

-1表示失败,其他值作为NET_DVR_StopPlayBack等函数的参数。接口返回失败请调用NET_DVR_GetLastError获取错误码,通过错误码判断出错原因。

以下是该接口可能返回的错误值

错误类型 错误值 错误信息
NET_DVR_NOERROR 0 没有错误。
NET_DVR_PASSWORD_ERROR 1 用户名密码错误。注册时输入的用户名或者密码错误。
NET_DVR_NOINIT 3 SDK未初始化。
NET_DVR_OVER_MAXLINK 5 连接到设备的用户个数超过最大。
NET_DVR_NETWORK_FAIL_CONNECT 7 连接设备失败。设备不在线或网络原因引起的连接超时等。
NET_DVR_NETWORK_SEND_ERROR 8 向设备发送失败。
NET_DVR_NETWORK_RECV_ERROR 9 从设备接收数据失败。
NET_DVR_NETWORK_RECV_TIMEOUT 10 从设备接收数据超时。
NET_DVR_COMMANDTIMEOUT 14 设备命令执行超时。
NET_DVR_PARAMETER_ERROR 17 参数错误。SDK接口中给入的输入或输出参数为空。
NET_DVR_NOSPECFILE 33 回放时设备没有指定的文件。
NET_DVR_ALLOC_RESOURCE_ERROR 41 SDK资源分配错误。
NET_DVR_NOENOUGH_BUF 43 缓冲区太小。接收设备数据的缓冲区或存放图片缓冲区不足。
NET_DVR_CREATESOCKET_ERROR 44 创建SOCKET出错。
NET_DVR_USERNOTEXIST 47 用户不存在。注册的用户ID已注销或不可用。
NET_DVR_LOADPLAYERSDKFAILED 64 载入当前目录下Player Sdk出错。
NET_DVR_LOADPLAYERSDKPROC_ERROR 65 找不到Player Sdk中某个函数入口。
NET_DVR_LOADDSSDKFAILED 66 载入当前目录下DSsdk出错。
NET_DVR_BINDSOCKET_ERROR 72 绑定套接字失败。
NET_DVR_SOCKETCLOSE_ERROR 73 socket连接中断,此错误通常是由于连接中断或目的地不可达。

Remarks

该接口指定了当前要播放的录像文件,调用成功后,还必须调用NET_DVR_PlayBackControl_V40接口的开始播放控制命令(NET_DVR_PLAYSTART)才能实现回放。
在调用该接口成功后,可以通过接口NET_DVR_SetPlayDataCallBack_V40注册回调函数,捕获录像的码流数据并自行处理。

ISAPI协议登录不支持该接口。

Linux下

对于4.1或者以上的版本的SDK,HWND表示播放窗口的句柄,定义为:
typedef unsigned int HWND;

如果使用Qt进行界面开发,示例如下:

NET_DVR_CLIENTINFO tmpclientinfo;
tmpclientinfo.hPlayWnd = (HWND)m_framePlayWnd->GetPlayWndId();

对于4.1以前的版本的SDK,HWND定义如下:

typedef struct __PLAYRECT
{
    int  x;          //显示框左上角横坐标
    int  y;          //显示框左上角纵坐标
    int  uWidth;  //显示框宽度
    int  uHeight; //显示框高度
}PLAYRECT;
typedef PLAYRECT HWND;

NET_DVR_CLIENTINFO结构中的hPlayWnd = {0}则SDK仍取流,不进行解码显示,所以仍可以录像,但是不能设置hPlayWnd = 0(即NULL),否则非法结构地址会导致调用hPlayWnd.x等去判断的时候崩溃。

Linux版本SDK开发,回放接口直接传入有效窗口句柄,在回放过程中,改变窗口大小时,需要调用NET_DVR_PlayBackControl_V40(命令:NET_DVR_CHANGEWNDRESOLUTION)通知底层播放库去获取窗口大小。Windows系统下开发不需要调用相关接口,可以自适应。

See Also

NET_DVR_PlayBackControl_V40   NET_DVR_StopPlayBack   NET_DVR_SetPlayDataCallBack_V40
NET_DVR_Login   NET_DVR_Login_V40