拉流直播

一、摄像技术

1. 简介

  录像是1种有结构的数据。直播的时候传的是数量,是摄像的三个小单元。

  视频 = 图像 + 音频

  • 录制之中的原有图像数据 平时会动用“H.264编码格式” 进行削减。

  • 节奏采样数据 日常会动用“AAC编码格式” 进行压缩。

 

4858mgm,二. 录像的实时传输

  • 录制是一种“有结构的数码”,录像直播便是实时传输这种“有结构的数额”。

  • 实时发生的事(直播)肯定是有延期的。大家要抓实直播的质量就要求减小延迟。

 

三. 录制编码压缩

  • 录像内容的体积1般对比大,为了有利于摄像内容的储存和传导,平日要求将原始的剧情成分(图像和韵律)举办削减。(压缩算法正是编码/压缩格式)

  • 在直播的时候传输的录制数据1般都要裁减(编码),传输数据的量是越少越好,播放的时候供给解压(解码/还原)。

 

四. 录制解码压缩

  • 录像内容通过编码压缩后,有利于存款和储蓄和传导。当要探望播放摄像时,相应的内需解码。

  • 编码和平解决码此前,需求预约壹种编码器和平解决码器都能够清楚的约定。

  • 譬如说,录制图像编码和平消除码进度:

编码器将多张图像进行编码后生成壹段1段的GOP(Group
of Pictures),传输的是GOP(Group of
Pictures),解码器在播音时则是读取一段一段的GOP举办解码后读取画面再渲染展现。

GOP:表示一组图片(即壹组延续的镜头),是摄像图像编码器和解码器存取的着力单位,由一张I帧和数张B/P帧组成(I帧又叫关键帧,B/P帧又叫参考帧过渡帧),它的排列顺序将会平昔重复到影象结束。

 

伍. 录像怎么传输?

  • 编码器将录制的多张图像实行编码后生成一段一段的GOP进行传输,传输的是GOP。

  • 将录像分元素子(GOP),再将分子分成原子(I帧、B帧、P帧)。

思索一下,倘使大家把传输3个“物体”,改成传输叁个3个的“原子”,将小小颗粒以光速传送,那么以人的浮游生物肉眼来感知,将是壹种怎么着的体会?

———
那种经验就接近于直播。

  • 摄像直播技术:就是将摄像内容的矮小颗粒(I / P /
    B帧, …),基于时间体系,以光速举行传递的1种技术。

 

陆. 用怎么样协议进行传输?

  • 直播正是将每壹帧数据(Video/奥迪o/Data
    Frame),打上时序标签后举行流式传输的进度。发送端源源不断的募集音录制数据,经过编码、封包、推流(主播端),再经过中继分发互联网展开扩散传播(正是把主播端的录像数据传到服务器,服务器再把多少传给观众),播放端再连绵不断下载数据并按时序进行解码播放。如此就达成了“边生产、边传输、边消费”的直播进程。

 

7. 直播的事体逻辑

1对多模型:

主播端 ——RTMP协议——》直播流媒体服务器 ——RTMP/HLS协议——》观众(粉丝)

  • 中华VTMP协和式飞机:延时可比小,传输速度相比快。(主播录摄像用这么些体协会议,把录制数据立马传到服务器上)
  • HLS协议:把主播已经传好的录像流切片,切片之后再给观者传输。(遵照时间点去播放,听众播放录制用那些协议,回放也用那一个协议)

协议差别:

  • 路虎极光TMP(Real Time Messaging
    Protocol)协议:是一个TCP协议(长连接),每一种时刻的数码,收到后立即转载,延时
    壹~3秒。
  • HLS(HTTP Live
    Streaming)协议:是三个HTTP协议(短连接),集合壹段时间数据,生成ts切片文件,更新m3u8,延时大于10秒。
  • RTMP-FLV(RTMP over
    HTTP)协议:是一个HTTP协议(长连接),同RTMP,使用HTTP协议,延时1~3秒。

 

8. 延迟(Delay)

  • 大体延迟
    • 延恒生期货指数稳定网络下,发送和收取时差。
    • 转车环节更多,延迟越大。
    • 可计算。
      • 主播端(上海)——转发——》服务器1(北京)——转发——》 …… ——转发——》服务器n(香港)——转发——》粉丝端
      • 延迟跟服务器的转账数 / 主播与听众直接的偏离有关。
  • 抖动(Jitter)延迟
    • 振动,确定性信号会倒霉。

 

九. 直播进度

  2个完好无损的直播进度,主要包涵:采集、处理、编码、封包、推流、传输、转码、分发、拉流、解码、播放。

  从推流到广播,再经过中间转载环节,延迟越低,则用户体验越好。

 

