海康威视设备网络sdk预览获取的码流如何转换推送到rtmp
问题描述
海康威视设备网络sdk预览获取的码流如何转换推送到rtmp
问题出现的环境背景及自己尝试过哪些方法
海康的接口文档
预览接口NET_DVR_RealPlay_V40中预览参数的播放窗口句柄(hPlayWnd)可以设置为空值,直接设置回调函数,或者调用预览接口之后,通过NET_DVR_SetRealDataCallBack、NET_DVR_SetStandardDataCallBack设置回调函数,回调获取实时流数据(前两个接口设置的回调获取的是PS封装的码流,后者获取的是标准RTP封装的码流)之后用户后续自己处理,比如二进制流方式写入文件保存成录像或者调用播放库解码显示等操作。
目前能得到码流byte数组
之前做过海康的rtsp转rtmp,用的javaCV的
FFmpegFrameGrabber 和 FFmpegFrameRecorder
现在通过获取的byte[] 怎么解析转换为rtmp,求解
相关代码
/******************************************************************************
*内部类: FRealDataCallBack * 实现预览回调数据 ******************************************************************************/class FRealDataCallBack implements HCNetSDK.FRealDataCallBack_V30 {
/**
* 预览回调 * * @param lRealHandle 当前的预览句柄
* @param dwDataType 数据类型
* @param pBuffer 存放数据的缓冲区指针
* @param dwBufSize 缓冲区大小
* @param pUser 用户数据
*/ @Override
public void invoke(int lRealHandle, int dwDataType, ByteByReference pBuffer, int dwBufSize, Pointer pUser) {
System.out.println(dwBufSize);
byte[] bytes = ref2Bytes(pBuffer, dwBufSize);
if (videoConverter == null) {
//videoConverter = new VideoConverter();
}
// PS封装的码流
if (dwDataType == HCNetSDK.NET_DVR_SYSHEAD) { //系统头
System.out.println("系统头");
} else if (dwDataType == HCNetSDK.NET_DVR_STREAMDATA) { //流数据(包括复合流或音视频分开的视频流数据)
System.out.println("码流数据");
//videoConverter.convert(bytes);
} else if (dwDataType == HCNetSDK.NET_DVR_AUDIOSTREAMDATA) { // 音频数据
System.out.println("音频数据");
} else if (dwDataType == HCNetSDK.NET_DVR_PRIVATE_DATA) { //私有数据,包括智能信息
System.out.println("私有数据,包括智能信息");
} else {
System.out.println("其他: " + dwDataType);
}
System.out.println(HexUtils.bytes2Hex(bytes));
System.out.println("-------------------------------------------------");
}
public byte[] ref2Bytes(ByteByReference buf, int dwBufSize) {
return buf.getPointer().getByteArray(0, dwBufSize); //此处为通过字节指针获取指定长度的字节数组
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
通过海康sdk的预览回调,获取的码流,转换推送到rtmp
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论