前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >直播系统开发之推流及拉流概述

直播系统开发之推流及拉流概述

作者头像
云豹kj的晨曦
修改于 2020-09-22 02:18:21
修改于 2020-09-22 02:18:21
5.1K0
举报
文章被收录于专栏:直播+直播+

拉流(播放):

根据直播系统开发协议类型(如RTMP、RTP、RTSP、HTTP等),与服务器建立连接并接收数据;

  • 解析二进制数据,从中找到相关流信息;
  • 根据不同的封装格式(如FLV、TS)解复用(demux);
  • 分别得到已编码的H.264视频数据和AAC音频数据;
  • 使用硬解码(对应系统的API)或软解码(FFMpeg)来解压音视频数据;
  • 经过解码后得到原始的视频数据(YUV)和音频数据(AAC);
  • 因为音频和视频解码是分开的,所以我们得把它们同步起来,否则会出现音视频不同步的现象,比如别人说话会跟口型对不上;
  • 最后把同步的音频数据送到耳机或外放,视频数据送到屏幕上显示。

了解了直播系统开发播放器的播放流程后,我们可以优化以下几点:

首屏时间优化

从步骤2入手,通过预设解码器类型,省去探测文件类型时间;

从步骤5入手,缩小视频数据探测范围,同时也意味着减少了需要下载的数据量,特别是在网络不好的时候,减少下载的数据量能为启动播放节省大量的时间,当检测到I帧数据后就立马返回并进入解码环节。

推流:

推流.jpg

  • 经过输出设备(AVCaptureVideoDataOutput)得到原始的采样数据--视频数据(YUV)和音频数据(AAC);
  • 使用硬编码(对应系统的API)或软编码(FFMpeg)来编码压缩音视频数据;
  • 分别得到已编码的H.264视频数据和AAC音频数据;
  • 根据不同的封装格式(如FLV、TS、MPEG-TS);
  • 使用HLS协议的时候加上这一步(HLS分段生成策略及m3u8索引文件)
  • 通过流上传到服务器;
  • 服务器进行相关协议的分发

推流步骤说明:很容易看出推流跟播放其实是逆向的,具体流程就不多说了。

  • 优化一:适当的Qos(Quality of Service,服务质量)策略。

直播系统开发推流端会根据当前上行网络情况控制音视频数据发包和编码,在网络较差的情况下,音视频数据发送不出去,造成数据滞留在本地,这时,会停掉编码器防止发送数据进一步滞留,同时会根据网络情况选择合适的策略控制音视频发送。

比如网络很差的情况下,推流端会优先发送音频数据,保证用户能听到声音,并在一定间隔内发关键帧数据,保证用户在一定时间间隔之后能看到一些画面的变化。

  • 优化二:合理的关键帧配置。

合理控制直播系统开发关键帧发送间隔(建议2秒或1秒一个),这样可以减少后端处理过程,为后端的缓冲区设置更小创造条件。

软硬编解选择

网上有不少关于选择软解还是硬解的分析文章,这里也介绍一些经验,但根本问题是,没有一个通用方案能最优适配所有操作系统和机型。

推流编码: 推荐Andorid4.3(API18)或以上使用硬编,以下版本使用软编;iOS使用全硬编方案;

播放解码:Andorid、iOS播放器都使用软解码方案,经过我们和大量客户的测试以及总结,虽然牺牲了功耗,但是在部分细节方面表现会较优,且可控性强,兼容性也强,出错情况少,推荐使用。

附软硬编解码优缺点对比:

硬编码软编码优缺点.jpg

采集

采集的步骤:

  1. 创建AVCaptureSession
  2. 输入对象AVCaptureDeviceInput
  3. 输出对象AVCaptureVideoDataOutput
  4. 输出代理方法captureOutput(_:didOutputSampleBuffer:fromConnection:)

相关内容

  • 采集数据:iOS平台上采集直播系统开发音视频数据,需要使用AVFoundation.Framework框架,从captureSession会话的回调中获取音频,视频数据。
  • 传输层协议:主要采用RTMP协议居多(默认端口1935,采用TCP协议),也有部分使用HLS协议
  • 音/视频编码解码:FFMpege编码解码
  • 视频编码格式:H.265、H.264、MPEG-4等,封装容器有TS、MKV、AVI、MP4等
  • 音频编码格式:G.711μ、AAC、Opus等,封装有MP3、OGG、AAC等
  • 渲染工具:采用OpenGL渲染YUV数据,呈现视频画面。将PCM送入设备的硬件资源播放,产生声音。iOS播放流式音频,使用Audio Queue 的方式,即,利用AudioToolbox.Framework 框架。