10. 编码器

  编码器的编码情势分两种:软编和硬编。

  软编的意思是,资源消耗的是CPU,通过有些软件代码的方式去编码。(一般用软编)

  硬编的意味是,财富消耗的是GPU,GPU就一定于是显卡/显示的功力。(好手提式有线话机不卡,坏手提式有线电话机很卡)

 

2、直播/录制播放器

1. ijkplayer 框架介绍

  录制端的播音用
ijkplayerijkplayer是B站(bilibili)开源的第二方框架。ijkplayer
已经帮大家集成好了 FFmpeg。

  • FFmpeg
    是音摄像处理工具,既有音摄像编码解码成效,又能够看作播放器使用。
  • 别的播放器都以基于FFmpeg的。苹果提供的AVPlayer,播放不了直播文件/播放不了直播格式(如,本田CR-VTMP的播报不了,能够用
    ijkplayer 去播放)。所以的确的要基于 FFmpeg
    去播放,B站帮大家封装好了,所以大家运用 ijkplayer。
  • 斗鱼也用的这些,到铺子只要不想花钱也足以用这么些(ijkplayer)。 
  • ijkplayer
    只可以播放,不可能推流。

  FQ工具:多态

  VLC:录制播放器,编码格式多(扶助的格式多,能够播直播格式的
rtmp://,1般能够用来测试直播地址)。

  测试地方:rtmp://live.hkstv.hk.lxdns.com/live/hks
(提示:用Safari打开,会活动进入到VLC播放列表中去)

 

2. ijkplayer 的使用

  • #### 第贰步:配置好凭借环境:下载 FFmpeg,编写翻译FFmpeg。(即什么把 ijkplayer自带的 IJKMedia德姆o 运营起来)

  步骤:

    1) github网站上 搜 ijkplayer

    二) 来到README.md文书档案的 Build
iOS 处,按步骤进行操作

    叁) 克隆项目:git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios

    4)
先进入ijkplayer-ios目录: cd ijkplayer-ios,执行: git checkout -B latest k0.7.7.1

    5) 再执行: ./init-ios.sh(意思是去下载
FFmpeg)

    (ijkplayer
是依据FFmpeg的,由于FFmpeg比较大,所以要独立去下载,下载相比较慢)

    6) 下载完后,进入ios目录: cd ios,准备编写翻译FFmpeg。

    7)
编写翻译FFmpeg,需举办以下命令:

./compile-ffmpeg.sh clean

./compile-ffmpeg.sh all

    八)
编写翻译成功后,大家就足以运转 IJKMediaDemo 了。

      

  • #### 第二步:将 IJKMediaPlayer(播放器)类别打包成 framework(方便集成到温馨的连串中去)

      怎么样把摄像播放器集成到温馨的门类中去?

      把二个工程并轨到另一个工程一般有二种艺术:

        1)工程里集成工程。(那种办法相比较费心、重量级,不推荐使用)

        二)把要合并的工程具有的源码打包成一个framework,大家只须求集成那个framework到任何类型即可。(推荐)

  生成framework的步骤:

    1)打开 IJKMediaPlayer 项目

        4858mgm 1

    二)修改工程的编写翻译形式为 Release
(因为framework不要求调剂,他的代码已经写好了的,不要求去修改,所以直接生成release版的framework)

    3)编写翻译二个模拟器版本的framework

        4858mgm 2

    四)再编译二个模拟器版本的framework

        4858mgm 3

    伍)最终将那八个framework合并成一个framework,那样就能保证那么些framework既能够在模拟器上运转,又足以在真机上运维。

        4858mgm 4

         4858mgm 5

         4858mgm 6

      

      合并文件命令: lipo
-create “真机版本路径” “模拟器版本路径” -output
“合并后文件的门径”

        4858mgm 7

        4858mgm 8

    陆)替换文件:复制合并后的IJKMediaFramework文件到仿照器版/真机版framework中展开沟通。

        4858mgm 9

 

3. 导入 ijkplayer 播放器的 framework 

  一)直接拖拽framework进行导入

    4858mgm 10

  贰)添加 ijkplayer 的片段信赖库

    ########################################################

      AudioToolbox.framework
      AVFoundation.framework
      CoreGraphics.framework
      CoreMedia.framework
      CoreVideo.framework
      libbz2.tbd
      libz.tbd
      MediaPlayer.framework
      MobileCoreServices.framework
      OpenGLES.framework
      QuartzCore.framework
      UIKit.framework
      VideoToolbox.framework
    ########################################################

    4858mgm 11

    假使编写翻译报以下错误:

      4858mgm 12

     This is a linker error. You can resolve it by adding “-lc++”
to Other Linker Flags in your Build Settings.

     化解办法:Build Settings —》Other Linker Flags —》 添加 -lc++

 

4. 集成ijkplayer

  初阶化播放器,设置相关属性。

5. 创建直播播放界面和直播聊天界面

 

 

相关文章