• 流媒体开发 -- C# 2013-10-03 18:22:02
    因为通过C++代码测试,可以大概了解难懂的回调函数运作机理,这对于C#编写流媒体客户端的查错打下了良好的基础。不过,C#调用C++封装的DLL,重点在于数据类型的转换。关于数据类型的转换,网络上有较多博文,大家...

    C++编写的程序,已经可以成功预览到视频了,所以接下来用C#编写流媒体客户端自信了不少。因为通过C++代码测试,可以大概了解难懂的回调函数运作机理,这对于C#编写流媒体客户端的查错打下了良好的基础。不过,C#调用C++封装的DLL,重点在于数据类型的转换。关于数据类型的转换,网络上有较多博文,大家可以参考,这里直接进入C#流媒体客户端开发了哦。

    1. C#新建windowsApplication,名为HKPlay

    2. 拖入buttonpicturebox 控件(或EditBox控件,这里做测试,URL固定)

    3. 新建类,命名hkclient.cs,编写导入海康client.dll接口函数

    using System.Runtime.InteropServices;

    namespace HKPlay

    {

     public interface IHikClientAdviseSink

        {

            int OnPosLength(UInt32 nLength);

            int OnPresentationOpened(int success);

            int OnPresentationClosed();

            int OnPreSeek(UInt32 uOldTime, UInt32 uNewTime);

            int OnPostSeek(UInt32 uOldTime, UInt32 uNewTime);

            int OnStop();

            int OnBegin(UInt32 uTime);

            int OnRandomBegin(UInt32 uTime);

            int OnContacting(string pszHost);

            int OnPutErrorMsg(string pError);

            int OnBuffering(UInt32 uFlag, UInt16 uPercentComplete);

            int OnChangeRate(int flag);

            int OnDisconnect();

        };

        public delegate int pDataRec(int sid, int iusrdata, int idatatype, IntPtr  pdata, int ilen);

        public delegate int pMsgBack(int sid, int opt, int param1, int param2);

       public  class hkclient

       {

           #region 

           [DllImport("client.dll", SetLastError = true)]

            public static extern int InitStreamClientLib();

            [DllImport("client.dll")]

            public static extern int FiniStreamClientLib();

            [DllImport("client.dll", SetLastError = true)]

            public static extern int HIKS_CreatePlayer(IHikClientAdviseSink pSink, IntPtrpWndSiteHandle, pDataRec pRecFunc, pMsgBack pMsgFunc, int TransMethod);

            [DllImport("client.dll", SetLastError = true, CharSet = CharSet.Ansi)]

            public static extern int HIKS_OpenURL(int hSession, string pszURL, int iusrdata);

            //public static extern int HIKS_OpenURL(int hSession, byte[] pszURL, int iusrdata);

            [DllImport("client.dll", SetLastError = true, CharSet = CharSet.Auto)]

            public static extern int HIKS_Play(int hSession);

            [DllImport("client.dll")]

            public static extern int HIKS_RandomPlay(int hSession, int timepos);

            [DllImport("client.dll")]

            public static extern int HIKS_Pause(int hSession);

            [DllImport("client.dll")]

            public static extern int HIKS_Resume(int hSession);

            [DllImport("client.dll")]

            public static extern int HIKS_Stop(int hSession);

            [DllImport("client.dll")]

            public static extern int HIKS_GetCurTime(int hSession, ref ushort uTime);

            [DllImport("client.dll")]

            public static extern int HIKS_ChangeRate(int hSession, int H_scale);

            [DllImport("client.dll")]

            public static extern int HIKS_Destroy(int hSession);

            [DllImport("client.dll")]

            public static extern int HIKS_GetVideoParams(int hSession, ref  int ibri, ref int icon,ref int isat, ref int ihue);

            [DllImport("client.dll")]

            public static extern int HIKS_SetVideoParams(int hSession, int ibri, int icon, int isat,int ihue);

            [DllImport("client.dll")]

            public static extern int HIKS_PTZControl(int hSession, ushort ucommand, int iparaml, intiparam2, int iparam3, int iparam4);

            [DllImport("client.dll")]

            public static extern int HIKS_SetVolume(int hSession, ushort volume);

            [DllImport("client.dll")]

            public static extern int HIKS_OpenSound(int hSession, bool bExclusive);

            [DllImport("client.dll")]

            public static extern int HIKS_CloseSound(int hSession);

            [DllImport("client.dll")]

            public static extern int HIKS_ThrowBFrameNum(int hSession, uint nNum);

            [DllImport("client.dll")]

            public static extern int HIKS_GrabPic(int hSession, string szPicFileName, ushortbyPicType);

           #endregion   }

    }

    4. 窗体Form1.cs添加如下代码

    using System.Runtime.InteropServices;

    namespace HKPlay

    { 

     public partial class Form1 : Form,IHikClientAdviseSink

       {

    Form1.cs实现接口IHikClientAdviseSink

     #region  IHikClientAdviseSink

            int IHikClientAdviseSink.OnPosLength(UInt32 nLength)

            {

     

                return 0;

            }

            int IHikClientAdviseSink.OnPresentationOpened(int success)

            {

                m_opened = success;

                return 0;

            }

            int IHikClientAdviseSink.OnPresentationClosed()

            {

                return 0;

            }

            int IHikClientAdviseSink.OnPreSeek(UInt32 uOldTime, UInt32 uNewTime)

            {

                return 0;

            }

            int IHikClientAdviseSink.OnPostSeek(UInt32 uOldTime, UInt32 uNewTime)

            {

                return 0;

            }

            int IHikClientAdviseSink.OnStop()

            {

                return 0;

            }

            int IHikClientAdviseSink.OnBegin(UInt32 uTime)

            {

                return 0;

            }

            int IHikClientAdviseSink.OnRandomBegin(UInt32 uTime)

            {

                return 0;

            }

            int IHikClientAdviseSink.OnContacting(string pszHost)

            {

                return 0;

            }

            int IHikClientAdviseSink.OnPutErrorMsg(string pError)

            {

                return 0;

            }

            int IHikClientAdviseSink.OnBuffering(UInt32 uFlag, UInt16 uPercentComplete)

            {

                return 0;

            }

            int IHikClientAdviseSink.OnChangeRate(int flag)

            {

                return 0;

            }

            int IHikClientAdviseSink.OnDisconnect()

            {

                return 0;

            }

            #endregion

     

    5. Form1.cs中初始化添加InitStreamClientLib(),关闭窗口添加FiniStreamClientLib()

    6. 编写Button事件

     int nRet;

                string pszURL = "rtsp://15.12.111.70/15.12.111.40:8000:HIK-DS8000HC:11:0:admin:12345/av_stream";

                if (m_hSesssion >= 0)

                {

                    nRet = hkclient.HIKS_Stop(m_hSesssion);

                    m_opened = -1;

                }

               pDataRec MypDataRec = new pDataRec(pDataRec1); ///回调函数在C#创建委托,需实例化

              pMsgBack MypMsgBack = new pMsgBack(pMsgBack1);

                m_hSesssion = hkclient.HIKS_CreatePlayer(null, pictureBox1.Handle, MypDataRec,MypMsgBack, 0);

                if (m_hSesssion != -1)

                {

                    nRet = hkclient.HIKS_OpenURL(m_hSesssion, pszURL, 0);

                    if (nRet != 1)

                    {

                        hkclient.HIKS_Destroy(m_hSesssion);

                        m_hSesssion = -1;

                        m_opened = -1;

                        return;

                    }

                }

                while (m_opened < 0)

                {

                    Thread.Sleep(100);

                }

              

                  nRet = hkclient.HIKS_Play(m_hSesssion);

                if (nRet != 1)

                {

                    hkclient.HIKS_Stop(m_hSesssion);

                    m_hSesssion = -1;

                    m_opened = -1;

                }

    7. 编写回调函数

    #region  pDataFunc ,pMsgBack

            private int pDataRec1(int sid, int iusrdata, int idatatype, IntPtr  pdata, int ilen)

            {

     

                using (FileStream fs = new FileStream("D:\\1.264", FileMode.OpenOrCreate))

                {

                    BinaryWriter bw = new BinaryWriter(fs);

                    byte[] bytefs = new byte[ilen];

                    Marshal.Copy(pdata, bytefs, 0, ilen);

                    bw.Write(bytefs);

                    bw.Flush();

                    bw.Close();

                }

                return 0;

     

            }

            private int pMsgBack1(int sid, int opt, int param1, int param2)

            {

                Console.WriteLine("msgBack:sid={0},opt={1},param1={2},param2={3}", sid, opt, param1, param2);

                //int len = -1;

                switch (opt)

                {

                    case 1:

                        break;

                    case 2:

                        m_opened = param1;

                        break;

                    case 3:

                        break;

                    case 4:

                        break;

                    case 5:

                        break;

                    case 6:

                        break;

                    case 7:

                        //  this.m_Pause = 1;

                        break;

                    case 8:

                        break;

                    case 9:

                        break;

                    case 10:

                        break;

                    case 11:

                        break;

                    case 12:

                        break;

                    case 13:

                        break;

                    case 14:

                        break;

                    default:

                        break;

                }

                return 0;

            }

            #endregion

    注意:

    1)将client.dll,playm4.cll放到debug目录下,playCtrl.dll放到与bin同目录中。

    展开全文
  • 目前使用C# .net core 来实现国标gb28181标准的摄像头播放、ptz云台控制、视频回放等视频监控功能,项目可运行于linux/docker/.net core环境...
  • C# 流媒体 2010-08-12 01:29:00
    9月份前所有问题搞定;10月份进入外贸和业务
  • C#实例.net_经典例子400个 2018-07-30 17:04:25
    一共470多例winform 界面特效的源码。 窗体与界面设计...... 实例001 带历史信息的菜单 10 ...实例003 像开始菜单一样漂亮的菜单... 14 实例004 任务栏托盘菜单 15 实例005 可以拉伸的菜单界...
  • 目前使用C# .net core 来开发sip协议实现国标gb28181摄像头播放、ptz云台控制、视频回放等视频监控功能,全网也很难找得到完整教程,我也是经过半年多的资料...1、在淘宝购买一个linux ces服务器作为流媒体测试机...
  • 网上C#调用FFmpeg的API例子很少,大多是C/C++的,因为ffmpeg.autogen的名称与FFmpeg完全一样,所以C#中可以直接复制C/C++代码,然后在FFmpeg的方法前加入 ffmpeg. 即可。
  • C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。全书分6篇共25章,主要...
  • C#示例源码 C#示例 C#源码 C#示例源代码 C#代码 C#代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
  • C#示例源码 C#示例 C#源码 C#示例源代码 C#代码 C#代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
  • C#代码创建Xml文件 2016-10-21 09:37:04
    扩展标记语言XML(eXtensible Markup Language),是由W3C组织制定的。...C#作为一种新型的程序语言,是.Net框架的一个重要组成部分,他和XML的关系颇深。本文就从一个方面来探讨一下这二者的关系。即:看用C#如何来
  • 原文:c#万能视频播放器(附代码c#万能视频播放器  本人之前很多的文章中均提到了使用libvlc为播放器内核制作的播放器,也许有些朋友对此感兴趣,于是我用c#写了一个调用libvlc api实现的万能视频播放器,与大家...
  • 中文名称:程序天下:C#2.0实例自学手册:200个例子 教程/光盘资源类型:ISO版本:电子教程/随书光盘发行时间:2008年01月地区:大陆语言:普通话简介:【作 者】张立 【丛 书 名】 程序天下系列 【出 版 社】 电子...
  • 利用Visual C#开发一个媒体播放器
  • 主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合...操作、加密、解密及解压缩文件、C#与Word互操作、高效应用Excel、基本图形绘制、图像处理技术、常用图表应用、动画处理技术、音频与视频...
  • nginx+ffmpeg实现流媒体 2019-08-09 06:26:35
    初步记录实现流媒体播放。 流媒体身边太常见了,比如网易云音乐、qq音乐、爱奇艺、哔哩哔哩之类的,只要是媒体数据在服务器上,动态的传输到客户端进行播放的都算是流媒体。实现流媒体的视频播放是最简单的,表现得...
  • RTMP流媒体播放过程 2018-07-26 21:54:30
      RTMP协议规定:第一步,建立一个网络...播放一个RTMP协议的流媒体:1.握手 2.建立连接 3.建立流 4.播放 RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶...
  • 流媒体之MP4码流解析。 2018-03-02 10:52:24
    最近在做安卓的流媒体。mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime。以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的“媒体...
  • 实例是参考其他网友提供的代码,经过本人综合修改所成,经本人亲测可以正常运行。本实例实现了对文本消息与图片消息的自动回复,并将上传到微信服务器中的图片上传到本地服务器中。希望给苦苦寻找.net代码开发微信...
  • 书名:《C#开发实战1200例(第I卷)》(清华大学出版社.王小科.王军) PDF格式扫描版,全书分为6篇25章,共888页。2011年1月出版。 注:原电子版图书无书签,为阅读方便,本人重新排列页码并添加了详细完整的书签。 全书...
1 2 3 4 5 ... 20
收藏数 4,025
精华内容 1,610