1、FFMpeg

FFMpeg编译
  • Step1
    先下载文件:https://github.com/libav/gas-preprocessor,
    复制gas-preprocessor.pl到/usr/bin下,
    Q1 无权限
    A1 屏蔽方法:重启Mac,按住command+R,进入recovery模式。选择打开Utilities下的终端,输入:csrutil disable并回车,然后正常重启Mac即可
  • Step2
    修改权限,需要终端在user/bin目录下
    sudo chmod a+rwx gas-preprocessor.pl
  • Step3
    安装Yasm http://www.tortall.net/projects/yasm/releases/
    解压之后,在命令行中
    cd yasm-1.2.0
    ./configure
    make
    sudo make install
  • Step4 下载
    **FFmpeg-iOS-build-script **https://github.com/kewlbear/FFmpeg-iOS-build-script
  • Step4.2 下载ffmpeg的源码
    放入ffmpeg-ios-build-script目录中
  • Step5 编译
    FFmpeg-iOS-build-script-master runo$ ./build-ffmpeg.sh
  • Step6
    编译完成后取出相关的静态包和头文件导入工程中
  • Step7 修改appdelegate.m为 .mm
    导入系统库
    libz.dylib,libbz2.dylib,libiconv.dylib
  • Step8 在viewcontroller导入#include “avformat.h”,添加一句av_register_all();
    Q 编译的时候报错: 'libavcodec/avcodec.h' file not found ,
    A 修改Header search paths 里的路径: $(PROJECT_DIR)/FFmpeg-iOS/include
    注意文件存放的位置
    Q 出现
    Undefined symbols for architecture x86_64:
    "_CMBlockBufferCreateWithMemoryBlock", referenced from:
    _videotoolbox_common_end_frame in libavcodec.a(videotoolbox.o)
    A 接着导入coreVideo.framework coreMdedia.framework VideoToolbox.framework
FFmpeg
  • ffmpeg是一个编解码框架,能够支持各种不同的编解码器,并采用统一的 api 去调用。但其默认只提供了针对各种媒体格式的解码器(基本上涵盖得比较全了),而编码器默认提供很少的几个开源的格式(或者已经无需专利保护的格式)。所以,如果你需要 FFmpeg 具备支持多种媒体格式的编码能力,你需要额外下载并安装那些编码器(主要是通过安装这些编码器获得它们的头文件、动态库及静态库用于 FFmpeg 编译),才能保证在 FFmpeg 编译时载入这些编码器的二进制代码,使 FFmpeg 具备这些编码功能。
  • 流媒体:在网络上基于流式传输,可以立即解码播放流式传输定义很广泛,主要指通过网络传送媒体(如视频、音频)的技术总称。其特定含义为通过Internet 将影视节目传送到PC机。实现流式传输有两种方法
    • 实时流式传输(Real time streaming)实时流式传输指保证媒体信号带宽与网络连接匹配,使媒体可被实时观看到。实时流式传输根据网络情况调整输出音视频的质量从而实现媒体的持续的实时传送,用户可快进或后退以观看前面或后面的内容。RTSP,需要专门的流媒体服务器,和传输协议
    • 顺序流式传输(progressive streaming)顺序流式传输是顺序下载,在下载文件的同时用户可观看在线媒体,在给定时刻,用户只能观看已下载的那部分,而不能跳到还未下载的前头部分,在传输期间不根据用户连接的速度对下载顺序做调整。
  • RTSP :命令和数据分离管道
  • RTMP:命令和数据公用同一管道
  • MPEG:一种编码标准,mpeg并不是对每格视频进行压缩,而是以秒为单位,将时段内的每一格视频做比较,由于一般视频内容都是背景变化小,主体变化大,mpeg技术就是应用于这个特点,以一幅视频为主图,其余视频格只是记录参考资料及变化数据,更有效记录动态视频。
    MPEG只规定比特流的格式与解码精确度(即规定解码的方法),而任何人可依照MPEG标准以不同方式实现编码器(程序)。除了可减少因编码专利造成的商业利益纠纷外,MPEG标准的主要目的在于确保不同的编码器所产生的比特流可被其他解码器正确的解码,只要此比特流匹配标准。
  • 编码格式表


    1、FFMpeg_第1张图片
    image.png
  • 像素(pixel):视频显示的最小单位
  • 分辨率:是屏幕图像的精密度,是指显示器所能显示的所有像素有多少。
    • 显示分辨率:显示屏能显示的像素,显示分辨率一定的情况下,显示屏越小图像越清晰,反之,显示屏大小固定时,显示分辨率越高图像越清晰。
    • 视频分辨率:视频的像素
      例如:1080P,意思是1920 x 1080的视频
  • 转码率:完整视频通过压缩算法压缩时,压缩比例越大,还原后的失真越大,因为压缩过程中不可避免的丢失了视频中原来的图像数据信息,码率(bps(bit per second))就是在压缩视频的时候指定一个参数,告诉压缩软件,期望压缩后的视频的大小,平均每秒多少个比特位。
    • 例如:100分钟 1GB的视频,
      100min = 100 * 60 = 6000s
      1GB=1024MB=10241024KB = 102410241024Byte = 1024102410248bit = 8589934592bit
      那么这个视频的码率就是 1.4Mbit/s (8589934593/6000) = 1431655 bit/s
  • 视频格式:是指用什么样的方式把视频和音频数据打包成一个文件。


    1、FFMpeg_第2张图片
    image.png
  • 视频播放流程:


    1、FFMpeg_第3张图片
    image.png
    • 解协议:是指播放网络视频的时候协议网络协议:如HTTP,RTMP等,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。
    • 解封装:就是将输入的封装格式的数据分离成音频流压缩编码数据和视频流压缩编码数据。demux
    • 解码:将音/视频压缩编码数据,解码成非压缩的原始数据,decode
    • 视频音频同步:接封装中得到的参数信息,同步解码出来的音/视频数据,getframe
  • 帧率:就是fps(frame per second)每秒更新的次数
  • YUV:是图像的编码格式,Y是亮度 UV是色彩饱和度
    • YUV444: 每四个Y采样就采样四个UV 总字节大小:heightwidth3
    • YUV420:每四个Y采样就采样一个UV 总字节大小:heightwidth(1/4+1/4+2/2)相当于(u:v:y)
    • YUV422:每两个Y采样就采样一个UV 总字节大小:heightwidth(1/2+1/2+2/2)
      1、FFMpeg_第4张图片
      image.png

你可能感兴趣的:(1、FFMpeg)