iOS之音视频的理论和直播相关知识

 

直播协议介绍:https://blog.csdn.net/wjmnju/article/details/78664933

监控的传输协议:https://blog.csdn.net/caoshangpa/article/details/53142698

视频实质:

纯粹的视频(不包括音频)实质上就是一组帧图片,经过视频编码成为视频(video)文件再把音频(audio)文件有些还有字幕文件组装在一起成为我们看到的视频(movie)文件。1秒内出现的图片数就是帧率,图片间隔越小画面就越流畅,所以帧率越高效果就越好,需要的存储空间也就越多。

视频格式:

MP4、MOV、AVI、RMVB这些播放格式其实都是封装格式,除了RMVB比较特殊外,其他格式内封装的视频编码格式都是H264,H264以高压缩率闻名于世,压缩效率比MEPG-2提升一倍多,但是世上没有两全其美的事,H264的解码难度提高了3倍多。

视频码率:

视频文件的大小除以是视频的时长定义为码率。

码率和分辨率跟视频质量的关系:

  • 码率可以理解为取样率,单位时间内取样率越大,精度就越高,同时体积也越大。
  • 当视频没有经过编码时,如果分辨率越高,那么视频图像的细节越清晰。
  • 但如果视频经过编码,被限制在一定码率内,编码器就必须舍弃掉一部分细节。
  • 所以分辨率和码率都同清晰度有关。

 

流媒体协议介绍

HTTP渐进下载流媒体播放:  基于TCP。

所谓流媒体是指采用流式传输的方式在 Internet 播放的媒体格式。
流媒体又叫流式媒体,它是指商家用一个视频传送服务器把节目当成数据包发出,传送到网络上。
用户通过解压设备对这些数据进行解压后,节目就会像发送前那样显示出来。
流媒体以流的方式在网络中传输音频、视频和多媒体文件的形式。
流媒体文件格式是支持采用流式传输及播放的媒体格式。
流式传输方式是将视频和音频等多媒体文件经过特殊的压缩方式分成一个个压缩包,
由服务器向用户计算机连续、实时传送。在采用流式传输方式的系统中,用户不必像非流式播放那样等到整个文件
全部下载完毕后才能看到当中的内容,而是只需要经过几秒钟或几十秒的启动延时即可在用户计算机上利用
相应的播放器对压缩的视频或音频等流式媒体文件进行播放,剩余的部分将继续进行下载,直至播放完毕。
 

1. 伪流媒体:

  • 渐进式下载 : 边下边存, 文件会保存
  • 使用http协议,也能够实现视频播放, 也能快进快退等, 体验上跟流媒体很像. 优酷, 土豆.这些网址就在使用这项技术.
  • 特点:实现简单, 成本也低

    2 流媒体:

    边下边播, 不会保存文件,特点:流过就没有了.常用的协议有两个,分别为HLS (HTTP Live Streaming) 和 RTMP (Real Time Messaging Protocol)

  • HLS (HTTP Live Streaming),Apple的动态码率自适应技术。主要用于Mac和iOS音视频服务。包括一个m3u(8)的索引文件(.M3u8),多个TS媒体分片文件(.ts)和key加密串文件。支持推流和播放. iOS自带的播放器就可以直接播放基于HLS协议的视频,

     HTTP Live StreamingHLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。要实现HLS点播,重点在于对媒体文件分段,目前有不少开源工具可以使用,这里我就不再讨论,只谈HLS直播技术。

      相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。

      根据以上的了解要实现HTTP Live Streaming直播,需要研究并实现以下技术关键点

  • 采集视频源和音频源的数据
  • 对原始数据进行H264编码和AAC编码
  • 视频和音频数据封装为MPEG-TS包
  • HLS分段生成策略及m3u8索引文件
  • HTTP传输协议

 

  • RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种 变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数 据通信.

  • RTMP实时消息传送协议协议概述编辑
    RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议。
    它有多种变种:
    1. RTMP工作在TCP之上,默认使用端口1935;
    2. RTMPE在RTMP的基础上增加了加密功能;
    3. RTMPT封装在HTTP请求之上,可穿透防火墙;
    4. RTMPS类似RTMPT,增加了TLS/SSL的安全功能;

