一个web前端撸一个视频通话App,是否能做到?当然能够啊,伊隆马斯克都上天了,开发一个视频通话App能有多难? 为什么别人能做到,我就做不到? 魂灵拷问自己千百次之后,下定决心,说干就干。

前期预备

前端技能栈: Flutter
前期在技能栈选型方面,徘徊了一段时间,做了多个demo,不是各式各样未知的问题,就是性能上的问题而放弃了 uni-app, react-native, taro, tuari-mobile 这些技能栈,终究选定了 Flutter, Flutter是比较牛X的, 跨渠道方面,同时支撑 window运用,iOS运用,安卓运用也就只要它了。

后端技能栈:腾讯云
就算我会写Java, C#, PHP,Rust, Node.js, Python后端服务,也然并卵,我一个人的团队,开发一个App, 前端和后端都要做, 要搞得猴年马月啊? 有没有现成的serverless CMS渠道? 有,而且很成熟,开箱即用,噔噔噔噔,向你们隆重引荐 strapi, 什么?搞错了?不是这个? 是腾讯云开发,为什么是腾讯云开发?(今后我会慢慢解析)。

需求两台手机
音频视通讯嘛,必定需求两个终端。

渠道阐明
window仍是macOS渠道,看自己的条件, 各个渠道所遇到的问题都各不相同, 本文主要以macOS为主。

WebRTC 挑选?

挑选 WebRTC方面,走了一些弯路,最早挑选是的 flutter_webrtc,但发现后端以及办理方面的才能,比方用户办理,流量计算,安全审计等等都是没有的,需求自己开发办理后台,天啊。。。市面上已经许多的很厉害的渠道,何不直接拿来用?我应该会集时间和精力去做前端和交互(也就是产品),这也是我挑选腾讯云的原因,它是TRTC, 生态完整,技能成熟,站在巨人的肩膀上,让我跑得更快,看得更高,更远。

TRTC App装备与运转

这儿我运用带有UI的RTC项目, TuiCallKit项目链接 github.com/tencentyun/…

// clone本地
git clone https://github.com/tencentyun/TUICallKit.git
// 详细的路径是  Flutter/example/

除了RTC服务,TUIKit还运用了即时通讯IM PaaS 服务,所以也需求敞开和运用腾讯的即时通讯IM

下面是项目的详细装备和运转阐明。

1.即时通讯IM控制台 新建一个运用
即时通讯IM控制台 console.cloud.tencent.com/im

手撕Flutter 整一个视频通话App 开发日志一

手撕Flutter 整一个视频通话App 开发日志一

2.拿到 SDKAppID和 secretKey 之后,更改项目装备.

// flutter/example/lib/debug/generate_test_user_sig.dart
class GenerateTestUserSig {
    static int sdkAppId = 0;   //修正这儿
    static String secretKey = ''; // 修正这儿
}

3.创建IM的用户

即时通讯 -> 账号办理 console.cloud.tencent.com/im/account-…

手撕Flutter 整一个视频通话App 开发日志一

手撕Flutter 整一个视频通话App 开发日志一

注:也能够在客户端暂时注册,但呼叫的时分,需求知道对方的userID。

4.装置依赖

flutter pub get

5.xcode 项目装备
运用xcode 直接打 Flutter\example\ios\Runner.xcworkspace, 点击Setting -> Accounts

setting方位

手撕Flutter 整一个视频通话App 开发日志一

点击 + 添加Apple ID

手撕Flutter 整一个视频通话App 开发日志一

Runner -> Signing & Capabilities -> Debug

手撕Flutter 整一个视频通话App 开发日志一

手撕Flutter 整一个视频通话App 开发日志一

team 那里选中你方才新增的Apple ID的团队。

手撕Flutter 整一个视频通话App 开发日志一

6.运转App

手撕Flutter 整一个视频通话App 开发日志一

提示失败

手撕Flutter 整一个视频通话App 开发日志一

需求在iphone设置信赖 App,详细 设置 -> VPN与设置办理 -> 开发者App,然后点击信赖。

手撕Flutter 整一个视频通话App 开发日志一

最终,从头再运转,成功。

以下是运转成功之后的截图。

