zoukankan      html  css  js  c++  java
  • iOS:FFmpeg视频播放和直播框架

    视频直播和播放转码器框架:FFmpeg是处理多媒体内容的库和工具的集合。例如音频,视频,字幕和相关的元数据。

    一、介绍:

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。
    它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
    FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,现在由Michael Niedermayer维护。
    许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
    简单来说,FFmpeg是一个免费的多媒体框架,可以运行音频和视频多种格式的录影、转换、流功能,能让用户访问几乎所有视频格式,包括mkv、flv、mov,VLC Media Player、Google Chrome浏览器都已经支持。

    二、详情:

    构成

    1、libavfilter: 提供了一种通过滤波器链更改解码的音频和视频的方法,所有的音视频的后期滤镜处理都是由它完成的。

    2、libavformat:对多媒体格式的解析和封装。实现流协议,容器格式和基本I / O访问。

    3、libavutil: 一些常用的工具,包括哈希,解压缩器和其他实用程序功能。

    4、libpostproc:用于后期的效果处理

    5、libavresample:移植的库,对音频进行重采样的

    6、libswscale:对视频的操作,实现颜色转换和缩放例程。

    7、libswresample:对音频的操作,实现音频混合和重采样例程。

    8、libavdevice: 提供访问捕获和回放设备的抽象。对设备做处理的、如视频的采集,音频的采集、桌面的采集

    9、libavcodec:提供了更多编解码器的实现。

    [ffmpeg](https://ffmpeg.org/ffmpeg.html)是一个命令行工具箱,用于操作,转换和流式传输多媒体内容。

    [ffplay](https://ffmpeg.org/ffplay.html)是一种简约的多媒体播放器。

    [ffprobe](https://ffmpeg.org/ffprobe.html)是用于检查的简单分析工具多媒体内容。

    [ffserver](https://ffmpeg.org/ffserver.html)是多媒体流服务器进行直播,一般用来搭建流媒体服务。

    其他小工具,例如“ aviocat”,“ ismindex”和“ qt-faststart”。

    //命令
    ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
    built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
    configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
    
    默认的配置如下:
    --enable-shared               启用shared
    -enable-pthreads              启用pthreads
    --enable-gpl                  启用gpl
    --enable-version3             启用version3
    -enable-hardcoded-tables      启用hardcoded-tables
    --enable-avresample --cc=clang --host-cflags= --host-ldflags=     启用avresample
    --enable-libmp3lame           启用libmp3lame 
    --enable-libx264              启用libx264 
    --enable-libxvid              启用libxvid
    --enable-opencl               启用opencl
    --disable-lzma                禁用lzma
    --enable-vda                  启用vda
    
    //使用格式
    usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
    
    1、Getting help:
    -h             打印基本选项
    -h long        打印更多选项
    -h full        打印所有选项(包括所有格式和编解码器特定的选项,很长)
    -h type=name   打印命名解码器/编码器/解复用器/复用器/过滤器的所有选项
    
     
    2、Print help / information / capabilities:(打印帮助/信息/功能:)
    -L                 显示证书
    -h topic           显示帮助
    -? topic           显示帮助
    -help topic        显示帮助
    --help topic       显示帮助
    -version           显示版本
    -buildconf         显示构建配置
    -formats           显示可用格式
    -devices           显示可用设备
    -codecs            显示可用的编解码器
    -decoders          显示可用的解码器
    -encoders          显示可用的编码器
    -bsfs              显示可用的比特流过滤器
    -protocols         显示可用的协议
    -filters           显示可用的过滤器
    -pix_fmts          显示可用的像素格式
    -layouts           显示标准频道布局
    -sample_fmts       显示可用的音频样本格式
    -colors            显示可用的颜色名称
    -opencl_bench      在所有OpenCL设备上运行基准测试并显示结果
    -sources device    列出输入设备的来源
    -sinks device      列出输出设备的接收器
    -hwaccels          显示可用的硬件加速方法
     
    3、Global options (affect whole program instead of just one file:(全局选项(影响整个程序,而不仅仅是一个文件:))
    -loglevel loglevel     设置日志记录级别
    -v loglevel            设置日志记录级别
    -report                生成报告
    -max_alloc bytes       设置单个分配块的最大大小
    -opencl_options        设置OpenCL环境选项
    -y                     覆盖输出文件
    -n                     永远不会覆盖输出文件
    -ignore_unknown        忽略未知的流类型
    -stats                 编码过程中的打印进度报告
    -max_error_rate        错误率(0.0:无错误,1.0:100%错误最大错误率)
    -bits_per_raw_sample number  设置每个原始样本的位数
    -vol volume            更改音量(256 =正常)
    
    4、Per-file main options: (每个文件的主要选项:)
    -f fmt                 强制格式
    -c codec               编解码器名称
    -codec codec           编解码器名称
    -pre preset            预设名称
    -map_metadata outfile[,metadata]:infile[,metadata]  设置infile中outfile的元数据信息
    -t duration             记录或转码音频/视频的“持续时间”秒
    -to time_stop           记录或转码停止时间
    -fs limit_size          设置限制文件大小(以字节为单位
    -ss time_off            设置开始时间偏移
    -sseof time_off         设置相对于EOF的开始时间偏移
    -seek_timestamp         使用-ss按时间戳启用/禁用查找
    -timestamp time         设置录制时间戳(“现在”设置当前时间)
    -metadata string=string 添加元数据
    -program title=string:st=number...  添加具有指定流的程序
    -target type           指定目标文件类型(带有可选前缀“ pal-”,“ ntsc-”或“ film-”的“ vcd”,“ svcd”,“ dvd”,“ dv”或“ dv50”)
    -apad                  音垫
    -frames number         设置要输出的帧数
    -filter filter_graph   设置流filtergraph
    -filter_script filename  从文件中读取流filtergraph描述
    -reinit_filter           输入参数更改时重新初始化filtergraph
    -discard                 丢弃
    -disposition             部署
    
    5、Video options:(视频选项:)
    -vframes number         设置要输出的视频帧数
    -r rate                 设置帧频(Hz值,分数或缩写)
    -s size                 设置帧大小(WxH或缩写)
    -aspect aspect          设置纵横比(4:3、16:9或1.3333、1.7777)
    -bits_per_raw_sample number  设置每个原始样本的位数
    -vn                          禁用视频
    -vcodec codec                强制视频编解码器(“复制”以复制流) 
    -timecode hh:mm:ss[:;.]ff    设置初始TimeCode值。
    -pass n                      选择通行证编号(1至3)
    -vf filter_graph             设置视频过滤器
    -ab bitrate                  音频比特率(请使用-b:a)
    -b bitrate                   视频比特率(请使用-b:v) 
    -dn                          禁用数据
    
    6、Audio options:(音频选项:)
    -aframes number          设置要输出的音频帧数
    -aq quality              设置音频质量(特定于编解码器)
    -ar rate                 设置音频采样率(以Hz为单位)
    -ac channels             设置音频通道数
    -an                      禁用音频
    -acodec codec            强制音频编解码器(“复制”以复制流)
    -vol volume              更改音量(256 =正常)
    -af filter_graph         设置音频过滤器
    
    7、Subtitle options:(字幕选项:)
    -s size               设置帧大小(WxH或缩写)
    -sn                   禁用字幕
    -scodec codec         强制字幕编解码器(“复制”以复制流)
    -stag fourcc/tag      强制字幕标签/ fourcc
    -fix_sub_duration     修正字幕的持续时间
    -canvas_size size     设置画布大小(WxH或缩写)
    -spre preset          将字幕选项设置为指示的预设   

    三、说明:

    本demo中的FFmpeg已经编译过了,可以随意拖入到项目中,添加需要的库文件和框架就可以build success。
     

    四、编译:

    如果本机已经安装过FFmpeg,可以自己去下载脚本进行编译,然后将编译的文件集成到项目中。需要先下载编译脚本:https://github.com/kewlbear/FFmpeg-iOS-build-script。然后进入该文件目录,运行命令行./build-ffmpeg.sh。常见编译错误请挪步参考:https://www.jianshu.com/p/5d20e2a50faa。


    五、拓展:

    FFmpeg既有转码的功能,本身也具有视频媒介的特性,可以作为播放器使用。其实,ijkplayer是一个挺不错的视频直播和播放的框架。它仅仅使用FFmpeg进行视频的转码,自己作为一个播放器进行播放. ijkplayer框架集成可以看博客:http://www.cnblogs.com/XYQ-208910/p/5856815.html


    六、演示:

    在控制器中给出视频文件,点击按钮即可播放,显示帧数和时间

    网络视频                      网络直播

         

    github源码下载:https://github.com/xiayuanquan/FFmpegDemo

  • 相关阅读:
    ASP.NET页面打印技术的总结
    js传递中文参数的url到asp(jscript)解释得到的中文参数为乱码的解决方法
    header的用法(PHP)
    oracle 11g road(/dev/shm需注意)
    mysql 主从同步 Error 'Out of range value for column的问题
    linux shell 过滤特殊字符开始的行
    Oracle穿越incarnation恢复数据
    多普达A6388刷机2.3
    【忽悠普通人用】隐藏文件夹的方法
    电脑同时使用双网卡实现方法
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/5857239.html
Copyright © 2011-2022 走看看