RTP :(Real-time Transport Protocol)
是用于Internet上针对多媒体数据流的一种传输层协议.RTP 协议和 RTP 控制协议 RTCP 一起使用,
而且它是建立在 UDP 协议上的.
RTP 不像http和ftp可完整的下载整个影视文件,它是以固定的数据率在网络上发送数据,客户端也是按照这种速度观看影视文件,当
影视画面播放过后,就不可以再重复播放,除非重新向服务器端要求数据。

RTCP:Real-time Transport Control Protocol 或 RTP Control Protocol或简写 RTCP)
实时传输控制协议,是实时传输协议(RTP)的一个姐妹协议.

注:--:RTP 协议和 RTP控制协议(RTCP) 一起使用,而且它是建立在UDP协议上的

RTSP:(Real Time Streaming Protocol)

实时流媒体会话协议,SDP(会话描述协议),RTP(实时传输协议)。
是用来控制声音或影像的多媒体串流协议,RTSP 提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。
媒体数据使用rtp,rtcp协议。
一般使用udp 作为传输层。适合IPTV场景。
数据源包括现场数据与存储在剪辑中的数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、多播UDP与TCP提供途
径,并为选择基于RTP上发送机制提供方法
传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,比较能容忍网络延迟.


--->:RTSP 与 RTP 最大的区别在于:RTSP 是一种双向实时数据传输协议,它允许客户端向服务器端发送请求,如回放、快进、倒退等操作。当
然,RTSP 可基于 RTP 来传送数据,还可以选择 TCP、UDP、组播 UDP 等通道来发送数据,具有很好的扩展性。它时一种类似与http协议
的网络应用层协议.

WebRTC:

web端实现流媒体的协议。google刚推出WebRTC的时候巨头们要么冷眼旁观,要么抵触情绪很大。使用RTP协议传输。
 

***视频播放原理:

  • 通过流媒体协议如RTSP+RTP、HTTP、MMS等下载的数据通过解协议获得封装格式数据,何为封装格式的数据。如AVI、MP4、FLV等;
  • 对于封装格式的数据进行解封装,提取视频流、音频流、字幕流进行分离待下一步准备处理,
  • 分离后获得音视频文件编码文件(音视频文件过大需要进行压缩进行传输,即编码),常见的编码如H.264编码的视频码流和AAC编码的音频码流。压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。
  • 视音频同步,视频流、音频流、字幕流等进行同步播放。

 

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。
-

***推流:

推流协议:一般点播采用HTTP ,而直播的话,大部分还是采用RTMP或者私有协议,原因是延时会比较小,RTMP本身也是为了直播设计的

流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 

视频流传输协议RTP/RTCP/RTSP/HTTP的区别 http://blog.csdn.net/yangxt/article/details/7467457

封装格式

封装格式(也叫容器)主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。

常见格式

AVI:微软在90年代初创立的封装标准,是当时为对抗quicktime格式(mov)而推出的,只能支持固定CBR恒定比特率编码的声音文件。

FLV:针对于h.263家族的格式。

MKV:万能封装器,有良好的兼容和跨平台性、纠错性,可带 外挂字幕。

MOV:MOV是Quicktime封装。

MP4:主要应用于mpeg4的封装 。

RM/RMVB:Real Video,由RealNetworks开发的应用于rmvb和rm 。

TS/PS:PS封装只能在HDDVD原版。

WMV:微软推出的,作为市场竞争。

***直播:

iOS开发之iOS直播平台有用的第三方资源共享:

1.  实时美颜参考网址:http://altitudelabs.com/blog/real-time-filter/

2. 直播测试地址:

HLS:http://live.3gv.ifeng.com/live/hongkong.m3u8 凤凰卫视香港台

SMTP:rtmp://live.hkstv.hk.lxdns.com/live/hks 香港卫视