Demo图片
手撕Flutter 整一个视频通话App 开发日志一
手撕Flutter 整一个视频通话App 开发日志一
手撕Flutter 整一个视频通话App 开发日志一
手撕Flutter 整一个视频通话App 开发日志一

腾讯云其他链接

实时音视频(Tencent RTC)
cloud.tencent.com/product/trt…

实时音视频控制台
console.cloud.tencent.com/trtc

TuiCallKit 开发文档
cloud.tencent.com/document/pr…

问题与解决方案

在运转成功之前,可能还会遇到其他问题,以下是我搜集的一些问题和解决方案,供你参阅。

问题: window渠道 flutter run 很慢
在window上面跑flutter run , 一向停留在Running Gradle task ‘assembleDebug’… ,这个需求修正 android\build.gradle文件,改成阿里的镜像。

// example\android\build.gradle
buildscript {
    // 修正这儿
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' } // jcenter
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } // gradle-plugin
        maven { url 'https://maven.aliyun.com/repository/central' } // central
        maven { url 'https://maven.aliyun.com/repository/google' } // google
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}
allprojects {
    // 修正这儿
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

问题: window渠道的运转提示No implementation found for method xxx on channel
解决方案: 据渠道解说说 不支撑虚拟机运转,需求在真机上运转。

手撕Flutter 整一个视频通话App 开发日志一

问题: macOS渠道 flutter run很慢,一向卡 Running pod install…
解决方案: 需求敞开魔法(你懂的),而且仿制终端代理命令, 详细操作如下:

手撕Flutter 整一个视频通话App 开发日志一

手撕Flutter 整一个视频通话App 开发日志一

手撕Flutter 整一个视频通话App 开发日志一

问题: macOS提示Framework not found TXFFmpeg/TXSoundTouch
十分困难,运转不卡,也不慢,,但提示 Framework not found TXFFmpeg 的错误。运转Ruuner,点击Build Phases –> Link Binary.. 搜索 TXFFmpeg 或许 TXSoundTouch 添加上去就能够,然后从头跑Flutter run.

问题: macOS提示CFBundleShortVersionString的问题
在macOS渠道运转时提示 The application’s Info.plist does not contain a valid CFBundleShortVersionString
解决方案: xcode翻开 Flutter\example\ios\Runner.xcworkspace 在Runnder dashboard 在Build Settings 点击 + 新建添加一个键为 Marketing Version 然后搜索 Marketing Version, 在搜索结果 双击修改 输入 ${FLUTTER_BUILD_NAME} 即可

手撕Flutter 整一个视频通话App 开发日志一

手撕Flutter 整一个视频通话App 开发日志一

问题: App iphone真机上闪退问题
扫除万能,项目总算能够在iphone真机上面运转了,但把数据线拔了之后,App就闪退了,这是致命的Bug? 本来之前跑的都是debug版本,需求刺进数据线链上xcode的。
解决方案:设置 Flutter 模块的编译模式为 profile 或 releas, xcode翻开 Flutter\example\ios\Runner.xcworkspace, 在Build Settings选项,找到 User-Defined,点击 + 新建,添加一个键为 FLUTTER_BUILD_MODE ,值为 release。

手撕Flutter 整一个视频通话App 开发日志一

问题: codesign想要拜访您的钥匙串中的密钥access
macOS 真机运转的时分, 弹窗提示 codesign想要拜访您的钥匙串中的密钥access, 这是要输入你的Mac开机密码,如不当心点了拒绝。 解决方案: 翻开 钥匙串App, 找到登录 -> 我的证书, 把 iPhone DeveloperXXX删除,然后重启xcode, 从头运转项目,再弹窗提示codesign,输入开机密码 点击 一直运转即可。

手撕Flutter 整一个视频通话App 开发日志一

手撕Flutter 整一个视频通话App 开发日志一

待处理问题

  • 用户注册与登录
  • 微信登录
  • 离线呼醒功能
  • 新功能添加

其他相关链接

www.jianshu.com/p/e1bb7bd80…
blog.csdn.net/crasowas/ar…
blog.csdn.net/weixin_2743…
www.bilibili.com/read/cv2899…