项目背景:html
工做之余兼职一家公司(方向是工业4.0)给作IM系统,主要功能包括:文字、 图片、文件传输、远程协助、视频语音等等。框架
这些功能都是基于群会话, 好比工厂操做工人遇到问题,请求远程专家,这个初级专家不能解决问题,会邀请一个高级专家进来解决。socket
开发过程当中主要遇到的问题是视频和语音这一块,像其余的文字,图片,文件传输等等以前作socket的时候就接触过,基本不是问题,要注意的是Socket粘包和丢包,远程协助使用开源免费的C#版本VNC 。工具
视频和语音以为有些难 。1、是以前没有接触过,2、要同时支持 安卓和苹果手机。性能
为了用C#解决这个问题真是费劲心思,若是是其余语言也许不会这么折腾,简单记录一下。学习
一、网上查找资料找到一个GGTalk 测试
这个怎么评价呢,仅仅是作一些临时项目赚点外快,可使用一下,作成本身的产品或者想学习一下底层不推荐。编码
GGTalk虽然是开源可是他里面用到的视频语音是第三方的傲瑞科技,不开源并且是收费版本。指针
若是再研究一下傲瑞科技的解码编码,用到的是国外开源的。视频
这个和第一个比明显有优点,毕竟是大公司的出品,并且已经在不少地方运行,可是实际状况是客户现场不必定能链接外网,测试的时候个别华为手机兼容不是很好。而且这个也是收费软件。
三、FFmpeg
FFmpeg很是强大的功能包括视频采集、视频格式转换、视频抓图、视频加水印,转换数字音频、视频,并能将其转化为流的开源项目。C语言开发,免费开源采用LGPL或GPL许可证多媒体视频处理工具。
强烈推荐FFmpeg
一、免费开源
二、跨平台
三、功能强大
四、性能优异
5 不少视频处理软件在使用
优势实在太多,缺点就是须要学习成本。
特别是C#开发人员一开始使用FFmpeg有很多难度,通常用指针比较少,而FFmpeg里面会经常使用。
下一篇文章简单总结一下C#与FFmpeg的使用。
如今IM在市场上已经很成熟,为何还要在搞一个呢?
这个问题刚刚开始我也这样想,主要目的是和主框架集成。
好比专家发送一个特殊的格式链接[参数一,参数2、参数三],设备端打开这个链接,就直接跳转到框架中的功能。
再好比 操做工人在视频上各类画标记,在专家端会突出显示。
因此市场上的拿来就使用不太现实,好比上面2个需求至少UI层须要修改,既然要修改那就 趁这个机会就学习一下FFmpeg的API,
由于功能太强大了,好比后期遇到视频美化,视频分割合并、变音,这个FFmpeg都能很好处理。