标准
ITU-T 国际电信联盟电信标准分局下的 VCEG 视频编码专家组
ISO 国际标准化组织下属分支机构的 MPEG 动态图像专家组
两家成立联合视频编码组JVI
2003年 H.264/MPEG-4 标准
2013年 H.265
2021年发布了H.266标准
FFmpeg
是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
采用LGPL或GPL许可证
格式转换
提取图像
图像变为动图
Fast Forward
Moving Pitcture Expert Group 是一种流行的视频格式--后缀.mp4
历史
基于C语言的开源框架--音频-视频-图像和字幕
Linux 1991年10月5日,林纳斯·托瓦兹在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生
1995年,Red Hat公司成立,他们发布了一个基于Red Hat Linux的商业发行版
Git Linus Torvalds于2005年以GPL(GNU通用公共许可证)发布 (2002年至2005年使用 BitKeeper)
FFMpeg
2000年第一个版本发布,法国FabriceBellard发起
2013年 FFmpeg2.0发布
2023年 FFmpeg6.0发布
参数说明 codecs 编码器
Encoder编码 Muxing 封装 编码器-encoder
Decoder解码 Demuxing 解封装
传播过程
比特率-- 码率: 单位时间内传输数据大小 bit/s
人眼看到的视频画面质量
帧率--每秒显示多少帧-每秒传输的帧数--流畅感 frame width height frame_size
刷新率--只每秒刷新次数--图像稳定不容易闪烁
采样率--多用于音频--采样频率,声音信号的连贯和清晰 sample_rate
时间基准
过程
01. 调动工具--调用命令行
已经编译好的FFmpeg包,依赖glibc库
shared 包提供头文件和东台路,不带shared包只有可执行程序
02. 调用函数
03. 对源码进行二次修改
内部
编解码--编码和解码
format 格式
crosstool-ng,这款工具用于交叉编译工具链的制作
Windows环境,使用MSYS2,可以使用预编译好的crosstool-ng软件包
构成
Libraries Tools
libraries : libavfilter 滤镜子系统 过滤器等
本身含的滤镜
第三方滤镜--例如水印路径 字幕滤镜
bin/
ffplay 相当于播放器 --没有桌面的的服务器不能播放--No such audio device
ffprobe 程序是一个音视频 分析工具
av audio video 音频和视频
传感器
摄像头:
USB 摄像头
IPC 网络摄像头 网络摄像机又叫IP CAMERA(简称IPC IPC(Internet Protocol Camera,网络摄像头),
网络摄像头简称WEBCAM ,英文全称为WEB CAMERA
USB 摄像头一般都是 WebCam USB 接在网关或主机上,比如 Linux 下: /dev/video0, /dev/video1
IPC 网络摄像头
绝大部分都支持 ONVIF 协议 输入用户名和密码,自动获取 StreamURI;
不支持 ONVIF 协议,可以采用 RTSP 协议进行对接 必须要知道摄像头流播放地址,就是 StreamURI ;
Stream URI是指用于标识和访问流媒体资源的统一资源标识符(URI
POE 供电的网络摄像头-以太网供电,这样就不需要为摄像头拉电源线和转换器
POE(Power over Ethernet)是一种通过以太网电缆同时传输数据和电力的技术,
广泛应用于网络设备如IP电话、无线接入点(AP)、网络摄像机等
即点即播,一旦有客户端发起点播指令,应该在 几百毫秒 之内完成 采集->编码->解码->视频流
没有点播/直播时,要处于 suspend 或 standby 的状态,以便节省计算和网络资源
协议:
ONVIF(Open Network Video Interface Forum)协议,即开放型网络视频接口论坛协议
定义通用协议,包括装置搜寻、实时视频、音频、元数据和控制信息等
实时流传输协议(Real Time Streaming Protocol,RTSP
WebRTC (Web Real-Time Communications) 是一项实时通讯技术
WebRTC为浏览器间的点对点实时音视频交流提供原生支持
种允许网页直接进行实时音视频通信和数据共享的技术
软件
Camhi
ThingsBoard 是一个基于Java的开源物联网平台,旨在实现物联网项目的快速开发、管理和扩展
规则链(Rule Chains)是 ThingsBoard 中一个关键的特性
编写过程中的bug
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
ffmpeg的参数结构包括三个部分,分别为
global_options: 全局参数
[input_file_options:输入参数(可为空)] -i input_url:输入url
[output_file_options: 输出参数(可为空)] output_url:输出url
帧率(Frame Rate)是指每秒钟显示的帧数,通常以fps(Frames Per Second)
^ ffmpeg -framerate 30 -i images/%d.jpg -c:v libx264 -pix_fmt yuv420p output_video01.mp4
ffmpeg -r 30 -i images/%d.jpg -c:v libx264 -pix_fmt yuv420p -r 30 output_video04.mp4
> ffmpeg -i images/%d.jpg -framerate 30 -c:v libx264 -pix_fmt yuv420p output_video02.mp4
ffmpeg -i images/%d.jpg -framerate 30 -c:v libx264 -pix_fmt yuv420p -r 30 output_video03.mp4
ffmpeg -i images/%d.jpg -r 30 -c:v libx264 -pix_fmt yuv420p -r 30 output_video03.mp4
如果未指定帧率,默认为25,在i 后设置全局变量不生效
fps=30表示输出图像的帧率为30帧每秒
To force the frame rate of the input file (valid for raw formats only) to 1 fps and the frame rate of the output file to 24 fps:
ffmpeg -r 1 -i input.m2v -r 24 output.avi
命令行的全局变量
全局参数 输入输出参数,那就作为一般参数处理
参数选项由三部分组成:
可选的一组全局参数、
一组或多组输入文件参数、
一组或多组输出文件参数,
其中,每组输入文件参数以‘-i’为结束标记;每组输出文件参数以输出文件名为结束标记
-c codec:指定解码器,需使用能力集列表中的名称
-map:一条ffmpeg命令中,可能有多个输入和输出。-map指定哪个输入对应哪个输出。如果没有使用-map进行指定,那么会使用默认的方法进行指定
ffmpeg:这个是可执行程序本身,可以是绝对路径,如上一篇中的/opt/ffmpeg/_build/bin/ffmpeg
[global_options]:这个是全局参数部分,如指定日志级别等
{[input_file_options] -i input_url}:这部分是输入参数部分,也可以理解为视频源部分,这部分可以指定一个或多个视频源及参数,需要注意的是参数在前,-i 后面是视频源的路径
{[output_file_options] output_url}:这部分是输入部分,指定输出的格式及其参数,同样可以指定一个或多个,参数在前,输出文件在后,但这里没有“-i”这样的标记参数
参考
https://git.ffmpeg.org/ffmpeg.git
https://github.com/FFmpeg/FFmpeg