package com.ruoyi.device.dhsdk.module;
|
|
import com.ruoyi.device.dhsdk.lib.NetSDKLib;
|
import com.ruoyi.device.dhsdk.lib.ToolKits;
|
import com.sun.jna.Pointer;
|
|
import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
|
|
/**
|
* 实时预览接口实现
|
* 主要有 :开始拉流、停止拉流功能
|
*/
|
public class RealPlayModule {
|
/**
|
* \if ENGLISH_LANG
|
* Start RealPlay
|
* \else
|
* 开始预览
|
* \endif
|
*/
|
public static NetSDKLib.LLong startRealPlay(NetSDKLib.LLong m_hLoginHandle, int channel, int stream) {
|
NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, null, stream);
|
if (m_hPlayHandle.longValue() == 0) {
|
System.err.println("开始实时预览失败,错误码" + ToolKits.getErrorCodePrint());
|
} else {
|
System.out.println("Success to start realplay");
|
// netsdk.CLIENT_SetRealDataCallBackEx(m_hPlayHandle, CbfRealDataCallBackEx.getInstance(),null, 0x0000001f);
|
}
|
return m_hPlayHandle;
|
}
|
|
public static NetSDKLib.LLong startRealPlay1(NetSDKLib.LLong m_hLoginHandle, int channel, String path) {
|
NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE net_in_realplay_by_data_type = new NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE();
|
net_in_realplay_by_data_type.nChannelID = channel;
|
net_in_realplay_by_data_type.hWnd = null;
|
net_in_realplay_by_data_type.rType = 0;
|
net_in_realplay_by_data_type.emDataType = NetSDKLib.EM_REAL_DATA_TYPE.EM_REAL_DATA_TYPE_MP4;
|
net_in_realplay_by_data_type.szSaveFileName = path;
|
//net_in_realplay_by_data_type.cbRealData = CbfRealDataCallBackEx.getInstance();
|
NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE net_out_realplay_by_data_type = new NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE();
|
NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayByDataType(m_hLoginHandle, net_in_realplay_by_data_type, net_out_realplay_by_data_type, 5000);
|
if (m_hPlayHandle.longValue() == 0) {
|
System.err.println("开始实时预览失败,错误码" + ToolKits.getErrorCodePrint());
|
} else {
|
System.out.println("Success to start realplay");
|
}
|
return m_hPlayHandle;
|
}
|
|
/**
|
* \if ENGLISH_LANG
|
* Start RealPlay
|
* \else
|
* 停止预览
|
* \endif
|
*/
|
public static void stopRealPlay(NetSDKLib.LLong m_hPlayHandle) {
|
if (m_hPlayHandle.longValue() == 0) {
|
return;
|
}
|
boolean bRet = netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle);
|
if (bRet) {
|
m_hPlayHandle.setValue(0);
|
}
|
}
|
|
/**
|
* 实时预览数据回调函数--扩展(pBuffer内存由SDK内部申请释放)
|
*/
|
private static class CbfRealDataCallBackEx implements NetSDKLib.fRealDataCallBackEx {
|
private CbfRealDataCallBackEx() {
|
}
|
|
private static class CallBackHolder {
|
private static CbfRealDataCallBackEx instance = new CbfRealDataCallBackEx();
|
}
|
|
public static CbfRealDataCallBackEx getInstance() {
|
return CallBackHolder.instance;
|
}
|
|
@Override
|
public void invoke(NetSDKLib.LLong lRealHandle, int dwDataType, Pointer pBuffer,
|
int dwBufSize, int param, Pointer dwUser) {
|
int bInput = 0;
|
if (0 != lRealHandle.longValue()) {
|
switch (dwDataType) {
|
case 0:
|
System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为原始音视频混合数据");
|
break;
|
case 1:
|
//标准视频数据
|
System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为标准视频数据");
|
break;
|
case 2:
|
//yuv 数据
|
System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为yuv数据");
|
break;
|
case 3:
|
//pcm 音频数据
|
System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为音频数据");
|
break;
|
case 4:
|
//原始音频数据
|
System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为原始音频数据");
|
break;
|
default:
|
break;
|
}
|
}
|
}
|
}
|
}
|