一些基本概要
1 市面流行的音视频产品,都包含一对一、一对多、多对多通话,云端录制等这些基本功能,有些厂商支持本地服务录制。
2 本地服务录制,云端录制区别
两个录制区别在于,本地服务端录制的 SDK 要求部署在 Linux 服务器上,需要自己运维。而云端录制无需部署 Linux 服务器,只需调用API即可。
3 单流录制和混流录制模式区别
单流录制模式,一个录制进程下,同时录制多条音频流和视频流,将输出多个录制音频和视频文件;混流录制模式,一个录制进程下,同时录制多条音频流和视频流,仅输出一个录制音频或视频文件。
4 app增量大小
意为安装SDK后导出的app包体积增量,计算方式跟系统平台有关,如ARM、ARM64、x86、x86_64等。
5 一些视频编码格式
常用的包括h264、h265、vp8,简单区别在于
h264,最常用的视频编码,分辨率最高支持4k;
h265,h265 可以说是 h264 的继任者,效率要高很多,相同画质下 h265 比 h264 节省了大约一倍的带宽;
vp8,是Google开源的一种编码方式。
更多的区别可参考 链接1,链接2
6 分辨率越高越好?
较高的分辨率也需要较高的码率来支撑,如果分辨率选择 1280 x 720,但码率却指定为 200kbps,画面就会有大量的马赛克。推荐参考 分辨率码率参照表 进行设置。
7 帧率越高越好?
由于摄像头采集的画面是曝光阶段中所有现实物体的完整映射,所以并不是帧率越高,感官就越流畅,这一点跟游戏里的FPS是不一样的。恰恰相反,帧率过高,会拉低每帧画面的画质,也会减少摄像机的曝光时间,效果可能会更差。
8 码率越高越好?
较高的码率也需要较高的分辨率来匹配,对于 320 x 240 这样分辨率,1000kbps 的码率就很浪费了,推荐参考 分辨率码率参照表 进行设置。
1.音视频方案对比
本次调研分两种方案,一是自研,包括app和后端代码;二是选取了市面上8家流行的产品方案,即腾讯、阿里、网易云信、声网、anyrtc、ZEGO即构、UCCloud、融云,这些厂商对比主要包括功能、价格、开发友好度方面。
1.1 自研
自研主要是利用成熟的开源项目进行二次开发,开源项目音视频通话和视频录制功能是独立的,需要开发人员自行组合开发。其中音视频通话有开源SDK,视频录制相关只能利用系统现有API开发
1.1.1 开源音视频通话SDK
流行的音视频通话开源框架支持server、web、android、iOS。本报告选取了GitHub上star数较多、更新活跃的框架。国外流行框架 jitsi meet,国内为 OpenIM。下表数据截止2023-01-15
服务端开发语言 | Java | golang |
star数 | 19.1k | 10.1k |
GitHub链接 | GitHub - jitsi/jitsi-meet: Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application. | GitHub - openimsdk/open-im-server: IM Chat |
开发文档 | Introduction | Jitsi Meet | OpenIM Docs |
去年更新频率 |
1.1.2 视频录制
至于录频,不使用第三方收费SDK的话,则需要开发人员利用系统原生API自行开发,涉及到的问题较多,包括录制、压缩、裁剪、导出、视频参数定义、权限定义、数据长链接、音频参数定义、消息广播等,录完后还需要存储在app本地,并上传到服务器,这里会牵涉到文件的断点续传。当涉及多个服务器时,还需要考虑服务器之间的消息同步。
结论:在自研时,由于涉及到多媒体视频的录制、上传、存储、日常运维、安全处理等,开发成本大、后期维护成本高,面临的不可控风险较多,所以不建议自研。
2.1 市面主流音视频通话产品分析对比
本次对比包括8家产品,一些都有的基本功能,如支持水印等,表中不展示。标红内容为需要注意的点。
视频通话和云端录制价格由分辨率决定。产品特点对比
腾讯云 阿里云 网易云信 声网 anyrtc ZeGo UCloud 融云
链接 | https://www.tencentcloud.com/ | 音视频通信(RTC)-阿里云帮助中心 | https://netease.im | https://www.shengwang.cn/ | 实时音视频_实时消息_实时互动_私有化-anyRTC | ZEGO即构科技 - 帮助全球企业即刻构建语音视频通讯能力 | UCloud文档中心 | 实时音视频-音视频通话SDK-融云RongCloud |
计费方式 | 扣除10000分钟免费时长后,以实际使用分钟数计费 | 以实际使用分钟数计费 | 按月计费,月账单最小结算单位为千分钟,不满 1 千分钟部分按照 1 千分钟计算 | 扣除10000分钟免费时长后,以实际使用分钟数计费 | 扣除10000分钟免费时长后,以实际使用分钟数计费 | 以实际使用分钟数计费 | 扣除10000分钟免费时长后,以实际使用分钟数计费 | 费用组成有两部分:月功能使用费 + 超量费用,音视频通话和云端录制的月费为980元/月。 音视频通话包含含 200,000 分钟免费时长 |
视频通话价格 | 官网价格为美元 HD 3.99(约28元)/1000 分钟
8.99(约63元)/1000 分钟
15.99(约112元)/1000 分钟
35.99(约252元)/1000 分钟 | 480P及以下 12 元/1000 分钟
24 元/1000 分钟
90 元/1000 分钟 | SD 15元/1000 分钟 HD 25元/1000 分钟
90元/1000 分钟 | HD 28 元/1000 分钟
63 元/1000分钟
112 元/1000分钟 2K+ 252 元/1000分钟 | HD 16 元/1000 分钟 Full HD, 32 元/1000分钟 2K 56 元/1000分钟 2K+ 128 元/1000分钟 | SD 12 元/1000 分钟
25 元/1000 分钟 HD+ 98 元/1000 分钟 2K 112 元/1000 分钟 2K+ 252 元/1000 分钟 | SD 15 元/1000 分钟 HD 25 元/1000 分钟 Full HD 50 元/1000 分钟 | 标清 16 元/1000 分钟
26 元/1000 分钟
66 元/1000 分钟
106 元/1000 分钟
226 元/1000分钟 |
视频存储方式 | 腾讯的云点播平台 | 阿里云 | 网易云信点播平台 | 1.声网自有平台 2.支持第三方平台。 Amazon S3 阿里云 腾讯云 七牛云 金山云 Microsoft Azure 谷歌云 华为云 百度智能云 | 1.私有存储-本地私有存储服务 2.支持部分第三方平台 阿里云 七牛云 | 1.即构自有平台 2.支持第三方平台。 AWS S3 阿里云 腾讯云 七牛云 阿里云 Vod(仅支持 MP4、FLV) 华为云 | UC云自有平台 | 1.融云自有平台 2.支持部分第三方平台 AWS S3 阿里云 腾讯 七牛云 |
录频支持方式 | 云端录制 本地服务录制(暂未完全开放,需要联系客服开通) | 云端录制 | 云端录制 | 云端录制 本地服务录制 | 云端录制 | 云端录制 本地服务录制 | 云端录制 | 云端录制 |
分辨率档位 | 高清(HD) 分辨率 ≤ 1280 × 720 全高清(Full HD) 1280 × 720 < 分辨率 ≤ 1920 × 1080 2K 1920 × 1080< 分辨率 ≤ 2560 × 1440 4K 2560 × 1440< 分辨率 ≤ 4096 × 2160 | 480P 分辨率 ≤640 × 480
640 × 480< 分辨率 ≤ 1280 × 720
1280 × 720< 分辨率 ≤ 1920 × 1080 | SD,480P 分辨率 ≤640 × 480
640 × 480< 分辨率 ≤ 1280 × 720
1280 × 720< 分辨率 ≤ 1920 × 1080 | 高清(HD) 分辨率 ≤ 1280 × 720(带宽:约420k左右) 全高清(Full HD) 1280 × 720 < 分辨率 ≤ 1920 × 1080 2K 1920 × 1080< 分辨率 ≤ 2560 × 1440 2K+ 2560 × 1440< 分辨率 ≤ 4096 × 2160 | 高清(HD) 分辨率 ≤ 1280 × 720 全高清(Full HD) 1280 × 720 < 分辨率 ≤ 1920 × 1080 2K 1920 × 1080< 分辨率 ≤ 2560 × 1440 2K+ 2560 × 1440< 分辨率 ≤ 4096 × 2160 | 标清 SD 分辨率 ≤ 480 x 360 高清HD 480 x 360 < 分辨率 ≤ 1280 × 720 超清HD+ 1280 × 720 < 分辨率 ≤ 1920 × 1080 超清2K 1920 × 1080 < 分辨率 ≤2560 × 1440 2K+ 2560 × 1440< 分辨率 ≤ 4096 × 2160 | 标清SD 分辨率 ≤ 640 × 360 高清HD 1280 × 720 <分辨率 ≤ 1280 × 720 超高清Full HD 1280 × 720 < 分辨率 ≤ 1920 × 1080 2K 1920 × 1080< 分辨率 ≤ 2560 × 1440 2K+ 2560 × 1440< 分辨率 ≤ 4096 × 2160 | 标清480P 分辨率 ≤640 × 480
640 × 480< 分辨率 ≤ 1280 × 720 超高清1080P 1280 × 720< 分辨率 ≤ 1920 × 1080 2K 1920 × 1080< 分辨率 ≤ 2560 × 1440 2K+ 2560 × 1440< 分辨率 ≤ 4096 × 2160 |
使用该产品厂商 | 好未来、新东方、VIP Kid等 | 优酷来疯、学信网、VIP陪练等 | 有道乐读、途牛旅游、蔚来汽车、西东方、快速问医生、智联招聘、OPPO等 | 小米、众安保险、陌陌等 | 官网未详细给出 | 好未来、花椒直播、映客直播、酷狗KTV、翼卡车联网等 | 爱奇艺、乐心医疗等 | 汽车之家、携程、优酷来疯等 |
产品特色 | 1.每月免费10,000分钟时长,扣除时不是按照1:1,此处说明 2. 支持价格计算器,用于缴费预估 | --- | --- | 每月免费10,000分钟时长,按顺序1:1扣除,此处说明 | 每月免费10,000分钟时长,按顺序1:1扣除,此处说明 | --- | 每月免费10,000分钟时长 官网未说明扣除方式,需要咨询客服 | 1.每月免费200,000分钟时长 2.后台分开发环境、生产环境,开发环境免费使用,限量 1万分钟免费通话时长,免费通话时长可用于测试音视频通话、音视频直播、云端录制。 生产环境付费使用,需要预存月功能使用费,才能开通服务。 此处详解 |
云端录制价格 | 官网价格为美元 HD 5.99(约42元)/1000 分钟
13.49(约98元)/1000 分钟
23.99(约168元)/1000 分钟
53.99(约378元)/1000 分钟 | 云端录制价格计算较复杂,可点击此链接查看 | SD 15 元 / 1000 分钟
25 元 / 1000 分钟 HD+ 90 元 / 1000 分钟 | HD 36 元/1000分钟
81 元/1000分钟
144 元/1000分钟
324 元/1000分钟 | 价格未展示在官网,需要联系客服。 点击此链接查看 | 云端录制最高支持1080P,以上就需要联系客服。 单流录制、混流录制价格不同。 单流模式 6 元/1000 分钟
12.5 元/1000 分钟 HD+ 49 元/1000 分钟 混流模式 18 元/1000 分钟 HD 38 元/1000 分钟 HD+ 148 元/1000 分钟 | SD 15 元/1000 分钟
25 元/1000 分钟 Full HD 50 元/1000 分钟
100 元/1000 分钟
245 元/1000 分钟 | 标清 16 元/1000 分钟
26 元/1000 分钟
66 元/1000 分钟
106 元/1000 分钟
226 元/1000分钟 |
2.2 开发维度对比
主要聚焦在开发文档的更新频率、有无测试环境等。在查阅资料过程中,只有融云支持区分开发环境和生产环境。
在比较SDK大小时,有的官网未给出SDK的直接大小,只给了app增量大小;由于android端SDK大小跟系统架构有关,所以取中间值。
关于SDK大小,也会跟系统版本和SDK自身版本相关,下表相关数据仅供参考。
SDK支持最低版本 | android 4.1 iOS 9 | android 4.1 iOS 8 | android 4.3 iOS 9 | android 4.1 iOS 9 | android 4.1 iOS 9 | android 4.4 iOS 9 | android 4.1 iOS 9 | android 4.4 iOS 9 |
SDK大小 | android 30m iOS 39m | android 18.7m iOS 21.7m | android 32.8m iOS 32.8m | 官网未给出具体大小,只有app引入后的增量范围,需要实测,此处了解 4.61 ~ 13.94 m | 官网未给出具体大小,只有app引入后的增量范围,需要实测,此处了解 4.81 ~ 12.46 m | 官网未给出具体大小,只有app引入后的增量范围,需要实测,此处了解 6.37 ~ 7.26 m | 官网未直接给出相关信息,需要到GitHub下载demo后对比 | 官网未给出具体大小,只有app引入后的增量范围,需要实测,此处了解 8.6 ~ 20.1 m |
开发文档 | https://www.tencentcloud.com/zh/document/product/647 | https://help.aliyun.com/product/61399.html | https://doc.yunxin.163.com/nertc/docs/home-page?platform=linux | https://docs.agora.io/cn/video-call-4.x/landing-page?platform=Android | https://docs.anyrtc.io/cn/Video/product_video | https://doc-zh.zego.im/article/5416 | https://docs.ucloud.cn/urtc/SDK/VideoStart | https://doc.rongcloud.cn/home/index |
传输协议 | UDP私有协议 | WebRTC | UDP私有协议 | WebRTC+UDP 私有协议 | WebRTC+UDP 私有协议 | WebRTC+UDP 私有协议 | WebRTC+UDP私有协议 | WebRTC |
视频编码 | H264/AVC | H264/AVC | H264/AVC | H264/AVC H265 VP8 | H264/AVC VP8 | H264/AVC H265 VP8 | H264/AVC VP8 | H264/AVC |
简要结论:通过是否有每月免费分钟数、视频分辨率档位、第三方云存储厂商支持度、视频编码格式、开发文档详细程度和更新频率等维度的比较,推荐声网。
##############################################################################################
3. web端 SDK数据补充,主要是声网
3.1 功能支持
支持美颜、屏幕共享,支持自定义摄像头视频源、屏幕共享视频源、文件视频源。
声网web SDK暂不支持修改原始音视频数据,如变声操作。app端支持
详情
3.2 浏览器支持度
支持为主流浏览器,
桌面平台包括macOS、Windows、ChromeOS,不支持linux端
移动端支持情况
android与应用版本和设备硬件有关,iOS只与系统版本有关
3.3 Web SDK视频通话流程
频道是SDK自动创建和删除的,客户端无需处理和维护。当所有客户端都离开一个频道时,频道自动被删除。此处详解
Web SDK 之间通话
①发起方创建一个频道
所需参数为 App ID 、用户 ID、Token、频道名称;
通过麦克风采集的音频创建本地音频轨道对象,摄像头采集的视频创建本地视频轨道对象,将音视频对象发布到频道中,此时一个频道建立成功。
频道定义了视频的编码格式和频道场景mode(有2种,通信和直播)
频道密码可以按需设置。远程用户加入后,可获取到远程用户的音视频对象。
②远端用户加入频道
在网页输入相同的App ID、频道名称和临时token,即可加入频道。
③离开频道
调用leave,该方法为异步,可随时调用。SDK会立刻销毁与当前频道相关的对象,包括订阅的远端用户对象、远端轨道对象、记录连接状态的对象等。
简单总结就是,发起方可以发给远端用户一个链接或二维码来进行视频通话。
app 与 web 之间通话
web SDK与app SDK默认是互通的,无需额外设置,所以视频通话流程与web之间通话类似。只要保证是同一个appid各个端都是可以互通的。
app可以通过调用joinchannel的API进入频道,如果此时对方还没有加入到频道中那么 app 端显示的是本地视频,对方加入之后,双方可以相互之间看到。
可以通过 频道管理 RESTful API 对频道进行设置,使app或web可以控制对方,比如禁用摄像头或麦克风,或将用户踢出频道。方法可参考 此处
关于 app 与 小程序
小程序本质还是web页,所以web的使用条件也适用于小程序。至于 app 唤起 小程序,则属于app 与 微信 SDK通信范畴,app是可以直接唤起的。
3.4 截图
3.4.1 实现方法
目前有三种方式实现截图功能,其余方式都是对以下形式的封装
①云端录制
通过 Agora 云端录制服务实现截图,详情请参考 云录制-进阶功能-视频截图 ,其中介绍了如何通过设置 RESTful API 参数对视频进行截图,并将图片上传至你的第三方云存储。
②本地服务端录制 SDK
可通过本地服务端录制 SDK 的截图功能获取到每一帧原始视频数据流。详情请参考 本地服务端录制-进阶功能-视频截图 ,其中介绍了如何通过命令行的方式获取视频截图,以便分析视频内容,例如对直播内容进行鉴黄以确保合法合规。
③原始视频数据回调
可通过裸数据接口获取到每一帧原始视频帧数据,从而实现截图功能。详情请参考 原始视频数据。
3.4.2 触发方式
截图支持仅截图和录制并截图两种,有自动和手动截图两种类型。截图异常不影响视频录制服务。
①服务端
云端录制支持视频截图,属于自动截图,不能手动触发,可设置截图时间间隔,云端自动截取图片并上传至指定的第三方云存储,分辨率和视频一致。自动视频截图会一直监控着直播,中途无法停止,除非终止视频通话。此处详情
②app端
app支持截图,是对原始视频数据回调的封装。可以手动触发,截图会保存在用户客户端本地,需要调用SDK的图片上传功能,将其传到用户指定的第三方云服务中。
视频截图与视频截图上传是两个功能,都收费(收费规则比较复杂,此处详解),声网推荐使用客户端视频截图上传功能,此处了解
图片上传功能收费具体细则得咨询商务。
图片分辨率与视频设置一致,与手机硬件无关。
而手机自带截屏与手机硬件有关。比如 1920*1080分辨率的手机播放一个640*480的视频,那么截图是1920*1080的,对视频本身的分辨率不影响。虽然分辨率高了,但还是不清晰。
比如,iOS手动截图的方法为 takeSnapshot,API地址在此处
③web端
目前Web SDK 暂未提供 类似takeSnapshot的客户端截图方法,还是需要利用手机系统自带截屏功能,通过声网视频截图上传服务实现。
3.5 兼容性问题
官网列出了桌面端和移动端浏览器一些常见问题,主要是兼容性,Web SDK问题还是挺多的,有些问题可以解决;有些没法解决,只能在业务层面提示用户。
Web端已知问题
①声网建议使用 VP8 视频编码。
使用 H.264 编码可能会导致开启硬件加速后出现一系列问题,包括帧率、码率、分辨率达不到目标值;视频花屏、黑屏;弱网环境下体验较差等
②桌面端严重问题
一些特定场景下chrome回声消除失效,safari某些版本音频断断续续,Firefox 只支持视频帧率设为 30 fps,与某些设备通信时,看其他端的画面会发生旋转。
③移动端严重问题
iOS浏览器在切换到后台时,音频流会发送中断。音频采集中断、音量极低、戴蓝牙耳机后播放音频有概率明显失真
android chrome上视频可能会花屏、发送码率无法达到Web SDK的预设值、戴蓝牙耳机后无法听到对方音频
④编码格式选择问题
若两端都使用Web SDK,则需设置编码为vp8;
若频道中有发送端使用Native SDK,由于 Native SDK 发送的视频流均为 H.264 编码,在不支持 H.264 的手机上 Web SDK 可以引入 H5 实时直播组件观看视频。
以上是节选出来比较严重的问题,更详细具体的可见FAQ和Web端已知问题。截图是部分app端,桌面端未列出。