首页  编辑  

海康威视保存的视频头信息不正确的处理方法

Tags: /计算机文档/多媒体/   Date Created:
海康威视摄像头,提供了SDK,其函数NET_DVR_SaveRealData,可以保存媒体流为mp4文件,但保存的媒体流头信息不正确。原因是其音轨部分的timestamp不正确,导致文件在windows资源管理器中无法查看预览,用VLC播放也不正常,直接给手机播放也播放不了。但是用QQ影音可以正常播放。NET_DVR_SaveRealData 保存的视频,无法直接在HTML中用Video Tag播放,因为他用的是mpeg2-ps码流格式。
处理方法:用ffmpeg去掉音频即可。
ffmpeg -v error -t 0 -i %dest%\%%A -vcodec copy %dest%\record.mp4
另外一个方法是,先提取音轨再合并编码: 
ffmpeg -i input.mp4 -acodec copy -f mulaw out.tmp
ffmpeg -f mulaw -ar 8k -i out.tmp -i input.mp4 -vcodec copy out.mp4 
如果你不想麻烦进行转码,可以使用
NET_DVR_SaveRealData_V30 API,这个函数支持保存的编码格式,用STREAM_3GPP的模式,保存下来的mp4文件,就是标准的mp4了,可以直接在H5的Video Tag中播放。

NET_DVR_SaveRealData_V30

按指定的目标封装格式捕获数据并存放到指定的文件中。

BOOL NET_DVR_SaveRealData_V30(
  LONG    lRealHandle,
  DWORD   dwTransType,
  char    *sFileName
);

Parameters

lRealHandle
[in] NET_DVR_RealPlay_V40等接口的返回值
dwTransType
[in] 存储的码流封装格式,见STREAM_TYPE定义
enum STREAM_TYPE{
  STREAM_PS     = 0x1,
  STREAM_3GPP   = 0x2
}
STREAM_PS
PS文件层,主要用于存储,也可用于传输
STREAM_3GPP
3GPP文件层,用于存储
sFileName
[in] 文件路径指针,绝对路径,包括文件名

Return Values

TRUE表示成功,FALSE表示失败。接口返回失败请调用NET_DVR_GetLastError获取错误码,通过错误码判断出错原因。

Remarks

  • 该接口目前仅对支持RTSP协议取流的设备有效。
  • V5.0.3.2或以后版本,通过该接口保存录像,保存的录像文件数据超过文件最大限制字节数(默认为1024MB),SDK会自动切片,即新建文件进行保存,文件名命名规则为“在接口传入的文件名基础上增加数字标识(例如:*_1.mp4、*_2.mp4)”。可以调用NET_DVR_GetSDKLocalCfgNET_DVR_SetSDKLocalCfg(配置类型:NET_DVR_LOCAL_CFG_TYPE_GENERAL)获取和设置切片模式和文件最大限制字节数。

See Also

NET_DVR_RealPlay_V40  NET_DVR_StopSaveRealData