RSTP:rtsp://rtsp.vdowowza.tvb.com/tvblive/mobileinews200.stream 互动新闻台1

      3.  HLS streaming工具下载,用于处理m3u8音、视频源的HLS Streaming Tool Download

   4. 直播相关SDK

        1. VideoCore 在新浪云上有文档说明,可阅读iOS推流SDK使用文档

        2. 网易云信直播SDK 好像是收费的,价格还不便宜,一般公司可能也不会用,不过可以尝试看看,了解一下,有助于学习!

3. 暴风云直播   http://www.baofengcloud.com/apisdk/sdk/live/iossdk.html

 4. 融云直播     http://www.rongcloud.cn/live

        5. 腾讯直播SDK  https://www.qcloud.com/solution/video.html

   5. 直播相关开源库

       1. BeautifyFaceDemo 基于GPUImage的图片处理,做美颜方面可以参考一下

       2.   lf.swift 开源RTMP Swift版的,可以学习一下!好像作者是日本的,或者是在日本工作的,写了不少日文!

       3.  PLPlayerKit 一个不依赖FFmpeg的播放器,支持RTMP

       4.  HLS-Demo   https://github.com/yangchao0033/HLS-Demo  HLS播放demo

       5. SmarterStreaming  https://github.com/daniulive/SmarterStreaming  直播SDK(支持私有协议和RTMP推流,如windows推流/android推流/iOS推流/windows播放器/android播放器/iOS播放器)

保证视频流畅度:https://blog.csdn.net/sglh0707/article/details/51200127

视频直播,是对视频源的实时的观看,不能快进等操作,注重实时性,对网络延迟要求比较高,相对于视频的广播

视频点播,是对以往的视频源进行回放,可以执行快进后退等操作

直播需要处理的流程:https://blog.csdn.net/IT_liuchengli/article/details/80434817

https://blog.csdn.net/cloud_huan/article/details/68067571

直播流程实现:https://blog.csdn.net/walkerwqp/article/details/79163987

流程:音视频采样--》视频滤镜--》音视频编码--》推流--》流媒体服务器--》客户端拉流--》音视频解码--》视频播放

https://www.jianshu.com/p/5b1341e97757

http://www.360doc.com/content/18/0808/22/32446372_776732884.shtml

我们的眼睛可能只需要1秒有30副画面就会认为是一个连续的画面了 而耳朵需要更高 需要多高呢 我们目前比较流行的CD格式就是44.1kHZ 这里就是表示 1秒钟记录 44.1k次 也就44100次声音信号 基本达到这样的水平 大部分人就觉得没什么区别了,但是其实和真实的声音还是有区别的。

码率、帧率、分辨率:https://blog.csdn.net/lipengshiwo/article/details/53169235

码率:FPS(每秒钟要多少帧画面);   以及Gop(表示多少秒一个I帧)。算一个PCM音频流的码率是一件很轻松的事情,采样率值×采样大小值×声道数 bps。一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率则为 44.1K×16×2 =1411.2 Kbps

分辨率:单位英寸中所包含的像素点数; VGA:Video Graphics Array(视频图像分辨率)

帧率:编码器每秒编出的数据大小,单位是kbps,比如800kbps代表编码器每秒产生800kb(或100KB)的数据。

GOP、I、P、B帧:https://blog.csdn.net/xiaoyida11/article/details/52852398/、https://blog.csdn.net/lipengshiwo/article/details/79160316

***点播:可以暂停,可以前进倒退。

***编码、解码:视频压缩算法是通过去除时间、空间的冗余来实现的。通过去除不同类型的冗余,可以明显的压缩数据,代价就是一部分信息失真,可以通过熵编码器(如哈夫曼编码等)进行编码可以获得更高的压缩比。目前主流的图像/视频压缩标准为:JPEG,MPEG,H26X等标准。

视频编码就是为了压缩视频数据流。压缩包括编码器和解码器两部分,在传输或者存储之前,编码器将源文件转换成压缩格式,在读取或播放数据时,解码器将压缩数据恢复成视频图像。编码器和解码器合称为编解码器(CODEC)。视频数据的压缩基本原理就是消除冗余,而冗余基本上是时间冗余和空间冗余。视频编码器一般分为三个主要功能单元:时域模型,频域模型和熵编码器。