本文转自https://blog.csdn.net/yanceyxin/article/details/82750686?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160067980719724848356004%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160067980719724848356004&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-1-82750686.pc_first_rank_v2_rank_v28&utm_term=%E6%8E%A8%E6%B5%81&spm=1018.2118.3001.4187

仅作分享用。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
直播系统开发,直播源码开发推流所涉及的流程
一般在推流端所涉及的流程包括音视频数据的采集、编码、封装、协议封包等,主要就是将直播的音视频数据推送至流媒体服务器。
布谷鸟小刘
2021/07/13
1.4K0
直播系统开发,直播源码开发推流所涉及的流程
想做好直播间搭建,推流与拉流的详细过程你都知道吗
直播间搭建的成功离不开基本的流媒体传输,随着网络技术的不断提高,对音视频传输的质量与速度要求也不断提高,想做好一套直播系统,推流与拉流的详细过程原理你都知道吗?
云豹短视频嘉兴
2020/07/27
3.3K0
想做好直播间搭建,推流与拉流的详细过程你都知道吗
音视频基础概念合集:148 个问题带你快速上车音视频丨音视频基础
音视频是一个有一定技术门槛的垂直领域,对于前端、iOS/Android 客户端、服务端开发同学来说,这都是一个不错的职业发展方向。对于刚开始接触音视频开发的同学,最头疼的问题应该是音视频纷繁庞杂的概念,如果删繁就简,音视频生产及消费的核心环节其实只有:采集(声音和图像的数字化) → 编码(压缩数据便于存储和传输) → 封装(按格式封装便于控制音视频的展现) → 传输(用于网络) → 解封装(封装的逆过程) → 解码(编码的逆过程) → 渲染(声音和图像的展现)。
关键帧
2022/06/13
1.2K0
音视频基础概念合集:148 个问题带你快速上车音视频丨音视频基础
GB28181和RTSP使用场景区别有哪些?
好多开发者纠结,到底使用GB28181还是RTSP,这里简单的谈下二者使用场景区别,GB28181和RTSP(Real-Time Streaming Protocol)是用于视频监控和流媒体传输的两种不同的协议。
音视频牛哥
2023/10/31
2.8K0
GB28181和RTSP使用场景区别有哪些?
视频直播技术大全、直播架构、技术原理和实现思路方案整理
原文链接:https://blog.csdn.net/zgpeace/article/details/108552358
全栈程序员站长
2022/09/15
4.9K0
视频直播技术大全、直播架构、技术原理和实现思路方案整理
视频直播技术干货:一文读懂主流视频直播系统的推拉流架构、传输协议等
本文由蘑菇街前端开发工程师“三体”分享,原题“蘑菇街云端直播探索——启航篇”,有修订。
JackJiang
2022/05/31
5.3K1
视频直播技术干货:一文读懂主流视频直播系统的推拉流架构、传输协议等
视频直播之基础原理
SDK(Software Development Kit): 软件开发工具包 CDN(Content Delivery Network):内容分发网络
全栈程序员站长
2022/09/15
3K0
视频直播之基础原理
HLS推流的实现(iOS和OS X系统)
前言 使用VideoToolbox硬编码H.264 使用VideoToolbox硬解码H.264 使用AudioToolbox编码AAC 使用AudioToolbox播放AAC HLS点播实现(H.264和AAC码流) 在前面我们介绍了从麦克风采集声音并用AudioToolbox编码成AAC码流和从摄像头采集图像并用VideoToolbox编码成H.264码流,也尝试了把这两个格式的文件打包成TS流,并用通过HLS协议在浏览器播放,这一篇是在HLS点播实现(H.264和AAC码流)基础上的延续,进行
落影
2018/04/27
3.2K0
HLS推流的实现(iOS和OS X系统)
视频直播| 基础原理篇
一、直播难与易 `直播难`:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多, 视频/音频处理,图形处理, 视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的。 `直播易`:已经有各个领域的大牛,封装好了许多牛逼的框架,我们只需要用别人写好的框架, 就能快速的搭建一个直播app,也就是传说中的站在大牛肩膀上编程。 二、直播相关概述 1.一个完整直播app功能 1、`聊天` 私聊、聊天室、点亮、推送、黑名单
進无尽
2018/09/12
7.3K0
视频直播| 基础原理篇
快直播-基于WebRTC升级的低延时直播
随着直播行业的快速发展,直播带货秒杀和在线教育答题等应用场景对直播延时的要求越来越严苛。今天的技术解码就由费伟老师为大家带来腾讯云在快直播方面的一些分享! 随着直播行业的快速发展,特别是在今年疫情的影响下,各种低延时的直播场景得到了爆发性发展。最典型的应用就是直播带货秒杀和在线教育答题。这些应用场景的核心需求就是实时音视频互动,而传统直播技术基于HLS、FLV/RTMP协议具有秒级别的延时,高延时是制约互动效果的关键因素。快直播就是针对传统直播协议高延时的痛点,基于WebRTC技术实现毫秒级延
腾讯云音视频
2020/12/14
6.7K0
你想知道的直播技术都在这里了
概述 2016年基本上可以说一个直播年,各大互联网挣相进入直播行业,成就了直播技术的发展。之前我们也对直播连麦技术做了一个简单的分析,但是没有从整体上介绍,今天我们就组一个整体的介绍(本文部分资料来源于网络)。 我们先来看看视频直播的5个关键的流程:录制->编码->网络传输->解码->播放。每个环节对于直播的延迟都会产生不同程度的影响,这里重点分析移动设备的情况。针对移动场景总结出直播延迟优化的4个点:网络、协议、编解码、移动终端,达到UCloud直播云实现低延迟、秒开的技术细节。 直播技术分析 UCl
xiangzhihong
2018/02/06
3.3K0
你想知道的直播技术都在这里了
69 篇文章带你系统性的学习音视频开发(收藏起来假期看)
距离我们发出第一篇音视频技术文章已经过去一年了,回顾这一年,我们发了几十篇文章,覆盖了音视频基础知识、工具使用、工程示例、实战经验等主题,这些文章基本上构成了入门音视频开发并做一些功能实现和指标优化工作所需要的知识框架,这里我们来回顾下这些文章,做一下内容简介,给需要的朋友提供一些指引。
关键帧
2023/02/14
3.3K0
69 篇文章带你系统性的学习音视频开发(收藏起来假期看)
Android平台RTSP|RTMP播放器高效率如何回调YUV或RGB数据?
我们在做Android平台RTSP、RTMP播放器的时候,经常遇到这样的技术诉求,开发者希望拿到播放器解码后的YUV或RGB数据,投递给视觉算法,做AI分析,本文以ffmpeg和大牛直播SDK的SmartPlayer为例,介绍下相关的技术实现。
音视频牛哥
2024/10/30
1810
Android平台RTSP|RTMP播放器高效率如何回调YUV或RGB数据?
直播系统搭建:音视频处理的一般流程与推流端的四个环节
1.数据采集:摄像机及拾音器收集视频及音频数据,此时得到的为原始数据涉及技术或协议:摄像机:CCD、CMOS拾音器:声电转换装置(咪头)、音频放大电路。
山东布谷鸟
2020/04/08
1.1K0
一文详解GB28181、RTSP、RTMP
GB28181 即 GB/T28181—2016《公共安全视频监控联网系统信息传输、交换、控制技术要求》。它是公安部提出的公共安全行业标准,在视频监控领域具有重要地位。
音视频牛哥
2024/09/24
4.4K0
一文详解GB28181、RTSP、RTMP
iOS开发-音视频开发
5G网络作为第5代的移动通信网络,它的网络峰值传播速度可1以达到10Gbps/s.这比4G的的传输速度快数百倍.举个例子,整部超高画质电影下载可在1秒钟之内下载完成.
CC老师
2018/08/22
2.6K0
iOS开发-音视频开发
针对视频直播源码播放的流程,我们可以做哪些优化?
服务器集群,用于管理主播和主播、主播和连麦者的连线会话,实现音视频云端的调度和计算能力,具体会包括信令服务器,流媒体服务器集群等。
布谷鸟小刘
2021/08/26
5010
RTMP播放器延迟最低可以做到多少?
RTMP播放器的延迟可以受到多种因素的影响,包括网络状况、推流设置、播放器配置以及CDN分发等。因此,RTMP播放器的延迟并不是一个固定的数值,而是可以在一定范围内变化的。
音视频牛哥
2024/09/08
3980
RTMP播放器延迟最低可以做到多少?
直播系统源码如何开发与搭建运营?
直播的火爆让各行各业对直播这块新市场垂涎不已,而进军直播市场的第一步——直播系统源码却让企业头疼不已,那么直播系统源码如何进行开发呢?
布谷安妮
2020/08/27
1.5K0
直播系统源码如何开发与搭建运营?
【Dev Club 分享】H5 视频直播那些事
Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师。每周都会举行嘉宾分享,话题讨论等活动。 本期,我们邀请了腾讯SNG Web前端开发工程师——吕鸣,为大家分享《H5 视频直播那些事》。 分享内容简介: 目前视频直播,尤其是移动端的视频直播已经火到不行了,基本上各大互联网公司都有了自己的直播产品,所以对于直播的一些基本知识和主要技术点也要有所了解,本次分享就向大家介绍一下其中的奥秘。 内容大体框架: 怎样利用H5来播放直播视频 怎样录制直播视频 怎样实时上传
腾讯Bugly
2018/03/23
1.7K0
推荐阅读
相关推荐
直播系统开发,直播源码开发推流所涉及的流程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档