概述
一些基础理论知识准备
致敬雷神
[总结]FFMPEG视音频编解码零基础学习方法
https://blog.csdn.net/leixiaohua1020/article/details/15811977
http://bbs.eeworld.com.cn/thread-506472-1-1.html
FFMPEG命令行相关
https://www.jianshu.com/p/4178472bea67
https://blog.csdn.net/MoeDisk/article/details/83140673
FFmpeg官网: http://www.ffmpeg.org
FFmpeg doc : http://www.ffmpeg.org/documentation.html
FFmpeg wiki : https://trac.ffmpeg.org/wik
推流延迟
https://www.cnblogs.com/tla001/p/7040344.html
总体框架图
音视频编码基本原理(理论部分)
https://blog.csdn.net/leixiaohua1020/article/details/28114081
视频压缩编码的方式:
视频压缩的主要依据:
数据冗余。例如如空间冗余、时间冗余、结构冗余、信息熵冗余等,即图像的各像素之间存在着很强的相关性。消除这些冗余并不会导致信息损失,属于无损压缩。
视觉冗余。人眼的一些特性比如亮度辨别阈值,视觉阈值,对亮度和色度的敏感度不同,使得在编码的时候引入适量的误差,也不会被察觉出来。可以利用人眼的视觉特性,以一定的客观失真换取数据压缩。这种压缩属于有损压缩。
变换编码:主要是将空间域描述的图像信号变换到频率域,然后对变换后的系数进行编码处理,,图像在空间上具有较强的相关性,变换到频率域可以实现去相关和能量集中.用DTC变换,可以得到DTC的系数矩阵,然后再根据人眼对频率的敏感程度,进行量化,DCT系数经过量化之后大部分经变为0,而只有很少一部分系数为非零值,此时只需将这些非0值进行压缩编码即可。
熵编码: 其基本原理是对信源中出现概率大的符号赋予短码,对于出现概率小的符号赋予长码,从而在统计上获得较短的平均码长。
运动估计和运动补偿:这两种方法主要利用帧间图像的在时间上的相关性,去减少数据量.
运动估计:一般将当前的输入图像分割成若干彼此不相重叠的小图像子块,然后在前一图像或者后一个图像某个搜索窗口的范围内为每一个图像块寻找一个与之最为相似的图像块。
运动补偿:通过计算最相似的图像块与该图像块之间的位置信息,可以得到一个运动矢量。这样在编码过程中就可以将当前图像中的块与参考图像运动矢量所指向的最相似的图像块相减,得到一个残差图像块,由于残差图像块中的每个像素值很小,所以在压缩编码中可以获得更高的压缩比。这个相减过程叫运动补偿。
实际上就是在处理连续的帧时,依据当前帧跟前后帧的差值进行编码.节约计算量.
混合编码:就是结合前几种方式.
下图给出了混合编码(即变换编码+ 运动估计和运动补偿+ 熵编码)的模型。该模型普遍应用于MPEG1,MPEG2,H.264等标准中
音频编码基本原理
比特:bit(比特)是表示信息的最小单位,一个Byte由8 bits组成
比特数:“比特数”是这样一个单位,16比特就是指把波形的振幅划为2的16次方即65536个等级,根据模拟信号的轻响把它划分到某个等级中去,就可以用数字来表示了。
比特率:比特率是指每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,每秒传送数据就越多,
量化:量化在数字信号处理领域,是指将信号的连续取值(或者大量可能的离散取值)近似为有限多个(或较少的)离散值的过程。要采用四舍五入的方法将每一个采样值归并到某一个临近的整数,这样就可以用一定字长的二进制码来表示采样值,这种取有限个数值近似地表示某一连续变化信号的过程称为量化。
采样大小:量化过程中有多少个等级。常用16bit ,2的16次方。
压缩依据:冗余信息,强频对弱频的遮蔽效应。
压缩方法
对每一个音频声道中的音频采样信号,首先都要将它们映射到频域中,这种时域到频域的映射可通过子带滤波器实现。每个声道中的音频采样块首先要根据心理声学模型来计算掩蔽门限值, 然后由计算出的掩蔽门限值决定从公共比特池中分配给该声道的不同频率域中多少比特数,接着进行量化以及编码工作,最后将控制参数及辅助数据加入数据之中,产生编码后的数据流。
实践环节
win下先测试
在win下基于obs软件进行推流,推流到已经开通好流媒体服务的阿里云服务器上,再用vlc软件进行拉流。
具体软件操作参考阿里云的帮助文档
https://help.aliyun.com/document_detail/98333.html?spm=a2c4g.11186623.6.585.1bfb132eMde7ur
https://help.aliyun.com/document_detail/52142.html?spm=a2c4g.11186623.2.17.7a0a6812lk1bN2
https://help.aliyun.com/document_detail/45212.html?spm=a2c4g.11186623.2.15.7a0a6812lk1bN2
树莓派下
先上参考链接
https://blog.csdn.net/weixin_42534940/article/details/89302092
https://blog.csdn.net/zimengyu2020/article/details/106035285/
还参考了一些其他的,今天累了不整理了,网上挺多的
配置阿里云流媒体服务器
这里就略过了,可以看阿里云的帮助文档
在阿里云流媒体服务器的直播管理可以生成推流地址和播流地址
装好ffemp之后
FFmpeg采集树莓派USB摄像头
转码推送RTMP流(H264)
使用 h264_omx 硬件加速
ffmpeg -framerate 15 -video_size 640x480 -i /dev/video0 -vcodec h264_omx -f flv rtmp://push1.test.etonetech.com/app/stream?auth_key=1591201865-0-0-10c18d7a944c20464b370fa16ba31e13(这里为推流的地址)
这个地址有效时长默认是一个小时,阿里云服务器里可以调有效时长
成功命令记录
sudo apt-get install libx264-dev
wget http://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
sudo tar jxvf ffmpeg-4.1.tar.bz2
cd ffmpeg-4.1/
sudo ./configure --prefix=/opt/ffmpeg --enable-shared --enable-pthreads --enable-gpl --enable-avresample --enable-libx264 --disable-yasm
sudo make
sudo make install
ffmpeg(测试是否安装好ffmpeg)
sudo apt-get install libsdl2-dev
最终调用指令
ffmpeg -framerate 15 -video_size 640x480 -i /dev/video0 -vcodec h264_omx -f flv rtmp://push1.test.etonetech.com/app/stream?auth_key=1591201865-0-0-10c18d7a944c20464b370fa16ba31e13
最后
以上就是无奈树叶为你收集整理的树莓派基于ffmpeg+阿里云流媒体服务器实现视频直播的全部内容,希望文章能够帮你解决树莓派基于ffmpeg+阿里云流媒体服务器实现视频直播所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复