拉流(播放)

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

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

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

  1. 首屏时间优化
    从步骤2入手,通过预设解码器类型,省去探测文件类型时间;
    从步骤5入手,缩小视频数据探测范围,同时也意味着减少了需要下载的数据量,特别是在网络不好的时候,减少下载的数据量能为启动播放节省大量的时间,当检测到I帧数据后就立马返回并进入解码环节。

推流

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

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

  1. 优化一:适当的Qos(Quality of Service,服务质量)策略。
    推流端会根据当前上行网络情况控制音视频数据发包和编码,在网络较差的情况下,音视频数据发送不出去,造成数据滞留在本地,这时,会停掉编码器防止发送数据进一步滞留,同时会根据网络情况选择合适的策略控制音视频发送。
    比如网络很差的情况下,推流端会优先发送音频数据,保证用户能听到声音,并在一定间隔内发关键帧数据,保证用户在一定时间间隔之后能看到一些画面的变化。
  2. 优化二:合理的关键帧配置。
    合理控制关键帧发送间隔(建议2秒或1秒一个),这样可以减少后端处理过程,为后端的缓冲区设置更小创造条件。

软硬编解选择

  1. 网上有不少关于选择软解还是硬解的分析文章,这里也介绍一些经验,但根本问题是,没有一个通用方案能最优适配所有操作系统和机型;
  2. 推流编码: 推荐Andorid4.3(API18)或以上使用硬编,以下版本使用软编;iOS使用全硬编方案;
  3. 播放解码:Andorid、iOS播放器都使用软解码方案,经过我们和大量客户的测试以及总结,虽然牺牲了功耗,但是在部分细节方面表现会较优,且可控性强,兼容性也强,出错情况少,推荐使用。
  4. 附软硬编解码优缺点对比:
编解码器类型 优点 缺点
软编解码 各平台兼容性强;解码色彩较硬编码好;编解码可操控空间大,自由度高,更容易定制 cpu消耗比较大
硬编解码 功耗低,执行效率比较高 不同机型的芯片对编解码的实现不同,兼容性比较差;可控性比较差

采集

采集的步骤:

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

相关内容

采集数据:iOS平台上采集音视频数据,需要使用AVFoundation.Framework框架,从captureSession会话的回调中获取音频,视频数据。
传输层协议:主要采用RTMP协议居多(默认端口1935,采用TCP协议),也有部分使用HLS协议
音/视频编码解码:FFmpeg编码解码
视频编码格式: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 框架。

直播-拉流和推流概述相关推荐

  1. 最后一公里:从直播拉流读懂直播链路

    前言 直播是一个庞大而复杂的业务形态,一个优秀的直播系统涉及众多团队的共同协作,有非常完整的直播链路. 那么,直播链路中都有哪些角色?这些角色要解决的是哪些问题?要优化某个环节时需要哪些角色的配合?这 ...

  2. uniapp h5直播拉流的几种方法 flv.js, video.js, 阿里播放器sdk,video标签

    uniapp h5直播拉流的几种方法 flv.js, video.js, 阿里播放器sdk,video标签 前言 首先引入资源文件 需要创建index.html 模板文件 flv.js video.j ...

  3. 直播拉流设备接入阿里云

    1. 首先有一台直播摄像头设备:支持4G或者wifi.网线,只要能联网就行 2. 登录阿里云账号,在搜索框搜索"视图计算" 3. 开通免费,设备管理.流量需要收费 4. 创建空间: ...

  4. 拉流与推流的区别_RTSP协议交互流程之推流分析

    0.引言 为了更好理解本篇文章,可以先阅读前面几篇文章,文章列表如下: RTSP协议交互流程之拉流分析 详解RTP打包AAC实战分析(1) 详解RTP协议之H264封包和解包实战 详解RTP协议之H2 ...

  5. 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录...

    OBS设置视频(512kbps)和音频(128kbps)比特率 阿里云监控结果: 使用FFmpeg拉流到Nginx 服务器测试比特率 第二次测试,修改视频和音频比特率 OBS设置 阿里云监控 Ngin ...

  6. rtmp直播拉流安卓开发

    最近,做学校的大创,涉及安卓拉流服务.作为一个安卓新手,做这个走了很多弯路.网上有很多教程,但很多都不适合新手,故结合网上资源与教程,专门写了篇适合新手的开发教程. 开发环境:Mac os10.12. ...

  7. uni-app H5使用flv.js直播拉流

    安装flv.js npm install flv.js 页面内引入代码 <template><view><view id="myPlayer" ref ...

  8. vue 播放rtmp 直播拉流视频

    一.写插件 <template><videoref="videoPlayer"class="video-js vjs-default-skin vjs- ...

  9. 关于直播类app中的推流、拉流技术(转载)

    关于直播类app中的推流.拉流技术 from:https://blog.csdn.net/lzllzllhl/article/details/80249069 图像处理:iOS端一般会用到GPUIma ...

最新文章

  1. 中国第一家交货的自动驾驶独角兽:完全自主泊车,千元级硬件成本
  2. php imagetextouter,CSS_你不知道的outerText,innerText 区别说明,首先,看我们的html定义- phpStudy...
  3. HDU 1873 看病要排队(结构体+优先队列)
  4. 第十七天:规划沟通管理
  5. java面试题4 牛客:运行下列代码,运行结果为
  6. 快速判断一个数是否是2的幂次方
  7. 数组翻转_LeetCode刷题实战151:翻转字符串里的单词
  8. 游戏主播这个行为终于有人治了!腾讯下“禁令”
  9. 显式锁(二)Lock接口与显示锁介绍
  10. 分享两本高质量算法书籍
  11. db2 jdbc驱动参数_db2的jdbc驱动安装及例子
  12. 高中单招计算机基础知识题库,2015单招考试计算机基础知识题库
  13. Smart3D系列教程3之 《论照片三维重建中Smart3D几个工作模块的功能意义》
  14. IP协议与MAC地址详解
  15. FixFox 打包xpi扩展
  16. 大学计算机专业用ipad pro够用吗,苹果iPad Pro上很合适学生党的几个专业App
  17. pandas中DataFrame如何检测重复值
  18. 【FFmpeg系列】使用FFmpeg实现视频图像旋转、翻转或转置
  19. 2012年中国县级市面积排行(截止到2012年7月31日) (zz.IS2120@BG57IV3)
  20. [转载]教师节献礼-关于大学的一点思考

热门文章

  1. java微信开发框架整理
  2. 时钟——CSS 动画
  3. Android手机 通过NFC读取二代证信息
  4. 百度SEO站群网站右下角悬浮圆形图标客服菜单代码
  5. php microtime true输出说明,php microtime函数怎么用
  6. 如何让玩家更有“代入感”? 《极乐迪斯科》叙事分析
  7. 2022年下半年网络工程师考试真题下午及答案
  8. 【JVM】10道不得不会的JVM面试题
  9. Photoshop设计海报
  10. Xmind最新安装教程免费