嵌入式linux下的FFmpeg交叉编译(最全面)

FFmpeg介绍

当下直播应用很火,在音视频领域,FFmpeg相当知名。可能你用的一些视频播放器背后都有它的身影。FFmpeg是一个开源的跨平台多媒体处理工具,可以用于处理音视频流、转码、封装、解封装等操作,且支持多种格式和协议。它的视频采集功能也非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,且支持直播应用。

嵌入式linux下的FFmpeg交叉编译(最全面)_第1张图片

常见用途

1. 转码:将一种格式的音视频文件转换为另一种格式,例如将MP4文件转换为AVI文件,或将H.264编码的视频转换为VP9编码的视频等。(解码,音视频播放器内核)

2. 剪辑:从一个音视频文件中截取出一段或多段内容,例如将一个长视频剪辑成多个短视频,或将一段音频剪辑出来作为铃声等。

3. 抓取:从摄像头或屏幕等设备中抓取音视频流,例如将摄像头的视频流抓取下来进行录制或直播等。(音视频采集)

4. 处理:对音视频流进行处理,例如添加水印、字幕、特效等,或进行降噪、去抖动、降低码率等处理。

5. 分离和合并:将一个音视频文件中的音频和视频分离出来,或将多个音视频文件合并成一个文件。(格式转换)

6. 直播:将音视频流实时推送到服务器上,或从服务器上拉取音视频流进行实时播放。

举例:在Linux平台上,ffmpeg对V4L2的视频设备提供了很好的支持。如: 

./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp

以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集,采集QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为H263,输出格式为RTP,后面定义了IP地址及端口,将该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器(如live555)就可以实现直播了。

FFmpeg提供了libavformat库,其中包含了RTSP协议的实现,可以直接使用该库来拉取RTSP流。在使用FFmpeg拉取RTSP流时,可以使用类似如下的命令:

ffmpeg -i rtsp://xxx.xxx.xxx.xxx/xxx -c copy output.mp4

其中, rtsp://xxx.xxx.xxx.xxx/xxx 是RTSP流的URL地址, -c copy 表示直接复制流数据,不进行编解码, output.mp4 是输出文件名。除了命令行方式,FFmpeg还提供了API接口,可以在程序中使用该接口来拉取RTSP流。

总之,FFmpeg是一个功能强大的多媒体处理工具,可以用于处理各种音视频文件,提供了丰富的功能和API,可以满足各种多媒体处理需求。

下载地址

Download FFmpeg

GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git

模块组成

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源工具组合。

它包含一系列的模块。

嵌入式linux下的FFmpeg交叉编译(最全面)_第2张图片

 1. libavcodec:音视频编解码库,提供了多种编解码器,可以支持多种音视频格式的编解码操作。 
 
2. libavformat:音视频封装和解封装库,提供了多种封装格式的支持,可以读取和写入多种音视频文件格式。 
 
3. libavfilter:音视频过滤器库,提供了多种音视频过滤器,可以对音视频流进行各种处理,如添加水印、调整亮度、对比度等。 
 
4. libavdevice:音视频输入输出设备库,提供了多种输入输出设备的支持,如摄像头、麦克风等。 
 
5. libswscale:视频图像缩放库,提供了多种图像缩放算法,可以对视频图像进行缩放操作。 
 
6. libswresample:音频重采样库,提供了多种音频重采样算法,可以对音频进行重采样操作。

7.libavutil:包含一些公共的工具函数。

8. libswscale:用于视频场景比例缩放、色彩映射转换。

9.libpostproc:用于后期效果处理。

10.ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等。

11.ffsever:一个 HTTP 多媒体即时广播串流服务器。

12.ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示。

这些模块可以单独使用,也可以组合使用,实现各种音视频处理操作。例如,可以使用libavcodec进行音视频编解码,使用libavformat进行音视频封装和解封装,使用libavfilter进行音视频过滤操作等。FFmpeg提供了丰富的模块组合。

编译步骤

以下是使用ffmpeg编译的步骤:

