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