0
回答
用Rose构建需要视频聊天的跨平台app
注册华为云得mate10,2.9折抢先购!>>>   

  实现视频聊天存在两个技术难点,一是网络传输,二是视音频编解码。这些技术问题不是靠几个人就能解决的,为此开发者一般都选择某个SDK,然后以它为基础写出app。作为众多SDK中一个,Google的Webrtc无疑非常突出,它全开源、功能完善、经过多个知名浏览器多年验证。有人会问,Webrtc出名是用在浏览器,它能用在写app?——Webrtc分两层,底层是个用C++写的库(Native Code),然后上层写个Javascript封装,以便供HTML5调用。既然是写app,那完全不用管上层Js封装,而且Google在开发Webrtc时已考虑用在app,底层C++库的API已做得很完善了。

  Rose实现视频聊天就是靠集成Google的Webrtc,而且是几乎一条代码不改的使用它。既然如此不禁有人要问,直接用Webrtc就行,何必用Rose?

一:下载、更新Webrtc
  要能成功编译出官方Webrtc源码,需完整下载三部分。一是Webrtc核心代码,大概30M;二是第三方支持库,像BoringSSL、libvpx、ffmpeg等等,这个数百M;三是chromium,这数个G。另外要注意,Webrtc项目更新活跃。每次要下载数个G,又要保证必要的更新频率,这无缝须要不少工作量。
  一旦使用Rose内置的Webrtc,下载Rose就下载了Webrtc,即不必单独下载Webrtc了。如果你自个想更新Webrtc(这往往是没必要的,新版Rose会用最新Webrtc),只需从官网下载200M的包,抽出当中一个名叫“webrtc”的目录,即那30M左右的核心代码。只要替换掉这30M代码,然后检查前后两版目录结构变动,根据改动修改工程文件,那你就更新到最新版了。依经验,即使三个月更新一次,花一个工作日就可同时更新掉Windows、iOS、Android平台。

二:编译、调试Webrtc
  对用惯了IDE的开发者来说,开源社区中项目往往存在两个通病:一是编译要用命令行,二是调试很难进入项目中源码。官方Webrtc的编译是GN+Ninja,这无疑继续存在那两个问题了。断点不能进入,这会大大增加看懂Webrtc代码的难度。
  Rose把Webrtc以着源码链入最后的app工程,编译Webrtc不再使用GN+Ninja,而是编写成该平台IDE需要的工程文件。Windows是*.sln(Visual Studio),iOS是project.pbxproj(XCode),Android则是*.mk(Android Studio+NDK)。正是因为写成这些文件,编译只是在这些IDE执行“Build”命令,也正因为这方式,Windows、iOS支持调试时把断点设进Webrtc内部。至于Android,Google还没有很好支持断点设在NDK代码,但由于Webrtc良好跨平台特性,既然已有Windows、iOS,你基本没必要在Android调试Webrtc。
  Webrtc除了核心库,还依赖众多第三方库,这些第三库官方提供的方法往往又是命令行,可能还要安装能支持Unix命令的Windows工具,像CMake、MSYS2。Rose一样把它们改到Visual Studio、Xcode、Android Studio + NDK,编译、调试都变得轻松了。

三、跨平台编程Webrtc模块
  跨平台编程自然是指用同一条C++代码就能在不同平台实现相同功能,以此扩展开,同一套代码要一字不改就能用在所有平台,这不仅降开发成本又降维护成本。对同时要跨Windows、iOS、Andoird,官方Webrtc已做得很好,除了Andorid上的采集本地视频。因为缺少这模块,如果不改官方代码基本不可能做到跨平台编程Webrtc模块。
  基于官方提供的Android app(AppRTCMobile),Rose给补上了这模块,具体代码在<webrtc>/modules/video_capture/android。这模块90%以上代码来自AppRTCMobile,因而一旦Webrtc更新,同时也能更新这模块。当然,我相信将来哪天官方会补上它的。

四、跨平台编程app
  Webrtc只是视频聊天的核心模块,构建视频聊天还有其它工作,像界面。而对一个app来说,聊天只是当中一个功能,有时甚至是不大的功能,这意味如果不能跨平台编写其它方面,那还是会造成各平台开发成本、维护成本。
  Rose目标是要提供简单、有效跨平台解决方案,它已做了跨平台的方方面面,像窗口系统、框架逻辑、动画,等等。Rose技术理念是“尽量不做技术创新者,而是做技术集成者”。基于这理念,在寻找跨平台视频聊天方案时,自然而然集成了Google的Webrtc。
  有些app核心功能不是聊天,支持聊天只是锦上添花而已。对于这些应用,Rose可让变得异常简单。
gui2::tchat2 dlg(disp);
dlg.show(disp.video());
  只须调用这两语句,就能弹出个类似微信的聊天窗口,Rose会处理当中所有细节。

五、信令服务器
  Webrtc没规定信令服务器标准,这造成不同产家实现的信令服务器可能不兼容,尤其在用户注册上。没有信令服务器,就不可能实现视频聊天,而已有的免费服务器往往走的是Websocket协议,像https://appr.tc。对app来说,传输用Websocket协议只是无端让编程变复杂,C Socket完全就够了。为此Rose向外提供了一个C Socket信令服务器,可直接用它测试你自个写的app。
举报
rose-sdk
发帖于1年前 0回/372阅
顶部