资讯专栏INFORMATION COLUMN

【网易云信】浅谈视频直播 iOS 端技术

xiyang / 1214人阅读

摘要:目前视频的采集源主要来自摄像头采集屏幕录制从视频文件读取推流。音视频处理前处理模块也是主观影响主播观看效果最主要的环节。用户停止直播,反初始化,销毁线程。跳帧可以有效的解决用户在网络不好的情况下,直播卡顿的问题。

随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字、图片无法满足人们对视觉的需求,因此视频直播应运而生。承载了实时性Real-Time和交互性的直播云服务是直播覆盖各行各业的新动力。

直播

想必了解过直播的人都清楚直播主要分为3部分:推流->流媒体服务器->拉流。

而我们今天需要讲的就是推流这部分,它主要包括音视频采集,音视频前处理,音视频编码,推流和传输4个方面。但是由于网络的复杂性和大数据的统计,推流还需要有全局负载均衡调度 GSLB(Global Server Load Balance),以及实时的统计数据上报服务器,包括提供频道管理给用户运营,因此推流 SDK 需要接入 GSLB 中心调度,统计服务器,心跳服务器,用于推流分配到网络最好的节点,有大数据的统计和分析。

下图涵盖了直播相关的所有服务,红色小标的线条代表指令流向,绿色小标的线条代表数据流向。

直播技术点

音视频采集

采集是所有环节中的第一环,我们使用的系统原生框架 AVFoundation 采集数据。通过 iPhone 摄像头(AVCaptureSession)采集视频数据,通过麦克风(AudioUnit)采集音频数据。目前视频的采集源主要来自摄像头采集、屏幕录制(ReplayKit)、从视频文件读取推流。
音视频都支持参数配置。音频可以设置采样率、声道数、帧大小、音频码率、是否使用外部采集、是否使用外部音频前处理;视频可以设置帧率、码率、分辨率、前后摄像头、摄像头采集方向、视频端显示比例、是否开启摄像头闪光灯、是否打开摄像头响应变焦、是否镜像前置摄像头预览、是否镜像前置摄像头编码、是否打开滤镜功能、滤镜类型、是否打开水印支持、是否打开 QoS 功能、是否输出 RGB 数据、是否使用外部视频采集。

音视频处理

前处理模块也是主观影响主播观看效果最主要的环节。目前 iOS 端比较知名的是 GPUImage,提供了丰富的预处理效果,我们也在此基础上进行了封装开发。视频前处理包含滤镜、美颜、水印、涂鸦等功能,同时在人脸识别和特效方面接入了第三方厂商 FaceU。SDK 内置 4 款滤镜黑白、自然、粉嫩、怀旧;支持 16:9 裁剪;支持磨皮和美白(高斯模糊加边缘检测);支持静态水印,动态水印,涂鸦等功能。音频前处理则包括回声抑制、啸叫、增益控制等。音视频都支持外部前处理。

音视频编码

编码最主要的两个难点是:

处理硬件兼容性问题

在高FPS、低bitrate和音质画质之间找个一个平衡点

由于iOS端硬件兼容性比较好,因此可以采用硬编。SDK 目前支持软件编码 openH264,硬件编码 VideoToolbox。而音频支持软件编码 FDK-AAC 和硬件编码 AudioToolbox。

视频编码的核心思想就是去除冗余信息

空间冗余:图像相邻像素之间有较强的相关性。

时间冗余:视频序列的相邻图像之间内容相似。

编码冗余:不同像素值出现的概率不同。

视觉冗余:人的视觉系统对某些细节不敏感。


音视频发送

推流 SDK 使用的流媒体协议是 RTMP(RealTime Messaging Protocol)。而音视频发送最困难的就是针对网络的带宽评估。由于从直播端到 RTMP 服务器的网络情况复杂,尤其是在 3G 和带宽较差的 Wifi 环境下,网络丢包、抖动和延迟经常发生,导致直播推流不畅。RTMP 基于 TCP 进行传输,TCP 自身实现了网络拥塞下的处理,内部的机制较为复杂,而且对开发者不可见,开发者无法根据 TCP 协议的信息判断当时的网络情况,导致发送码率大于实际网络带宽,造成比较严重的网络拥塞。因此我们自研开发了一款实时根据网络变化的 QoS 算法,用于实时调节码率、帧率、分辨率,同时将数据实时上报统计平台。

模块设计&线程模型

模块设计

鉴于推流的主流程分为上述描述的 4 个部分:音视频采集、音视频前处理、音视频编码、音视频发送。因此将推流 SDK 进行模块划分为 LSMediacapture 层(对外 API+ 服务器交互)、视频融合模块(视频采集+视频前处理)、音频融合模块(音频采集+音频前处理)、基础服务模块、音视频编码模块、网络发送模块。

QoS&跳帧

下图是直播的主要流程,用户初始化 SDK,创建线程,开始直播,音视频数据采集,编码,发送。在发送线程下,音视频数据发送,QoS 开启,根据网络实时评估带宽,调整帧率,码率控制编码器参数,同时触发跳帧,调整分辨率控制采集分辨率参数。用户停止直播,反初始化 SDK,销毁线程。QoS &跳帧可以有效的解决用户在网络不好的情况下,直播卡顿的问题。在不同的码率和分辨率情况下,都能够做到让用户流畅地观看视频直播。


随着音频处理和压缩技术的不断发展,效果更好、适用范围更广、性能更高的算法和新的技术必将不断涌现,如果你有好的技术或者分享,欢迎关注网易 MC 官方博客以及微信公众号:**

关注更多技术干货内容:网易云信博客
欢迎关注网易云信 GitHub
欢迎关注网易云信官网

官网微信公众号:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11049.html

相关文章

  • 浅谈AI视频技术超分辨率

    摘要:在这种场景下网易云信可以在接收的终端上通过超分辨率技术,恢复视频质量,极大地提升了移动端用户的体验。云信通过人工智能深度学习将低分辨率视频重建成高分辨率视频模糊图像视频瞬间变高清,为移动端为用户带来极致视频体验。 泛娱乐应用成为主流,社交与互动性强是共性,而具备这些特性的产品往往都集中在直播、短视频、图片分享社区等社交化娱乐产品,而在这些产品背后的黑科技持续成为关注重点,网易云信在网易...

    Towers 评论0 收藏0
  • 直播技术:从性能参数到业务大数据,浅谈直播 CDN 服务监控

    摘要:线上服务的有效监控和数据收集,一直是后端服务离不开的话题。在这个大数据时代,有了数据却不做事情,等同于浪费。而南京移动的用户量较大,也说明南京地区应该增设服务点。 线上服务的有效监控和数据收集,一直是后端服务离不开的话题。直播作为一种经典的分布式系统,监控以及数据收集更是必不可少的工作。如何对海量的服务集群有效的监控和保活,又如何抓取集群中的碎片数据中来优化服务?网易云信音视频研发工程...

    番茄西红柿 评论0 收藏0
  • 直播技术:从性能参数到业务大数据,浅谈直播 CDN 服务监控

    摘要:线上服务的有效监控和数据收集,一直是后端服务离不开的话题。在这个大数据时代,有了数据却不做事情,等同于浪费。而南京移动的用户量较大,也说明南京地区应该增设服务点。 线上服务的有效监控和数据收集,一直是后端服务离不开的话题。直播作为一种经典的分布式系统,监控以及数据收集更是必不可少的工作。如何对海量的服务集群有效的监控和保活,又如何抓取集群中的碎片数据中来优化服务?网易云信音视频研发工程...

    Nino 评论0 收藏0

发表评论

0条评论

xiyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<