直播-拉流和推流概述转载

author author     2022-08-09     262

关键词:

拉流(播放):

根据协议类型(如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 框架。



文/狂人日记_wd(简书作者)
原文链接:http://www.jianshu.com/p/b520c2a9b795
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。






流媒体中的推流和拉流区别

...包好的内容传输到服务器的过程,而拉流是指服务器已有直播内容,用指定地址进行拉去的过程。推流端的四个环节:首先是采集环节:采集是指对图像和声音的采集,简单说就是能让网络视频直播系统和主播摄像头连起来,软... 查看详情

搭建推流和拉流环境(代码片段)

转自:【玩转腾讯云】搭建推流和拉流环境【准备】一个带有公网ip且带宽够用的云服务器。本文测试的服务器环境:腾讯云服务器UbuntuServer18.04.1LTS64位2C4G100M【配置环境】 echo\'debhttp://mirrors.aliyun.com/ubuntu/bionicmainrestricteduniver... 查看详情

流媒体开发10ffmpeg命令直播(代码片段)

...怎么将网络流保存到本地,并且怎么拉流和推流一、直播拉流一般都是先使用ffplay先测试rtmp链接是否可用ffplayrtmp://server/live/streamNameffmpeg-irtmp://server/live/streamName-ccopydump.flv对于不是rtmp的协议-ccopy要谨慎使用,-c等价于-code... 查看详情

vlc播放器的推流和拉流方法

...流编码器,在利用vlc或者其他流媒体播放器(如potplayer)进行拉流,测试流效果.5.流输出设置:勾选激活转码,可将媒体按照下方选中的格式转码成特定的封装格式,配置文件选需要的转码格式将播放循环模式设为单个循环,推流将持续循... 查看详情

vlc播放器的推流和拉流方法

...流编码器,在利用vlc或者其他流媒体播放器(如potplayer)进行拉流,测试流效果.5.流输出设置:勾选激活转码,可将媒体按照下方选中的格式转码成特定的封装格式,配置文件选需要的转码格式将播放循环模式设为单个循环,推流将持续循... 查看详情

uniapp简易直播

实验准备在服务器部署nginx-rtmp作为我们直播推流和拉流的服务器(如果服务商选择七牛,也是直接给地址推流)。为了加快部署,我在这一步使用Docker。dockerpulltiangolo/nginx-rtmpdockerrun-d-p1935:1935--namenginx-rtmptiangolo/nginx-rtmp记下推流... 查看详情

直播推流之blibli和拉流lflivekit

执行上面操作后,导入合成的拉流blibli包到工程中,然后新建个播放控制器来设置播放 1. 播放的一些操作。 2.高斯模糊。 3.新建聊天控制器。-(void)viewDidLoad{[superviewDidLoad];//Doanyadditionalsetupafterloadingtheviewfromitsnib.[se... 查看详情

如何通过ffmpeg实现实时推流和拉流保存的功能

FFMPEG是特别强大的专门用于处理音视频的开源库,既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如ffmpeg,ffplay,ffprobe,来编辑你的音视频文件。我们在开发TSINGSEE青犀视频产品过程中也会采用FFMPE... 查看详情

c++/qt音视频通话开发metartc源码解读,视频推流和拉流

...2,视频数据编码视频推流3,视频数据udp发送视频拉流1,udp接收视频数据视频拉流2,视频数据解码视频拉流3,视频数据播放视频推流步骤:视频数据采集、编码、发送,分别在三个线程内完成;视... 查看详情

ios开发之直播app流程介绍,直播资料收集汇总,视频推流,视频拉流,smtprtmphlsplplayerkit

(一)iOS直播类APP开发流程分解: 1.音视频处理的一般流程:数据采集→数据编码→数据传输(流媒体服务器)→解码数据→播放显示1、数据采集:摄像机及拾音器收集视频及音频数据,此时得到的为原始... 查看详情

nginx+nginx-rtmp-module+springboot搭建直播流服务器实现推流拉流实时直播功能

...。解决方案第三方的一些现成的服务:腾讯音视频通话、直播功能;阿里的音视频通信;两者都挺好的,但是需要收费因此放弃决定自己搭建一套直播流服务;先看效果(自己服务器配置低有延迟、放到公司服务器上输了不可怕,大... 查看详情

音视频流媒体-推流与拉流简介

...解概念,再看示意图更直观:1.1推流推流:将直播的内容推送至服务器的过程。即指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。“推流”对网络要求比较高,... 查看详情

直播基本流程

一.直播基本流程1.推流端:采集,前处理,编码,推流(RTMP)2.服务端:转码,录制,截图,鉴黄3.拉流端:拉流,解码,渲染4.互动系统:聊天,礼物, 点赞 二.采集 采集使用技术: 三.前处理视频前处理原理:... 查看详情

ffmpeg常用推流命令

...成功.6推流成功!三、用ffmpeg推流桌面以及推流摄像头进行直播1.如果希望将桌面录制或者分享,可以使用命令行如下:ffmpeg-favfoundation-i"1&q 查看详情

带你了解直播系统的架构

目前手机直播已成为一个相当热门的话题,小编对音视频的采集、传输、播放等都比较感兴趣,因此想记录下搭建一个直播系统的过程,不仅是对已用过的知识进行记录,以防后期使用,也可以为其他的初学者提供一个借鉴的历... 查看详情

流媒体开发10ffmpeg命令直播(代码片段)

...怎么将网络流保存到本地,并且怎么拉流和推流一、直播拉流一般都是先使用ffplay先测试rtmp链接是否可用ffplayrtmp://server/live/streamNameffmpeg-irtmp://server/live/streamName-ccopydump.flv对于不是rtmp的协议-ccopy要谨慎使用,-c等价于-code... 查看详情

直播流程,视频推流,视频拉流,简介,smtprtmphlsplplayerkit

原:https://www.cnblogs.com/baitongtong/p/11248966.html 1、音视频处理的一般流程:数据采集→数据编码→数据传输(流媒体服务器)→解码数据→播放显示1、数据采集:摄像机及拾音器收集视频及音频数据,此时得到的为原始... 查看详情

抖音0粉丝电脑直播

...夜神模拟器npcapwireshark夜神模拟器安装抖音并且登录可以直播的账号,直播需要实名认证先安装npcap然后安装wireshark启动wireshark这是使用以太网,点击以太网进入监听页面选择开启直播输入tpmpt进行过滤ctrl+f搜索connect双... 查看详情