1.首先,您需要下载ffmpeg的源代码。您可以从官方网站(https://ffmpeg.org/download.html)下载最新版本的源代码。 

2. 下载完成后,您需要解压缩源代码。可以使用以下命令解压缩: tar -zxvf ffmpeg-xxx.tar.gz 其中,xxx是ffmpeg版本号。

3. 接下来,您需要安装一些编译工具和依赖库。您可以使用以下命令安装: sudo apt-get install build-essential sudo apt-get install libmp3lame-dev libx264-dev libopus-dev libvpx-dev libssl-dev

4. 安装完成后,您可以进入解压缩后的ffmpeg目录,并使用以下命令编译: ./configure --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libopus --enable-libvpx --enable-openssl

make, make install

以上命令将启用一些常用的编解码器和库,如MP3、H.264、Opus和VP8/VP9。如果您需要其他功能,请查看ffmpeg文档并相应地配置。libopus是一个开源的音频编解码器,它提供了高质量的语音和音乐编码。libvpx是一个开源的视频编解码器,它提供了高质量的视频编码和解码。它们都是在ffmpeg中支持的编解码器之一。 libssl是一个加密库,它提供了安全的套接字层(SSL)和传输层安全(TLS)协议的实现。在ffmpeg中使用libssl可以支持HTTPS协议。 如果您需要支持HTTPS协议,则需要安装libssl。如果您不需要支持HTTPS协议,则可以不安装libssl。

5. 编译完成后,您可以使用以下命令验证是否成功安装: ffmpeg -version 如果成功安装,将显示ffmpeg的版本信息。  

注:(视频用 libx264,音频用 libmp3lame。但是基于默认配置而编译的 ffmpeg 不包含这俩编码器,他们属于第三方编码器,linux的x64直接sudo安装依赖即可,但若交叉编译,则需要自己下载这俩编码器的源码,自己先编译成库供FFmpeg使用。)

依赖的三方库地址

lame:

官网在这里 https://lame.sourceforge.io/
页面链接到这里:https://sourceforge.net/projects/lame/files/lame/
本人下载的版本是 3.100 ( lame-3.100.tar.gz )

x264:

通过 git 克隆一份
git clone http://git.videolan.org/git/x264.git

以下使用的FFmpeg,用的 ffmpeg 4.4版本为例。

常用编译选项介绍

fmpeg的常用编译参数如下:

- --enable-shared:启用共享库的编译,生成.so文件,可以被其他程序调用。

- --enable-static:启用静态库的编译,生成.a文件,可以被其他程序静态链接。 - --enable-gpl:启用GPL许可证的代码。

- --enable-version3:启用LGPLv3许可证的代码。

- --enable-libx264:启用x264编解码器。

- --enable-libx265:启用x265编解码器。

- --enable-libvpx:启用VP8/VP9编解码器。

- --enable-libopus:启用Opus编解码器。

- --enable-libmp3lame:启用MP3编码器。

- --enable-libfdk-aac:启用AAC编码器。

- --enable-libvorbis:启用Vorbis编码器。

- --enable-libtheora:启用Theora编码器。

- --disable-yasm:禁用yasm汇编优化。

- --disable-asm:禁用汇编优化。

其中,--enable-shared、--enable-static、--enable-gpl、--enable-version3、--disable-yasm这些选项是比较重要的。

如果需要使用x264、x265、VP8/VP9、Opus等编解码器,则需要启用相应的选项。如果需要精简体积和提高速度,可以禁用一些不必要的编解码器和过滤器,例如--disable-libvpx、--disable-libtheora等。但是,禁用汇编优化可能会影响编解码性能,因此x86或x64下不建议禁用汇编优化。若是嵌入式平台移植需要,则需要禁用汇编。

编译过程

配置参数

#!/bin/sh
 
../ffmpeg-4.4/configure \
	--prefix=`pwd`/../ffmpegbuild \
    --target-os=linux
    --arch=x86_64
	--enable-gpl \
	--enable-version3 \
	--disable-stripping \
	--disable-asm \
	--enable-shared \
	--enable-libmp3lame \
	--extra-cflags="-I`pwd`/../lamebuild/include" \
	--extra-ldflags="-LIBPATH:`pwd`/../lamebuild/lib" \
	--enable-libx264 \
	--extra-cflags="-I`pwd`/../x264build/include" \
	--extra-ldflags="-LIBPATH:`pwd`/../x264build/lib"
 
make -j6 && make install && echo OOOOOOOOKKKKKKKKKKKKKK!!!!!!!!!!

注:--enable-gpl含义,该选项启用了GPL许可证的代码。--enable-version3选项是与--enable-gpl选项相关的。如果您启用了--enable-gpl选项,那么您可以选择启用--enable-version3选项,以允许使用LGPLv3许可证的代码。LGPLv3是一种自由软件许可证,它比GPLv2更严格,并且允许链接到不同的库。如果您不启用--enable-version3选项,则只能使用LGPLv2.1许可证的代码。

如果不启用--enable-gpl和--enable-version3选项,您仍然可以编译成功,但将无法使用一些GPL许可证或LGPLv3许可证的代码,例如x264、x265、libvpx等编解码器和一些过滤器。这意味着您将无法进行H.264、H.265等常见的视频编码和解码,也无法应用某些过滤器。 如果您只需要使用一些基本的编解码器和过滤器,那么禁用--enable-gpl和--enable-version3选项可能不会对您的应用程序造成太大影响。但是,如果您需要使用某些高级编解码器或过滤器,则必须启用这些选项以便使用它们。此外,如果您使用了启用了GPL许可证的代码,那么您的代码也必须使用GPL许可证发布。

--extra-cflags、 --extra-ldflags 是显示指示模块的头文件与库文件的位置。

--extra-libs 是指定链接到哪个库文件,如果不指定,应该是使用在配置文件里已经设置了的默认值。

x64-linux下编译

在x64平台西编译很简单,安装两个依赖库:

sudo apt-get install  libx264-dev
sudo apt-get install  libmp3lame-dev 

执行configure配置: 

root@hecs-287347:~/test/ffmpeg/ffmpeg-4.4.4$ ./configure --prefix=../ffmpegbuild --enable-shared --enable-libmp3lame --enable-libx264 --enable-gpl --disable-asm --enable-version3

嵌入式linux下的FFmpeg交叉编译(最全面)_第3张图片

如果要支持alsa声卡设备,还需要安装依赖:sudo apt-get install  libasound-dev  

并增加配置选项:--enable-alsa:开启ALSA音频驱动程序支持;

如果要想生成ffplay,需要SDL2库的支持。sudo apt-get install libsdl2-dev 

嵌入式linux下的FFmpeg交叉编译(最全面)_第4张图片

 日志:


root@hecs-287347:~/test/ffmpeg/ffmpeg-4.4.4#
root@hecs-287347:~/test/ffmpeg/ffmpeg-4.4.4# ./configure --prefix=../ffmpegbuild --enable-shared --enable-libmp3lame --e  nable-libx264 --enable-gpl --disable-asm --enable-version3
install prefix            ../ffmpegbuild
source path               .
C compiler                gcc
C library                 glibc
ARCH                      c (generic)
big-endian                no
runtime cpu detection     yes
debug symbols             yes
strip symbols             yes
optimize for size         no
optimizations             yes
static                    yes
shared                    yes
postprocessing support    yes
network support           yes
threading support         pthreads
safe bitstream reader     yes
texi2html enabled         no
perl enabled              yes
pod2man enabled           yes
makeinfo enabled          no
makeinfo supports HTML    no

External libraries:
iconv                   libmp3lame              libx264                 zlib

External libraries providing hardware acceleration:
v4l2_m2m

Libraries:
avcodec                 avfilter                avutil                  swresample
avdevice                avformat                postproc                swscale

Programs:
ffmpeg                  ffprobe

Enabled decoders:
aac                     bitpacked               huffyuv                 pcm_f32le               subrip
aac_fixed               bmp                     hymt                    pcm_f64be               subviewer
aac_latm                bmv_audio               iac                     pcm_f64le               subviewer1
aasc                    bmv_video               idcin                   pcm_lxf                 sunrast
ac3                     brender_pix             idf                     pcm_mulaw               svq1
ac3_fixed               c93                     iff_ilbm                pcm_s16be               svq3
acelp_kelvin            cavs                    ilbc                    pcm_s16be_planar        tak
adpcm_4xm               ccaption                imc                     pcm_s16le               targa
adpcm_adx               cdgraphics              imm4                    pcm_s16le_planar        targa_y216
adpcm_afc               cdtoons                 imm5                    pcm_s24be               tdsc
adpcm_agm               cdxl                    indeo2                  pcm_s24daud             text
adpcm_aica              cfhd                    indeo3                  pcm_s24le               theora
adpcm_argo              cinepak                 indeo4                  pcm_s24le_planar        thp
adpcm_ct                clearvideo              indeo5                  pcm_s32be               tiertexseqvideo
adpcm_dtk               cljr                    interplay_acm           pcm_s32le               tiff
adpcm_ea                cllc                    interplay_dpcm          pcm_s32le_planar        tmv
adpcm_ea_maxis_xa       comfortnoise            interplay_video         pcm_s64be               truehd
adpcm_ea_r1             cook                    ipu                     pcm_s64le               truemotion1
adpcm_ea_r2             cpia                    jacosub                 pcm_s8                  truemotion2
adpcm_ea_r3             cri                     jpeg2000                pcm_s8_planar           truemotion2rt
adpcm_ea_xas            cscd                    jpegls                  pcm_sga                 truespeech
adpcm_g722              cyuv                    jv                      pcm_u16be               tscc
adpcm_g726              dca                     kgv1                    pcm_u16le               tscc2
adpcm_g726le            dds                     kmvc                    pcm_u24be               tta
adpcm_ima_alp           derf_dpcm               lagarith                pcm_u24le               twinvq
adpcm_ima_amv           dfa                     loco                    pcm_u32be               txd
adpcm_ima_apc           dirac                   lscr                    pcm_u32le               ulti
adpcm_ima_apm           dnxhd                   m101                    pcm_u8                  utvideo
adpcm_ima_cunning       dolby_e                 mace3                   pcm_vidc                v210
adpcm_ima_dat4          dpx                     mace6                   pcx                     v210x
adpcm_ima_dk3           dsd_lsbf                magicyuv                pfm                     v308
adpcm_ima_dk4           dsd_lsbf_planar         mdec                    pgm                     v408
adpcm_ima_ea_eacs       dsd_msbf                metasound               pgmyuv                  v410
adpcm_ima_ea_sead       dsd_msbf_planar         microdvd                pgssub                  vb
adpcm_ima_iss           dsicinaudio             mimic                   pgx                     vble
adpcm_ima_moflex        dsicinvideo             mjpeg                   photocd                 vc1
adpcm_ima_mtf           dss_sp                  mjpegb                  pictor                  vc1_v4l2m2m
adpcm_ima_oki           dst                     mlp                     pixlet                  vc1image
adpcm_ima_qt            dvaudio                 mmvideo                 pjs                     vcr1
adpcm_ima_rad           dvbsub                  mobiclip                png                     vmdaudio
adpcm_ima_smjpeg        dvdsub                  motionpixels            ppm                     vmdvideo
adpcm_ima_ssi           dvvideo                 movtext                 prores                  vmnc
adpcm_ima_wav           dxa                     mp1                     prosumer                vorbis
adpcm_ima_ws            dxtory                  mp1float                psd                     vp3
adpcm_ms                dxv                     mp2                     ptx                     vp4
adpcm_mtaf              eac3                    mp2float                qcelp                   vp5
adpcm_psx               eacmv                   mp3                     qdm2                    vp6
adpcm_sbpro_2           eamad                   mp3adu                  qdmc                    vp6a
adpcm_sbpro_3           eatgq                   mp3adufloat             qdraw                   vp6f
adpcm_sbpro_4           eatgv                   mp3float                qpeg                    vp7
adpcm_swf               eatqi                   mp3on4                  qtrle                   vp8
adpcm_thp               eightbps                mp3on4float             r10k                    vp8_v4l2m2m
adpcm_thp_le            eightsvx_exp            mpc7                    r210                    vp9
adpcm_vima              eightsvx_fib            mpc8                    ra_144                  vp9_v4l2m2m
adpcm_xa                escape124               mpeg1_v4l2m2m           ra_288                  vplayer
adpcm_yamaha            escape130               mpeg1video              ralf                    vqa
adpcm_zork              evrc                    mpeg2_v4l2m2m           rasc                    wavpack
agm                     exr                     mpeg2video              rawvideo                wcmv
aic                     fastaudio               mpeg4                   realtext                webp
alac                    ffv1                    mpeg4_v4l2m2m           rl2                     webvtt
alias_pix               ffvhuff                 mpegvideo               roq                     wmalossless
als                     ffwavesynth             mpl2                    roq_dpcm                wmapro
amrnb                   fic                     msa1                    rpza                    wmav1
amrwb                   fits                    mscc                    rscc                    wmav2
amv                     flac                    msmpeg4v1               rv10                    wmavoice
anm                     flashsv                 msmpeg4v2               rv20                    wmv1
ansi                    flashsv2                msmpeg4v3               rv30                    wmv2
ape                     flic                    msp2                    rv40                    wmv3
apng                    flv                     msrle                   s302m                   wmv3image
aptx                    fmvc                    mss1                    sami                    wnv1
aptx_hd                 fourxm                  mss2                    sanm                    wrapped_avframe
arbc                    fraps                   msvideo1                sbc                     ws_snd1
argo                    frwu                    mszh                    scpr                    xan_dpcm
ass                     g2m                     mts2                    screenpresso            xan_wc3
asv1                    g723_1                  mv30                    sdx2_dpcm               xan_wc4
asv2                    g729                    mvc1                    sga                     xbin
atrac1                  gdv                     mvc2                    sgi                     xbm
atrac3                  gif                     mvdv                    sgirle                  xface
atrac3al                gremlin_dpcm            mvha                    sheervideo              xl
atrac3p                 gsm                     mwsc                    shorten                 xma1
atrac3pal               gsm_ms                  mxpeg                   simbiosis_imx           xma2
atrac9                  h261                    nellymoser              sipr                    xpm
aura                    h263                    notchlc                 siren                   xsub
aura2                   h263_v4l2m2m            nuv                     smackaud                xwd
av1                     h263i                   on2avc                  smacker                 y41p
avrn                    h263p                   opus                    smc                     ylc
avrp                    h264                    paf_audio               smvjpeg                 yop
avs                     h264_v4l2m2m            paf_video               snow                    yuv4
avui                    hap                     pam                     sol_dpcm                zero12v
ayuv                    hca                     pbm                     sonic                   zerocodec
bethsoftvid             hcom                    pcm_alaw                sp5x                    zlib
bfi                     hevc                    pcm_bluray              speedhq                 zmbv
bink                    hevc_v4l2m2m            pcm_dvd                 srgc
binkaudio_dct           hnm4_video              pcm_f16le               srt
binkaudio_rdft          hq_hqa                  pcm_f24le               ssa
bintext                 hqx                     pcm_f32be               stl

Enabled encoders:
a64multi                comfortnoise            mp2                     pcm_u16be               ssa
a64multi5               dca                     mp2fixed                pcm_u16le               subrip
aac                     dnxhd                   mpeg1video              pcm_u24be               sunrast
ac3                     dpx                     mpeg2video              pcm_u24le               svq1
ac3_fixed               dvbsub                  mpeg4                   pcm_u32be               targa
adpcm_adx               dvdsub                  mpeg4_v4l2m2m           pcm_u32le               text
adpcm_argo              dvvideo                 msmpeg4v2               pcm_u8                  tiff
adpcm_g722              eac3                    msmpeg4v3               pcm_vidc                truehd
adpcm_g726              exr                     msvideo1                pcx                     tta
adpcm_g726le            ffv1                    nellymoser              pfm                     ttml
adpcm_ima_alp           ffvhuff                 opus                    pgm                     utvideo
adpcm_ima_amv           fits                    pam                     pgmyuv                  v210
adpcm_ima_apm           flac                    pbm                     png                     v308
adpcm_ima_qt            flashsv                 pcm_alaw                ppm                     v408
adpcm_ima_ssi           flashsv2                pcm_dvd                 prores                  v410
adpcm_ima_wav           flv                     pcm_f32be               prores_aw               vc2
adpcm_ms                g723_1                  pcm_f32le               prores_ks               vorbis
adpcm_swf               gif                     pcm_f64be               qtrle                   vp8_v4l2m2m
adpcm_yamaha            h261                    pcm_f64le               r10k                    wavpack
alac                    h263                    pcm_mulaw               r210                    webvtt
alias_pix               h263_v4l2m2m            pcm_s16be               ra_144                  wmav1
amv                     h263p                   pcm_s16be_planar        rawvideo                wmav2
apng                    h264_v4l2m2m            pcm_s16le               roq                     wmv1
aptx                    hevc_v4l2m2m            pcm_s16le_planar        roq_dpcm                wmv2
aptx_hd                 huffyuv                 pcm_s24be               rpza                    wrapped_avframe
ass                     jpeg2000                pcm_s24daud             rv10                    xbm
asv1                    jpegls                  pcm_s24le               rv20                    xface
asv2                    libmp3lame              pcm_s24le_planar        s302m                   xsub
avrp                    libx264                 pcm_s32be               sbc                     xwd
avui                    libx264rgb              pcm_s32le               sgi                     y41p
ayuv                    ljpeg                   pcm_s32le_planar        snow                    yuv4
bmp                     magicyuv                pcm_s64be               sonic                   zlib
cfhd                    mjpeg                   pcm_s64le               sonic_ls                zmbv
cinepak                 mlp                     pcm_s8                  speedhq
cljr                    movtext                 pcm_s8_planar           srt

Enabled hwaccels:

Enabled parsers:
aac                     dca                     g729                    mpeg4video              vc1
aac_latm                dirac                   gif                     mpegaudio               vorbis
ac3                     dnxhd                   gsm                     mpegvideo               vp3
adx                     dolby_e                 h261                    opus                    vp8
av1                     dpx                     h263                    png                     vp9
avs2                    dvaudio                 h264                    pnm                     webp
avs3                    dvbsub                  hevc                    rv30                    xbm
bmp                     dvd_nav                 ipu                     rv40                    xma
cavsvideo               dvdsub                  jpeg2000                sbc
cook                    flac                    mjpeg                   sipr
cri                     g723_1                  mlp                     tak

Enabled demuxers:
aa                      dirac                   image_pgm_pipe          mtv                     segafilm
aac                     dnxhd                   image_pgmyuv_pipe       musx                    ser
aax                     dsf                     image_pgx_pipe          mv                      sga
ac3                     dsicin                  image_photocd_pipe      mvi                     shorten
ace                     dss                     image_pictor_pipe       mxf                     siff
acm                     dts                     image_png_pipe          mxg                     simbiosis_imx
act                     dtshd                   image_ppm_pipe          nc                      sln
adf                     dv                      image_psd_pipe          nistsphere              smacker
adp                     dvbsub                  image_qdraw_pipe        nsp                     smjpeg
ads                     dvbtxt                  image_sgi_pipe          nsv                     smush
adx                     dxa                     image_sunrast_pipe      nut                     sol
aea                     ea                      image_svg_pipe          nuv                     sox
afc                     ea_cdata                image_tiff_pipe         obu                     spdif
aiff                    eac3                    image_webp_pipe         ogg                     srt
aix                     epaf                    image_xbm_pipe          oma                     stl
alp                     ffmetadata              image_xpm_pipe          paf                     str
amr                     filmstrip               image_xwd_pipe          pcm_alaw                subviewer
amrnb                   fits                    ingenient               pcm_f32be               subviewer1
amrwb                   flac                    ipmovie                 pcm_f32le               sup
anm                     flic                    ipu                     pcm_f64be               svag
apc                     flv                     ircam                   pcm_f64le               svs
ape                     fourxm                  iss                     pcm_mulaw               swf
apm                     frm                     iv8                     pcm_s16be               tak
apng                    fsb                     ivf                     pcm_s16le               tedcaptions
aptx                    fwse                    ivr                     pcm_s24be               thp
aptx_hd                 g722                    jacosub                 pcm_s24le               threedostr
aqtitle                 g723_1                  jv                      pcm_s32be               tiertexseq
argo_asf                g726                    kux                     pcm_s32le               tmv
argo_brp                g726le                  kvag                    pcm_s8                  truehd
asf                     g729                    live_flv                pcm_u16be               tta
asf_o                   gdv                     lmlm4                   pcm_u16le               tty
ass                     genh                    loas                    pcm_u24be               txd
ast                     gif                     lrc                     pcm_u24le               ty
au                      gsm                     luodat                  pcm_u32be               v210
av1                     gxf                     lvf                     pcm_u32le               v210x
avi                     h261                    lxf                     pcm_u8                  vag
avr                     h263                    m4v                     pcm_vidc                vc1
avs                     h264                    matroska                pjs                     vc1t
avs2                    hca                     mca                     pmp                     vividas
avs3                    hcom                    mcc                     pp_bnk                  vivo
bethsoftvid             hevc                    mgsts                   pva                     vmd
bfi                     hls                     microdvd                pvf                     vobsub
bfstm                   hnm                     mjpeg                   qcp                     voc
bink                    ico                     mjpeg_2000              r3d                     vpk
binka                   idcin                   mlp                     rawvideo                vplayer
bintext                 idf                     mlv                     realtext                vqf
bit                     iff                     mm                      redspark                w64
bmv                     ifv                     mmf                     rl2                     wav
boa                     ilbc                    mods                    rm                      wc3
brstm                   image2                  moflex                  roq                     webm_dash_manifest
c93                     image2_alias_pix        mov                     rpl                     webvtt
caf                     image2_brender_pix      mp3                     rsd                     wsaud
cavsvideo               image2pipe              mpc                     rso                     wsd
cdg                     image_bmp_pipe          mpc8                    rtp                     wsvqa
cdxl                    image_cri_pipe          mpegps                  rtsp                    wtv
cine                    image_dds_pipe          mpegts                  s337m                   wv
codec2                  image_dpx_pipe          mpegtsraw               sami                    wve
codec2raw               image_exr_pipe          mpegvideo               sap                     xa
concat                  image_gif_pipe          mpjpeg                  sbc                     xbin
data                    image_j2k_pipe          mpl2                    sbg                     xmv
daud                    image_jpeg_pipe         mpsub                   scc                     xvag
dcstr                   image_jpegls_pipe       msf                     sdp                     xwma
derf                    image_pam_pipe          msnwc_tcp               sdr2                    yop
dfa                     image_pbm_pipe          msp                     sds                     yuv4mpegpipe
dhav                    image_pcx_pipe          mtaf                    sdx

Enabled muxers:
a64                     eac3                    jacosub                 oma                     segafilm
ac3                     f4v                     kvag                    opus                    segment
adts                    ffmetadata              latm                    pcm_alaw                singlejpeg
adx                     fifo                    lrc                     pcm_f32be               smjpeg
aiff                    fifo_test               m4v                     pcm_f32le               smoothstreaming
alp                     filmstrip               matroska                pcm_f64be               sox
amr                     fits                    matroska_audio          pcm_f64le               spdif
amv                     flac                    md5                     pcm_mulaw               spx
apm                     flv                     microdvd                pcm_s16be               srt
apng                    framecrc                mjpeg                   pcm_s16le               stream_segment
aptx                    framehash               mkvtimestamp_v2         pcm_s24be               streamhash
aptx_hd                 framemd5                mlp                     pcm_s24le               sup
argo_asf                g722                    mmf                     pcm_s32be               swf
asf                     g723_1                  mov                     pcm_s32le               tee
asf_stream              g726                    mp2                     pcm_s8                  tg2
ass                     g726le                  mp3                     pcm_u16be               tgp
ast                     gif                     mp4                     pcm_u16le               truehd
au                      gsm                     mpeg1system             pcm_u24be               tta
avi                     gxf                     mpeg1vcd                pcm_u24le               ttml
avm2                    h261                    mpeg1video              pcm_u32be               uncodedframecrc
avs2                    h263                    mpeg2dvd                pcm_u32le               vc1
bit                     h264                    mpeg2svcd               pcm_u8                  vc1t
caf                     hash                    mpeg2video              pcm_vidc                voc
cavsvideo               hds                     mpeg2vob                psp                     w64
codec2                  hevc                    mpegts                  rawvideo                wav
codec2raw               hls                     mpjpeg                  rm                      webm
crc                     ico                     mxf                     roq                     webm_chunk
dash                    ilbc                    mxf_d10                 rso                     webm_dash_manifest
data                    image2                  mxf_opatom              rtp                     webp
daud                    image2pipe              null                    rtp_mpegts              webvtt
dirac                   ipod                    nut                     rtsp                    wtv
dnxhd                   ircam                   oga                     sap                     wv
dts                     ismv                    ogg                     sbc                     yuv4mpegpipe
dv                      ivf                     ogv                     scc

Enabled protocols:
async                   file                    icecast                 rtmp                    tee
cache                   ftp                     md5                     rtmpt                   udp
concat                  gopher                  mmsh                    rtp                     udplite
crypto                  hls                     mmst                    srtp                    unix
data                    http                    pipe                    subfile
ffrtmphttp              httpproxy               prompeg                 tcp

Enabled filters:
abench                  avectorscope            epx                     mcdeint                 showwaves
abitscope               avgblur                 eq                      mcompand                showwavespic
acompressor             axcorrelate             equalizer               median                  shuffleframes
acontrast               bandpass                erosion                 mergeplanes             shufflepixels
acopy                   bandreject              estdif                  mestimate               shuffleplanes
acrossfade              bass                    exposure                metadata                sidechaincompress
acrossover              bbox                    extractplanes           midequalizer            sidechaingate
acrusher                bench                   extrastereo             minterpolate            sidedata
acue                    bilateral               fade                    mix                     sierpinski
addroi                  biquad                  fftdnoiz                monochrome              signalstats
adeclick                bitplanenoise           fftfilt                 movie                   signature
adeclip                 blackdetect             field                   mpdecimate              silencedetect
adelay                  blackframe              fieldhint               mptestsrc               silenceremove
adenorm                 blend                   fieldmatch              msad                    sinc
aderivative             bm3d                    fieldorder              negate                  sine
adrawgraph              boxblur                 fifo                    nlmeans                 smartblur
aecho                   bwdif                   fillborders             nnedi                   smptebars
aemphasis               cas                     find_rect               noformat                smptehdbars
aeval                   cellauto                firequalizer            noise                   sobel
aevalsrc                channelmap              flanger                 normalize               spectrumsynth
aexciter                channelsplit            floodfill               null                    speechnorm
afade                   chorus                  format                  nullsink                split
afftdn                  chromahold              fps                     nullsrc                 spp
afftfilt                chromakey               framepack               oscilloscope            sr
afifo                   chromanr                framerate               overlay                 ssim
afir                    chromashift             framestep               owdenoise               stereo3d
afirsrc                 ciescope                freezedetect            pad                     stereotools
aformat                 codecview               freezeframes            pal100bars              stereowiden
afreqshift              color                   fspp                    pal75bars               streamselect
agate                   colorbalance            gblur                   palettegen              super2xsai
agraphmonitor           colorchannelmixer       geq                     paletteuse              superequalizer
ahistogram              colorcontrast           gradfun                 pan                     surround
aiir                    colorcorrect            gradients               perms                   swaprect
aintegral               colorhold               graphmonitor            perspective             swapuv
ainterleave             colorize                greyedge                phase                   tblend
alimiter                colorkey                haas                    photosensitivity        telecine
allpass                 colorlevels             haldclut                pixdesctest             testsrc
allrgb                  colormatrix             haldclutsrc             pixscope                testsrc2
allyuv                  colorspace              hdcd                    pp                      thistogram
aloop                   colortemperature        headphone               pp7                     threshold
alphaextract            compand                 hflip                   premultiply             thumbnail
alphamerge              compensationdelay       highpass                prewitt                 tile
amerge                  concat                  highshelf               pseudocolor             tinterlace
ametadata               convolution             hilbert                 psnr                    tlut2
amix                    convolve                histeq                  pullup                  tmedian
amovie                  copy                    histogram               qp                      tmidequalizer
amplify                 cover_rect              hqdn3d                  random                  tmix
amultiply               crop                    hqx                     readeia608              tonemap
anequalizer             cropdetect              hstack                  readvitc                tpad
anlmdn                  crossfeed               hue                     realtime                transpose
anlms                   crystalizer             hwdownload              remap                   treble
anoisesrc               cue                     hwmap                   removegrain             tremolo
anull                   curves                  hwupload                removelogo              trim
anullsink               datascope               hysteresis              repeatfields            unpremultiply
anullsrc                dblur                   identity                replaygain              unsharp
apad                    dcshift                 idet                    reverse                 untile
aperms                  dctdnoiz                il                      rgbashift               uspp
aphasemeter             deband                  inflate                 rgbtestsrc              v360
aphaser                 deblock                 interlace               roberts                 vaguedenoiser
aphaseshift             decimate                interleave              rotate                  vectorscope
apulsator               deconvolve              join                    sab                     vflip
arealtime               dedot                   kerndeint               scale                   vfrdet
aresample               deesser                 kirsch                  scale2ref               vibrance
areverse                deflate                 lagfun                  scdet                   vibrato
arnndn                  deflicker               lenscorrection          scroll                  vif
aselect                 dejudder                life                    select                  vignette
asendcmd                delogo                  limiter                 selectivecolor          vmafmotion
asetnsamples            derain                  loop                    sendcmd                 volume
asetpts                 deshake                 loudnorm                separatefields          volumedetect
asetrate                despill                 lowpass                 setdar                  vstack
asettb                  detelecine              lowshelf                setfield                w3fdif
ashowinfo               dilation                lumakey                 setparams               waveform
asidedata               displace                lut                     setpts                  weave
asoftclip               dnn_processing          lut1d                   setrange                xbr
asplit                  doubleweave             lut2                    setsar                  xfade
astats                  drawbox                 lut3d                   settb                   xmedian
astreamselect           drawgraph               lutrgb                  shear                   xstack
asubboost               drawgrid                lutyuv                  showcqt                 yadif
asubcut                 drmeter                 mandelbrot              showfreqs               yaepblur
asupercut               dynaudnorm              maskedclamp             showinfo                yuvtestsrc
asuperpass              earwax                  maskedmax               showpalette             zoompan
asuperstop              ebur128                 maskedmerge             showspatial
atadenoise              edgedetect              maskedmin               showspectrum
atempo                  elbg                    maskedthreshold         showspectrumpic
atrim                   entropy                 maskfun                 showvolume

Enabled bsfs:
aac_adtstoasc           extract_extradata       imx_dump_header         null                    truehd_core
av1_frame_merge         filter_units            mjpeg2jpeg              opus_metadata           vp9_metadata
av1_frame_split         h264_metadata           mjpega_dump_header      pcm_rechunk             vp9_raw_reorder
av1_metadata            h264_mp4toannexb        mov2textsub             prores_metadata         vp9_superframe
chomp                   h264_redundant_pps      mp3_header_decompress   remove_extradata        vp9_superframe_split
dca_core                hapqa_extract           mpeg2_metadata          setts
dump_extradata          hevc_metadata           mpeg4_unpack_bframes    text2movsub
eac3_core               hevc_mp4toannexb        noise                   trace_headers

Enabled indevs:
fbdev                   lavfi                   oss                     v4l2

Enabled outdevs:
fbdev                   oss                     v4l2

License: GPL version 3 or later

WARNING: pkg-config not found, library detection may fail.
WARNING: using libx264 without pkg-config

arm-linux下的交叉编译

交叉编译工具链,环境变量配置:

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@hecs-287347:/opt/arm/gcctools/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin# export PATH=$PATH:$(pwd)

LAME库的交叉编译

 在sourceforge下载最新版本,我下载的版本是3.100。

./configure --host=arm-linux-gnueabihf --prefix=$(pwd)../lamebuild cc=arm-fsl-linux-gnueabi-gcc --disable-frontend

你以为这就正常了吗?注意这个有个坑啊,指定的cc=无效,指定的--host才是交叉工具链的前缀。我的工具链是arm-fsl-linux-gnueabi-gcc,所以--host需要改为如下:

./configure --host=arm-fsl-linux-gnueabi --prefix=/root/test/ffmpeg/lamebuild cc=arm-fsl-linux-gnueabi-gcc --disable-frontend

 x264库交叉编译

下载地址:x264, the best H.264/AVC encoder - VideoLAN  

./configure --prefix=../x264build --disable-asm --enable-shared --enable-static --host=arm-linux-gnueabi --cross-prefix=arm-fsl-linux-gnueabi-

ffmpeg交叉编译

./configure --prefix=../arm-ffmpegbuild --enable-shared --enable-libmp3lame  --enable-libx264 --enable-gpl --disable-asm --enable-version3 --cross-prefix=arm-fsl-linux-gnueabi-  --target-os=linux --extra-cflags="-I ../lamebuild/include" --extra-ldflags="-L ../lamebuild/lib" --enable-cross-compile   --enable-small --arch=arm --cpu=arm926ej-s --disable-everything --enable-decoder=h264 --enable-parser=h264 --enable-demuxer=rtsp --extra-ldflags="-L/root/test/ffmpeg/x264build/lib" --extra-cflags="-I ../x264build/include"

测试验证

实战分享

FFmpeg —— 录制本地麦克风音频进行UDP推流,并进行拉流音频播放

使用ffmpeg命令采集音频


使用ffmpeg来采集音频,我们首先需要知道,如何访问麦克风,这个其实我们可以像访问文件一样,访问麦克风。文件的话,我们一般给出一个文件路径,就可以访问了,比如“/home/test/a.mp4”,同理,我们的麦克风的地址是“hw:0”。

其次,我们需要知道,麦克风这个文件格式是什么?对于麦克风这种硬件设备,与其说是格式,我更觉得这是驱动程序。在linux上,通用的音频驱动程序,就是alsa。

这样的话,我们很容易形成了下面这样的命令:
ffmpeg -f alsa -i hw:0 out.wav
这里, -f 指定格式(驱动程序)为alsa, -i 指出文件路径,这里是麦克风地址“hw:0”,最后一个是输出文件路径,这里为当前路径下,保存为 out.wav文件。

我们在终端运行这条命令之后,然后对着麦克风讲话“123456”,然后按q结束录音,就可以看到当前路径下面,生成了 out.wav。然后我们使用
ffplay out.wav
播放这段录音,就可以听到刚刚我们喊的“123456”。

FFmpeg拉取服务端的视频流

./ffmpeg -i rtsp://127.0.0.1/test.264  -c copy output.mp4

嵌入式linux下的FFmpeg交叉编译(最全面)_第5张图片

其他资源

Windows下编译FFmpeg详解_ffmpegwindows编译_zhouyongku的博客-CSDN博客

FFmpeg 详尽编译过程_ffmpeg如何编译_学术袁的博客-CSDN博客

ffplay Documentation

用 VS2019 编译带 libx264, libmp3lame 的 FFmpeg 库_ffmpeg libmp3lame 编译_fly4free的博客-CSDN博客

FFmpeg简介_贝勒里恩的博客-CSDN博客

ubuntu18.04编译FFMPEG_ubuntu18.04下编译ffmpeg_papaofdoudou的博客-CSDN博客

Linux下交叉编译FFMPEG与X264库:目标板友善之臂Tiny4412开发板_EXYNOS4412(ARMV7_32位)-腾讯云开发者社区-腾讯云 交叉编译多平台 FFmpeg 库并提取视频帧 - 知乎

FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务,展示在浏览器上。_ffmpeg打开麦克风_jrongweb的博客-CSDN博客

EasyDarwin+FFmpeg实现本地音视频推流_ffmpeg单独音频推流_屠龍之技的博客-CSDN博客

树莓派利用ffmpeg将外接USB麦克风的音频实时推流到rtmp服务器,实现在任意设备上实时监听音频 - 芒果爱吃胡萝卜

读取麦克风的核心代码及详解_FFmpeg4.3开发系列之10:采集麦克风AAC+MP3编码存储并直播实战_C/C++视频-51CTO学堂

linux下使用ffmpeg采集音频数据_ffmpeg捕捉麦克风 linux_snail_hunan的博客-CSDN博客

ffmpeg精简_ffmpeg 精简_且行且探索的博客-CSDN博客

 ffmpeg精简_wanxiu.的博客-CSDN博客

嵌入式开发(四):海思Hi3559AV100交叉编译ffmpeg_夜风里唱的博客-CSDN博客

LAME的交叉编译 - 知乎

ffmpeg交叉编译_平平无奇的小垃圾的博客-CSDN博客

 Linux下交叉编译FFMPEG与X264库:目标板友善之臂Tiny4412开发板_EXYNOS4412(ARMV7_32位)-腾讯云开发者社区-腾讯云

嵌入式平台Portaudio的交叉编译_portaudio lib库_遇逆境处之泰然的博客-CSDN博客

PortAudio - an Open-Source Cross-Platform Audio API

libsndfile 用法简介_liyuanbhu的博客-CSDN博客

嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍-阿里云开发者社区

正点原子imx6ull开发板视频监控项目实战系列5: 摄像头(V4L2)和声卡(ALSA)接口简介_imx6ull 摄像头_One Piece&的博客-CSDN博客

Linux---ALSA音频工具arecord、aplay、amixer使用_linux aplay_面朝大海0902的博客-CSDN博客正点原子imx6ull开发板视频监控项目实战系列5: 摄像头(V4L2)和声卡(ALSA)接口简介_imx6ull 摄像头_One Piece&的博客-CSDN博客 Linux驱动开发|音频驱动_51CTO博客_android驱动开发和linux驱动开发

 正点原子Linux第五章 I.MX6U-ALPHA开发平台介绍 - 知乎

正点原子ALPHA开发板核心资源分析_正点原子阿尔法开发板怎么样_ManGo CHEN的博客-CSDN博客 正点原子linux阿尔法开发板使用—Linux设备树_配置linux开发板设备树_梅山剑客的博客-CSDN博客

正点原子linux阿尔法开发板使用——IIC驱动_梅山剑客的博客-CSDN博客

Linux 4G 通信实验_嵌入式学习者。的博客-CSDN博客

正点原子Linux第七十一章Linux 4G通信实验 - 知乎 

你可能感兴趣的:(音视频,ffmpeg)