在做视频的时候遇到点问题,主要是获取的数据错误,无法用Hikvision播放器播放 请各位高手给看下代码:private void button3_Click(object sender, EventArgs e)
{
using (FileStream fs = new FileStream("c:hik.264",FileMode.Create))
{
BinaryWriter bw = new BinaryWriter(fs);
HCNetSdkDllInvoke.STREAM_DIRECT_READ_CALLBACK1 str = new HCNetSdkDllInvoke.STREAM_DIRECT_READ_CALLBACK1(STREAM_DIRECT_READ_CALLBACK1);
if (HCNetSdkDllInvoke.DSP_StartVideoCapture(0) == 0)
{
int temp = HCNetSdkDllInvoke.RegisterStreamDirectReadCallback(str, this.Handle);
}
}
}
//是否开始捕获文件 0 未启用 1 启用
volatile int CaptureState; public int STREAM_DIRECT_READ_CALLBACK1(int channelNum, IntPtr DataBuf, int Length, DataType.FrameType_t frameType, IntPtr context)
{
//用于存放头文件
byte[] FileHeader;
//文件头长度
int FileHeaderLen; if (frameType == DataType.FrameType_t.PktSubSysHeader)
{
FileHeader = new byte[Length];
FileHeaderLen = Length;
return 0;
}
else
{
CaptureState = 1;
WriterVideoCapture(Length, DataBuf);
return 0;
}
} private void WriterVideoCapture(int length, IntPtr dataBuf)
{ if (CaptureState == 1)
{
using (FileStream fs = new FileStream("C:hik.264",FileMode.Append,FileAccess.Write))
{
BinaryWriter bw = new BinaryWriter(fs);
byte[] byteBuf = new byte[length];
//Marshal.Copy(dataBuf, byteBuf, 0, length);
System.Runtime.InteropServices.Marshal.Copy(dataBuf, byteBuf, 0, length);
bw.Write(byteBuf,0,length);
bw.Flush();
bw.Close();
}
}
}
{
using (FileStream fs = new FileStream("c:hik.264",FileMode.Create))
{
BinaryWriter bw = new BinaryWriter(fs);
HCNetSdkDllInvoke.STREAM_DIRECT_READ_CALLBACK1 str = new HCNetSdkDllInvoke.STREAM_DIRECT_READ_CALLBACK1(STREAM_DIRECT_READ_CALLBACK1);
if (HCNetSdkDllInvoke.DSP_StartVideoCapture(0) == 0)
{
int temp = HCNetSdkDllInvoke.RegisterStreamDirectReadCallback(str, this.Handle);
}
}
}
//是否开始捕获文件 0 未启用 1 启用
volatile int CaptureState; public int STREAM_DIRECT_READ_CALLBACK1(int channelNum, IntPtr DataBuf, int Length, DataType.FrameType_t frameType, IntPtr context)
{
//用于存放头文件
byte[] FileHeader;
//文件头长度
int FileHeaderLen; if (frameType == DataType.FrameType_t.PktSubSysHeader)
{
FileHeader = new byte[Length];
FileHeaderLen = Length;
return 0;
}
else
{
CaptureState = 1;
WriterVideoCapture(Length, DataBuf);
return 0;
}
} private void WriterVideoCapture(int length, IntPtr dataBuf)
{ if (CaptureState == 1)
{
using (FileStream fs = new FileStream("C:hik.264",FileMode.Append,FileAccess.Write))
{
BinaryWriter bw = new BinaryWriter(fs);
byte[] byteBuf = new byte[length];
//Marshal.Copy(dataBuf, byteBuf, 0, length);
System.Runtime.InteropServices.Marshal.Copy(dataBuf, byteBuf, 0, length);
bw.Write(byteBuf,0,length);
bw.Flush();
bw.Close();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货