视频直播技术之iOS端推流

随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字、图片无法满足人们对视觉的需求,因此视频直播应运而生。承载了实时性Real-Time和交互性的直播云服务是直播覆盖各行各业的新动力。网易云信推出一系列文章,对视频直播技术进行深入讲解,本篇文章将向大家介绍iOS端的推流技术。

相关阅读推荐

视频直播:Windows中各类画面源的截取和合成方法总结

视频直播关键技术:流畅、拥塞和延时追赶

短视频技术详解:Android端的短视频开发技术

 

直播架构

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

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

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

直播技术点

音视频采集

采集是所有环节中的第一环,我们使用的系统原生框架AVFoundation采集数据。通过iPhone摄像头(AVCaptureSession)采集视频数据,通过麦克风(AudioUnit)采集音频数据。目前视频的采集源主要来自摄像头采集、屏幕录制(ReplayKit)、从视频文件读取推流。

音视频都支持参数配置。音频可以设置采样率、声道数、帧大小、音频码率、是否使用外部采集、是否使用外部音频前处理;视频可以设置帧率、码率、分辨率、前后摄像头、摄像头采集方向、视频端显示比例、是否开启摄像头闪光灯、是否打开摄像头响应变焦、是否镜像前置摄像头预览、是否镜像前置摄像头编码、是否打开滤镜功能、滤镜类型、是否打开水印支持、是否打开QoS功能、是否输出RGB数据、是否使用外部视频采集。

音视频处理

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

音视频编码

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

1 处理硬件兼容性问题

2 在高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+服务器交互)、视频融合模块(视频采集+视频前处理)、音频融合模块(音频采集+音频前处理)、基础服务模块、音视频编码模块、网络发送模块。

线程模型

推流SDK总共含有10个线程。视频包含AVCaptureSession的原始采集线程、前处理线程、硬件编码线程、数据流向定义的采集线程、编码线程、发送线程。音频包含AudioUnit包含的原始采集线程、数据流向定义的采集线程、编码线程、发送线程。在数据流向定义的采集线程、编码线程、发送线程之间会创建2个bufferQueue,用于缓存音视频数据。采集编码队列可以有效的控制编码码率,编码发送队列可以有效自适应网络推流。

QoS&跳帧

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

以上就是iOS端推流技术的详细讲解。

另外,想要阅读更多关于视频直播技术的文章,可以移步网易云信博客

网易云信(NeteaseYunXin)是集网易18年IM以及音视频技术打造的PaaS服务产品,来自网易核心技术架构的通信与视频云服务,稳定易用且功能全面,致力于提供全球领先的技术能力和场景化解决方案。开发者通过集成客户端SDK和云端OPEN API,即可快速实现包含IM、音视频通话、直播、点播、互动白板、短信等功能。

原文地址:https://www.cnblogs.com/wangyiyunxin/p/9476345.html

时间: 2024-11-08 10:09:26

视频直播技术之iOS端推流的相关文章

「视频直播技术详解」系列之四:推流和传输

关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 在上一期中,我们介绍了讲解编码和封装. 本篇是<解密视频直播技术>系列之四:推流和传输.推流是直播的第一公里,直播的推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕.所以也是我们排查问题的第一步,如何系统地解决这类问题需要我们对相关理论有基础的认识. 本系列文章大纲如下: (一

视频直播技术-视频-编码-传输-秒开等&lt;转&gt;

转载地址:http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547042&idx=1&sn=26d8728548a6b5b657079eeab121e283&scene=21#wechat_redirect 现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集.美颜/滤镜/特效处理.编码.封包.推流.转码.分发.解码/渲染/播放等. 视频.直播等基础知识 什么是视频?

「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

?关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: (一)采集 (二)处理 (三)编码和封装 (四)推流和传输 (五)延迟优化 (六)现代播放器原理 (七)SDK 性能测试模型 本篇是<视频直播技术详解>系列的最后一篇直播云 SDK 性能测试模型,SDK 的性能对最终 App 的影响非常大.SDK 版本迭代快速,每次发布前都要进行系统的测试,测试要

iOS平台基于ffmpeg的视频直播技术揭秘

现在非常流行直播,相信很多人都跟我一样十分好奇这个技术是如何实现的,正好最近在做一个ffmpeg的项目,发现这个工具很容易就可以做直播,下面来给大家分享下技术要点: 首先你得编译出ffmpeg运行所需的静态库,这个百度一下有很多内容,这里我就不多说了,建议可以用Github上的一个开源脚本来编译,简单粗暴有效率. 地址:GitHub - kewlbear/FFmpeg-iOS-build-script: Shell scripts to build FFmpeg for iOS and tvOS

原:视频直播技术中的参考技术网页

1. [置顶] [总结]视音频编解码技术零基础学习方法 http://blog.csdn.net/leixiaohua1020/article/details/18893769 2. HTTP Live Streaming直播(iOS直播)技术分析与实现 http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html 3. 最简单的基于FFmpeg的移动端例子附件:IOS自带播放器(全部平台的示例) http://blog.csd

HTML5视频直播技术

分享内容简介:目前视频直播,尤其是移动端的视频直播已经火到不行了,基本上各大互联网公司都有了自己的直播产品,所以对于直播的一些基本知识和主要技术点也要有所了解,本次分享就向大家介绍一下其中的奥秘. 内容大体框架: 怎样利用 HTML5 来播放直播视频 怎样录制直播视频 怎样实时上传直播视频 直播中的用户交互 下面是本期分享内容整理 Hello, 大家好,我是吕鸣,目前是在腾讯 SNG 的即通应用部负责手Q的兴趣部落 Web 前端开发工作. 针对目前比较火的视频直播,我做了一些研究和探索,同时我们

移动视频开发技术 Android iOS

AnyChat手机视频开发包是面向集成或软件开发商使用,用于开展手机视频相关的产品开发和系统集成. 开发包提供手机端音视频采集.编码.压缩.音视频传输等功能:通过与后端服务器对接,优先P2P通讯,实现手机视频即拍即传.手机视频直播,手机视频录制和手机视频通话. 当前手机视频SDK开发包支持iOS和Android平台. .  提供手机视频采集直播的开发接口 通过视频参数设置接口,设置拍摄视频的分辨率.编码方式.码流.媒体流类别等 通过视频拍摄,实现视频的采集,编码和传输 ·   提供语音.文字通讯

视频直播技术(二):延迟优化

音视频的直播系统是一个复杂的工程系统,要做到非常低延迟的直播,需要复杂的系统工程优化和对各组件非常熟悉的掌握.下面整理几个简单常用的调优技巧: 编码优化 1. 确保 Codec 开启了最低延迟的设置.Codec 一般都会有低延迟优化的开关,对于 H.264 来说其效果尤其明显.很多人可能不知道 H.264 的解码器正常情况下会在显示之前缓存一定的视频帧,对于 QCIF 分辨率大小的视频(176 × 144)一般会缓存 16 帧,对于 720P 的视频则缓存 5 帧.对于第一帧的读取来说,这是一个

PHP写在线视频直播技术详解

2016年7月22日 22:26:45 交流QQ:903464207 目前楼主专注php开发,最直接的方法就是使用lnmp去直接做,搜索以下资料,发现还是行得通的,先把基础架构列出来 前端页面 php 弹幕flash+js 数据来源是redis集群 及时聊天 redis集群 +js长连接 礼物系统 服务器流媒体 nginx-rtmp-module 在线调用ffmpeg对流媒体进行转码 基于HTTP的FLV/MP4 VOD点播HLS (HTTP Live Streaming) M3U8的支持基于h