时域模型的输入是未压缩的视频流,通常原始视频流的相邻帧之间具有较大的相似性,采用当前帧之前或之后的一帧或多帧图像作为参考,采用运动补偿技术来降低预测帧与当前帧之间的差别。时域模型输出的是当前帧与预测帧相减的结果和各个模型参数。

频域模型输入的是残差图像,它利用相邻像素点的相似性,消除残差图像的频域冗余。编码器对残差图像进行频域变换,再量化,得到相应的系数。变换系数经过量化后,保留了少量的残差系数,它们构成了残差图像的压缩性描述,并作为频域模型的最后输出。

熵编码器对时域参数(时域模型)和变换系数(频域模型)进行压缩,消除存在的统计冗余,并输出压缩后的压缩比特流或数据用于视频的传输和存储。压缩后的视频序列包括编码的运动矢量、变换系数以及头信息。

视频编码的核心技术是基于分块的运动补偿、残差变换和量化方案。 

视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,

因为不进行编码的视频数据量非常大,会造成存储和传输上的困难,所以视频文件都需要在录制完成后进行编码。视频编码主要从两个维度压缩数据。

  • 1、单张图像某一区域相邻像素相似,比如一片红色只记录红色色值和区域,不用记录这个区域的每一个像素点。
  • 2、相邻图像之间内容相似,因为相邻两帧要制造连续的效果,所以两帧之间的内容一般非常接近。目前主流的视频编码技术都是用图像编码方法对第一帧进行编码,然后用某种方式描述接下来的帧相对于附近的帧有什么区别。

视频编码标准汇总及比较:https://blog.csdn.net/leixiaohua1020/article/details/12031631

视频编码理论:https://blog.csdn.net/qq_34447388/article/details/78997339

音频常用编码方式:https://blog.csdn.net/houxiaoni01/article/details/78810674

音频处理要考虑的几个方面参数:

软解码和硬解码:

对H264的视频解码给CPU造成了很大负担,所以手机工程师把这部分工作交给了更善于进行处理简单工作但是数据量较大的GPU。

  • GPU解码就是所谓的硬解码
  • CPU解码就是软解码。
  • iOS提供的播放器类使用的是硬解码,所以视频播放对CPU不会有很大的压力,但是支持的播放格式比较单一,一般就是MP4、MOV、M4V这几个。

***框架:ijkplayer是B站对开源框架FFmpeg(一个基于C的软解码视频播放开源框架)的封装;

LFLiveKit编码、推流---https://www.cnblogs.com/chenjiangxiaoyu/p/7308395.html、https://www.jianshu.com/p/f270ad35b17a、源码分析https://blog.csdn.net/wujakf/article/details/64919694、https://www.jianshu.com/p/4dd2009b0902、github地址https://github.com/LaiFengiOS/LFLiveKit

http://ffmpeg.org/doxygen/2.8/examples.html 官网介绍 

http://blog.csdn.net/leixiaohua1020/article/details/44084321 博客地址 

http://blog.csdn.net/beitiandijun/article/details/8280448  FFmpeg的基本概念

多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

****音轨合并:

****音视频合并:

******音视频中的问题:https://blog.csdn.net/u013773524/article/details/51194652

************直播的关键流程:

https://www.jianshu.com/p/bd42bacbe4cc----原理

https://www.jianshu.com/p/7b2f1df74420----播放

https://www.jianshu.com/p/c71bfda055fa---采集

https://www.jianshu.com/p/4646894245ba---美颜

基于LFLiveKit+ijkplayer+rtmp实现直播:https://blog.csdn.net/qq_30513483/article/details/54090109

********直播相关代码:基于LFLiveKit+ijkplayer+rtmp实现直播:https://github.com/stlndm/linke

音频pcm转aac:https://github.com/ibabyblue/PCMHardEncodeToAAC

https://github.com/jessonliu/JFLivePlaye

*****编译ijkplayer包:https://blog.csdn.net/coder_pig/article/details/79134625

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值