public Form1()
        {
            sdrc = new STREAM_DIRECT_READ_CALLBACK(STREAM_DIRECT_READ_CALLBACK1);
            HikVisionSDK.RegisterStreamDirectReadCallback(sdrc, ChannelHandle);
            //初始化串口
            InitializeComponent();
            interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateTextBox);
            serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }            interfaceUpdateHandle1 = new HandleInterfaceUpdateDelegate(UpdateTextBox1);
            serialPort2.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort2_DataReceived);
            if (!serialPort2.IsOpen)
            {
                serialPort2.Open();
            }            //设置默认的视频格式
            HikVisionSDK.SetDefaultVideoStandard(VideoStandard_t.StandardPAL);            //初始化板卡
            if (HikVisionSDK.InitDSPs() < 0)
            {
                MessageBox.Show("初始化DSPs失败!!");
                return;
            }            if (HikVisionSDK.GetTotalDSPs() == 0)
            {
                MessageBox.Show("没有可用的通道!!您是否已经启动服务器端?");
                return;
            }
            //打开通道
            ChannelHandle = HikVisionSDK.ChannelOpen(1);
            
            //设置编码帧结构、帧率
            HikVisionSDK.SetIBPMode(ChannelHandle, 100, 2, 1, 25);
            
            //设置编码图像质量
            HikVisionSDK.SetDefaultQuant(ChannelHandle, 15, 15, 20);
            //HikVisionSDK.RegisterStreamDirectReadCallback(new STREAM_DIRECT_READ_CALLBACK(STREAM_DIRECT_READ_CALLBACK1), ChannelHandle);
                        
        }
        //出发读取串口数据
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            System.Threading.Thread.Sleep(100);
            byte[] ReadBuffer = new byte[serialPort1.ReadBufferSize];
            serialPort1.Read(ReadBuffer, 0, ReadBuffer.Length);
            this.Invoke(interfaceUpdateHandle, new string[] { Encoding.UTF8.GetString(ReadBuffer) });
            serialPort1.DiscardInBuffer();
            //串口数据
            MessageBox.Show(txrReceive.Text);            if (CaptureState == 1)
            {
                if (tiaoma == txrReceive.Text)
                {
                    //停止
                    CaptureState = 0;
                    using (FileStream fs = new FileStream("C:\\hik.264", FileMode.Append))
                    {
                        BinaryWriter bw = new BinaryWriter(fs);
                        bw.Write(endCode);
                        bw.Close();
                    }
                    tiaoma = "";
                }
                else
                {
                    //异常
                }
            }
            else
            {
                
                //开始
                using (FileStream fs = new FileStream("C:\\hik.264", FileMode.Create))
                {
                    BinaryWriter bw = new BinaryWriter(fs);
                    bw.Write(FileHeader);    //报错位置  我认为是认为STREAM_DIRECT_READ_CALLBACK1没有执行导致
                    bw.Flush();
                    bw.Close();
                }                CaptureState = 1;
            }
        }        public int STREAM_DIRECT_READ_CALLBACK1(int channelNum, IntPtr DataBuf, int Length, FrameType_t frameType, IntPtr context)
        {
            //int status = 0;
            //HikServer.MP4_ServerWriteDataEx(channelNum, DataBuf, Length, (int)frameType, status, 0);
            //return 0;
            //测试
            MessageBox.Show("调用回调函数!STREAM_DIRECT_READ_CALLBACK1");            int status = 0;            if (frameType > 0)
            {
                if (frameType == FrameType_t.PktSysHeader)
                {
                    FileHeader = new byte[Length];
                    Marshal.Copy(DataBuf, FileHeader, 0, Length);
                    FileHeaderLen = Length;
                }                if (frameType == FrameType_t.PktIFrames || frameType == FrameType_t.PktSubIFrames)
                    status = 1;
                else
                    status = 0;                if (frameType == FrameType_t.PktMotionDetection || frameType == FrameType_t.PktOrigImage)
                    return 0;
            }            if (Length == 0)
            {
                //TRACE("no data ?\n");
                return 0;
            }            if (frameType == FrameType_t.PktAudioFrames)
            {
                WriterVideoCapture(Length, DataBuf);
                //写文件
                //    _write(gFileHandleQcif[channelNum],DataBuf,Length);
                //HikServer.MP4_ServerWriteDataEx(channelNum, DataBuf, Length, (int)frameType, status, 1);
                //    _write(gFileHandle[channelNum], DataBuf, Length);
                HikSerdll.MP4_ServerWriteDataEx(channelNum, DataBuf, Length, (int)frameType, status, 0);
            }
            else if (frameType == FrameType_t.PktSubIFrames || frameType == FrameType_t.PktSubPFrames || frameType == FrameType_t.PktSubBBPFrames || frameType == FrameType_t.PktSubSysHeader)
            {
                //    _write(gFileHandleQcif[channelNum],DataBuf,Length);
                HikSerdll.MP4_ServerWriteDataEx(channelNum, DataBuf, Length, (int)frameType, status, 1);
            }
            else
            {
                WriterVideoCapture(Length, DataBuf);
                HikSerdll.MP4_ServerWriteDataEx(channelNum, DataBuf, Length, (int)frameType, status, 0);
            }            return 0;        }        /// <summary>
        /// 将数据流写入视频文件
        /// </summary>
        /// <param name="length"></param>
        /// <param name="dataBuf"></param>
        private void WriterVideoCapture(int length, IntPtr dataBuf)
        {
            if (CaptureState == 1)
            {
                using (FileStream fs = new FileStream("C:\\hik.264", FileMode.Append))
                {
                    BinaryWriter bw = new BinaryWriter(fs);                    byte[] byteBuf = new byte[length];
                    Marshal.Copy(dataBuf, byteBuf, 0, length);
                    bw.Write(byteBuf);
                    bw.Flush();
                    bw.Close();
                }
            }
        }        private void UpdateTextBox(string text)
        {
            MessageBox.Show("调用回调函数!UpdateTextBox");
            txrReceive.Text = text;
        }
UpdateTextBox 可以调到    但STREAM_DIRECT_READ_CALLBACK1 就是不执行   大家帮我看看是哪出问题了   方法是从C++的sdk调的   确定已经导进来。