分享大佬FFmpeg4.2.1 编译、生成.so库,以及Android移植的文章(仅作记录)

分享大佬FFmpeg4.2.1 编译、生成.so库,以及Android移植的文章(仅作记录),第1张

相对全网搜索到的过时或混乱的抄改,这里有大佬原文,奶爸级教程,且各种常见问题的解决都有涉猎,就不班门弄斧了。

https://githubcom/AnJiaoDe/ffmpeg421_so

1连上服务器 找出发包进程kill掉(这一步做不到可以无视) 2数据备份(有重要数据的话) 3重做系统 4还原数据 5做好安全防护(iptables禁用不用的端口,不需要的服务关闭,升级bash最近有漏洞)

此教程用于新人使用ffmpeg进行音视频合成

1打开 "编辑系统环境变量"

2打开 "环境变量"

3在系统变量中选择"Path",点击"编辑"

4点击"新建",将ffmpegexe所在的文件夹路径添加进去,然后注意连续3个确定后才算成功添加

1、首先需要说明的是,不能用exec命令。他会在客户端推流结束的同时自动终止调用的外部程序,结果就是最后ffmpeg无法进行完整的编码。该命令只适合将接到的流转推到其他地址。

2、应该使用exec_record_done配合record命令使用。即在录制结束之后自动对已录制的文件进行转码操作得到MP4文件。根据是否使用record_interval命令又有两种不同的情况。

2A、若不使用record_interval,则会在推流停止后(即record完全停止后)才进行转码,在这之前得不到任何输出

2B、若使用record_interval,即可设置每隔一段时间就重新开始录制,结合record_append on命令,可确保最后录制的视频都在一个文件中,否则就会给每段录制都生成一个单独的文件。使用这两个命令之后,转码也会相应地每隔一段时间就进行一次,但最后都输出(覆盖)到同一个文件中。优点是能近乎“实时”地进行转码,缺点是会重复调用ffmpeg,占用系统资源。

3、需要注意的是,以上两种方法最后得到的转码文件(的时长)是相同的。

4、nginxconf配置示例

[html] view plain copy

application hls {

live on;

hls on;

record all;

record_path /home/zhanghui/test;

#record_interval 10s;

#record_append on;

hls_path /tmp/app;

hls_fragment 5s;

# convert recorded file to mp4 format

exec_record_done '/usr/local/bin/ffmpeg' -y -i /home/zhanghui/test/livestreamflv -vcodec libx264 -f mp4 /home/zhanghui/test/test_recordmp4 2>>/home/zhanghui/test/test_recordlog;

}

AVC/H264的编码格式,封装格式一般为MP4

可以选择FFmpeg,这是目前几乎最强大的音视频编码工具,支持丰富的编码格式和封装格式,并且均完美支持Windows/Mac/Linux三大操作系统平台。而且网上也有常用参数的使用教程可供参考。

以下示例是ffmpeg工具mkv转MP4的语法参数:

ffmpeg -i xxxmkv -vcodec libx264 -b:v <bitrate value> -acodec aac -ab 192k xxxxmp4

注释:

ffmpeg -输入参数 源文件名mkv -指定编码器参数 libx264 -指定视频码率参数 码率值(参考源文件码率)-指定音频编码器 aac -音频码率参数 192k 输出文件名mp4

ffmpeg -i xxxmkv -vcodec libx264 -crf <0-51> -acodec aac -ab 192k xxxxmp4

注释:

ffmpeg -输入参数 源文件名mkv -指定编码器参数 libx264 -恒定质量参数 数值(数值范围0-51任选其一,数值大小可参考源文件码率,过低数值会造成码率过高而浪费且容量剧增,过高数值会造成画质严重损失)-指定音频编码器 aac -音频码率参数 192k 输出文件名mp4

网上大部分编译windows版ffmpeg的教程都是基于msys+mingw的,完全运行在windows上。由于msys2的性能实在是太糟糕了,编译速度太感人,因此决定研究Linux下使用mingw-w64交叉编译

先是安装ubuntu版的mingw-w64

sudo apt install mingw-w64

然后在configure ffmpeg的时候,在正常的配置项之后加上。

--arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32-

上面是32位库编译的配置,64位的如下

--arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32-

而且最好使用动态库,静态库还需要链接一大堆mingw的库实现,而且还可能链接失败。但这样编译出来的动态库,还需要依赖 libgcc_s_sjlj-1dll。如果要移除这个依赖,configure的时候还要加上 --extra-ldflags='-static-libgcc'

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 分享大佬FFmpeg4.2.1 编译、生成.so库,以及Android移植的文章(仅作记录)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情