调用海康SDK中的语音对讲导致程序崩溃
public delegate void VOICEDATACALLBACKV30(int lVoiceComHandle, IntPtr pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, System.IntPtr pUser);
[DllImport("HCNetSDK")]
public static extern int NET_DVR_StartVoiceCom_V30(int lUserID, uint dwVoiceChan, bool bNeedCBNoEncData, VOICEDATACALLBACKV30 fVoiceDataCallBack, IntPtr pUser);
public void VoiceDataCallBack(int lVoiceComHandle, IntPtr pRecvDataBuffer, uint dwBufSize, byte byAudioFlag, IntPtr pUser)
{
try
{
byte[] sString = new byte[dwBufSize];
Marshal.Copy(pRecvDataBuffer, sString, 0, (Int32)dwBufSize);
if (byAudioFlag == 0)
{
//将缓冲区里的音频数据写入文件 save the data into a file
string str = "PC采集音频文件.pcm";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)dwBufSize;
fs.Write(sString, 0, iLen);
fs.Close();
}
if (byAudioFlag == 1)
{
//将缓冲区里的音频数据写入文件 save the data into a file
string str = "设备音频文件.pcm";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)dwBufSize;
fs.Write(sString, 0, iLen);
fs.Close();
}
}
catch (Exception e)
{
Debug.Log(e.Message);
}
}
private bool m_bTalk = false;
private int lVoiceComHandle = -1;
// public Image VioceImg;
//public Sprite Open, Close;
public MicInput MicInput;
private bool MicInputb=false;
public void btnVioceTalk_Click()
{
if (m_bTalk == false)
{
MicInputb = true;
// VioceImg.sprite = Close;
//开始语音对讲 Start two-way talk
CHCNetSDK.VOICEDATACALLBACKV30 VoiceData = new CHCNetSDK.VOICEDATACALLBACKV30(VoiceDataCallBack);//预览实时流回调函数
lVoiceComHandle = CHCNetSDK.NET_DVR_StartVoiceCom_V30(m_lUserID, 1, true, VoiceData, IntPtr.Zero);
//bNeedCBNoEncData [in]需要回调的语音数据类型:0- 编码后的语音数据,1- 编码前的PCM原始数据
if (lVoiceComHandle < 0)
{
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
string str = "NET_DVR_StartVoiceCom_V30 failed, error code= " + iLastErr;
Debug.Log(str);
// MessageBox.Show(str);
return;
}
else
{
// btnVioceTalk.Text = "Stop Talk";
m_bTalk = true;
}
}
else
{
MicInputb = false;
// Img.fillAmount = 0;
// VioceImg.sprite = Open;
//停止语音对讲 Stop two-way talk
if (!CHCNetSDK.NET_DVR_StopVoiceCom(lVoiceComHandle))
{
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
// str = "NET_DVR_StopVoiceCom failed, error code= " + iLastErr;
// MessageBox.Show(str);
return;
}
else
{
// btnVioceTalk.Text = "Start Talk";
m_bTalk = false;
}
}
}