当前位置:   article > 正文

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

ffmpeg交叉编译

FFmpeg介绍

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

常见用途

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是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源工具组合。

它包含一系列的模块。

 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下不建议禁用汇编优化。若是嵌入式平台移植需要,则需要禁用汇编。

编译过程

配置参数

  1. #!/bin/sh
  2. ../ffmpeg-4.4/configure \
  3. --prefix=`pwd`/../ffmpegbuild \
  4. --target-os=linux
  5. --arch=x86_64
  6. --enable-gpl \
  7. --enable-version3 \
  8. --disable-stripping \
  9. --disable-asm \
  10. --enable-shared \
  11. --enable-libmp3lame \
  12. --extra-cflags="-I`pwd`/../lamebuild/include" \
  13. --extra-ldflags="-LIBPATH:`pwd`/../lamebuild/lib" \
  14. --enable-libx264 \
  15. --extra-cflags="-I`pwd`/../x264build/include" \
  16. --extra-ldflags="-LIBPATH:`pwd`/../x264build/lib"
  17. 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平台西编译很简单,安装两个依赖库:

  1. sudo apt-get install libx264-dev
  2. 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

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

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

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

 日志:

  1. root@hecs-287347:~/test/ffmpeg/ffmpeg-4.4.4#
  2. 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
  3. install prefix ../ffmpegbuild
  4. source path .
  5. C compiler gcc
  6. C library glibc
  7. ARCH c (generic)
  8. big-endian no
  9. runtime cpu detection yes
  10. debug symbols yes
  11. strip symbols yes
  12. optimize for size no
  13. optimizations yes
  14. static yes
  15. shared yes
  16. postprocessing support yes
  17. network support yes
  18. threading support pthreads
  19. safe bitstream reader yes
  20. texi2html enabled no
  21. perl enabled yes
  22. pod2man enabled yes
  23. makeinfo enabled no
  24. makeinfo supports HTML no
  25. External libraries:
  26. iconv libmp3lame libx264 zlib
  27. External libraries providing hardware acceleration:
  28. v4l2_m2m
  29. Libraries:
  30. avcodec avfilter avutil swresample
  31. avdevice avformat postproc swscale
  32. Programs:
  33. ffmpeg ffprobe
  34. Enabled decoders:
  35. aac bitpacked huffyuv pcm_f32le subrip
  36. aac_fixed bmp hymt pcm_f64be subviewer
  37. aac_latm bmv_audio iac pcm_f64le subviewer1
  38. aasc bmv_video idcin pcm_lxf sunrast
  39. ac3 brender_pix idf pcm_mulaw svq1
  40. ac3_fixed c93 iff_ilbm pcm_s16be svq3
  41. acelp_kelvin cavs ilbc pcm_s16be_planar tak
  42. adpcm_4xm ccaption imc pcm_s16le targa
  43. adpcm_adx cdgraphics imm4 pcm_s16le_planar targa_y216
  44. adpcm_afc cdtoons imm5 pcm_s24be tdsc
  45. adpcm_agm cdxl indeo2 pcm_s24daud text
  46. adpcm_aica cfhd indeo3 pcm_s24le theora
  47. adpcm_argo cinepak indeo4 pcm_s24le_planar thp
  48. adpcm_ct clearvideo indeo5 pcm_s32be tiertexseqvideo
  49. adpcm_dtk cljr interplay_acm pcm_s32le tiff
  50. adpcm_ea cllc interplay_dpcm pcm_s32le_planar tmv
  51. adpcm_ea_maxis_xa comfortnoise interplay_video pcm_s64be truehd
  52. adpcm_ea_r1 cook ipu pcm_s64le truemotion1
  53. adpcm_ea_r2 cpia jacosub pcm_s8 truemotion2
  54. adpcm_ea_r3 cri jpeg2000 pcm_s8_planar truemotion2rt
  55. adpcm_ea_xas cscd jpegls pcm_sga truespeech
  56. adpcm_g722 cyuv jv pcm_u16be tscc
  57. adpcm_g726 dca kgv1 pcm_u16le tscc2
  58. adpcm_g726le dds kmvc pcm_u24be tta
  59. adpcm_ima_alp derf_dpcm lagarith pcm_u24le twinvq
  60. adpcm_ima_amv dfa loco pcm_u32be txd
  61. adpcm_ima_apc dirac lscr pcm_u32le ulti
  62. adpcm_ima_apm dnxhd m101 pcm_u8 utvideo
  63. adpcm_ima_cunning dolby_e mace3 pcm_vidc v210
  64. adpcm_ima_dat4 dpx mace6 pcx v210x
  65. adpcm_ima_dk3 dsd_lsbf magicyuv pfm v308
  66. adpcm_ima_dk4 dsd_lsbf_planar mdec pgm v408
  67. adpcm_ima_ea_eacs dsd_msbf metasound pgmyuv v410
  68. adpcm_ima_ea_sead dsd_msbf_planar microdvd pgssub vb
  69. adpcm_ima_iss dsicinaudio mimic pgx vble
  70. adpcm_ima_moflex dsicinvideo mjpeg photocd vc1
  71. adpcm_ima_mtf dss_sp mjpegb pictor vc1_v4l2m2m
  72. adpcm_ima_oki dst mlp pixlet vc1image
  73. adpcm_ima_qt dvaudio mmvideo pjs vcr1
  74. adpcm_ima_rad dvbsub mobiclip png vmdaudio
  75. adpcm_ima_smjpeg dvdsub motionpixels ppm vmdvideo
  76. adpcm_ima_ssi dvvideo movtext prores vmnc
  77. adpcm_ima_wav dxa mp1 prosumer vorbis
  78. adpcm_ima_ws dxtory mp1float psd vp3
  79. adpcm_ms dxv mp2 ptx vp4
  80. adpcm_mtaf eac3 mp2float qcelp vp5
  81. adpcm_psx eacmv mp3 qdm2 vp6
  82. adpcm_sbpro_2 eamad mp3adu qdmc vp6a
  83. adpcm_sbpro_3 eatgq mp3adufloat qdraw vp6f
  84. adpcm_sbpro_4 eatgv mp3float qpeg vp7
  85. adpcm_swf eatqi mp3on4 qtrle vp8
  86. adpcm_thp eightbps mp3on4float r10k vp8_v4l2m2m
  87. adpcm_thp_le eightsvx_exp mpc7 r210 vp9
  88. adpcm_vima eightsvx_fib mpc8 ra_144 vp9_v4l2m2m
  89. adpcm_xa escape124 mpeg1_v4l2m2m ra_288 vplayer
  90. adpcm_yamaha escape130 mpeg1video ralf vqa
  91. adpcm_zork evrc mpeg2_v4l2m2m rasc wavpack
  92. agm exr mpeg2video rawvideo wcmv
  93. aic fastaudio mpeg4 realtext webp
  94. alac ffv1 mpeg4_v4l2m2m rl2 webvtt
  95. alias_pix ffvhuff mpegvideo roq wmalossless
  96. als ffwavesynth mpl2 roq_dpcm wmapro
  97. amrnb fic msa1 rpza wmav1
  98. amrwb fits mscc rscc wmav2
  99. amv flac msmpeg4v1 rv10 wmavoice
  100. anm flashsv msmpeg4v2 rv20 wmv1
  101. ansi flashsv2 msmpeg4v3 rv30 wmv2
  102. ape flic msp2 rv40 wmv3
  103. apng flv msrle s302m wmv3image
  104. aptx fmvc mss1 sami wnv1
  105. aptx_hd fourxm mss2 sanm wrapped_avframe
  106. arbc fraps msvideo1 sbc ws_snd1
  107. argo frwu mszh scpr xan_dpcm
  108. ass g2m mts2 screenpresso xan_wc3
  109. asv1 g723_1 mv30 sdx2_dpcm xan_wc4
  110. asv2 g729 mvc1 sga xbin
  111. atrac1 gdv mvc2 sgi xbm
  112. atrac3 gif mvdv sgirle xface
  113. atrac3al gremlin_dpcm mvha sheervideo xl
  114. atrac3p gsm mwsc shorten xma1
  115. atrac3pal gsm_ms mxpeg simbiosis_imx xma2
  116. atrac9 h261 nellymoser sipr xpm
  117. aura h263 notchlc siren xsub
  118. aura2 h263_v4l2m2m nuv smackaud xwd
  119. av1 h263i on2avc smacker y41p
  120. avrn h263p opus smc ylc
  121. avrp h264 paf_audio smvjpeg yop
  122. avs h264_v4l2m2m paf_video snow yuv4
  123. avui hap pam sol_dpcm zero12v
  124. ayuv hca pbm sonic zerocodec
  125. bethsoftvid hcom pcm_alaw sp5x zlib
  126. bfi hevc pcm_bluray speedhq zmbv
  127. bink hevc_v4l2m2m pcm_dvd srgc
  128. binkaudio_dct hnm4_video pcm_f16le srt
  129. binkaudio_rdft hq_hqa pcm_f24le ssa
  130. bintext hqx pcm_f32be stl
  131. Enabled encoders:
  132. a64multi comfortnoise mp2 pcm_u16be ssa
  133. a64multi5 dca mp2fixed pcm_u16le subrip
  134. aac dnxhd mpeg1video pcm_u24be sunrast
  135. ac3 dpx mpeg2video pcm_u24le svq1
  136. ac3_fixed dvbsub mpeg4 pcm_u32be targa
  137. adpcm_adx dvdsub mpeg4_v4l2m2m pcm_u32le text
  138. adpcm_argo dvvideo msmpeg4v2 pcm_u8 tiff
  139. adpcm_g722 eac3 msmpeg4v3 pcm_vidc truehd
  140. adpcm_g726 exr msvideo1 pcx tta
  141. adpcm_g726le ffv1 nellymoser pfm ttml
  142. adpcm_ima_alp ffvhuff opus pgm utvideo
  143. adpcm_ima_amv fits pam pgmyuv v210
  144. adpcm_ima_apm flac pbm png v308
  145. adpcm_ima_qt flashsv pcm_alaw ppm v408
  146. adpcm_ima_ssi flashsv2 pcm_dvd prores v410
  147. adpcm_ima_wav flv pcm_f32be prores_aw vc2
  148. adpcm_ms g723_1 pcm_f32le prores_ks vorbis
  149. adpcm_swf gif pcm_f64be qtrle vp8_v4l2m2m
  150. adpcm_yamaha h261 pcm_f64le r10k wavpack
  151. alac h263 pcm_mulaw r210 webvtt
  152. alias_pix h263_v4l2m2m pcm_s16be ra_144 wmav1
  153. amv h263p pcm_s16be_planar rawvideo wmav2
  154. apng h264_v4l2m2m pcm_s16le roq wmv1
  155. aptx hevc_v4l2m2m pcm_s16le_planar roq_dpcm wmv2
  156. aptx_hd huffyuv pcm_s24be rpza wrapped_avframe
  157. ass jpeg2000 pcm_s24daud rv10 xbm
  158. asv1 jpegls pcm_s24le rv20 xface
  159. asv2 libmp3lame pcm_s24le_planar s302m xsub
  160. avrp libx264 pcm_s32be sbc xwd
  161. avui libx264rgb pcm_s32le sgi y41p
  162. ayuv ljpeg pcm_s32le_planar snow yuv4
  163. bmp magicyuv pcm_s64be sonic zlib
  164. cfhd mjpeg pcm_s64le sonic_ls zmbv
  165. cinepak mlp pcm_s8 speedhq
  166. cljr movtext pcm_s8_planar srt
  167. Enabled hwaccels:
  168. Enabled parsers:
  169. aac dca g729 mpeg4video vc1
  170. aac_latm dirac gif mpegaudio vorbis
  171. ac3 dnxhd gsm mpegvideo vp3
  172. adx dolby_e h261 opus vp8
  173. av1 dpx h263 png vp9
  174. avs2 dvaudio h264 pnm webp
  175. avs3 dvbsub hevc rv30 xbm
  176. bmp dvd_nav ipu rv40 xma
  177. cavsvideo dvdsub jpeg2000 sbc
  178. cook flac mjpeg sipr
  179. cri g723_1 mlp tak
  180. Enabled demuxers:
  181. aa dirac image_pgm_pipe mtv segafilm
  182. aac dnxhd image_pgmyuv_pipe musx ser
  183. aax dsf image_pgx_pipe mv sga
  184. ac3 dsicin image_photocd_pipe mvi shorten
  185. ace dss image_pictor_pipe mxf siff
  186. acm dts image_png_pipe mxg simbiosis_imx
  187. act dtshd image_ppm_pipe nc sln
  188. adf dv image_psd_pipe nistsphere smacker
  189. adp dvbsub image_qdraw_pipe nsp smjpeg
  190. ads dvbtxt image_sgi_pipe nsv smush
  191. adx dxa image_sunrast_pipe nut sol
  192. aea ea image_svg_pipe nuv sox
  193. afc ea_cdata image_tiff_pipe obu spdif
  194. aiff eac3 image_webp_pipe ogg srt
  195. aix epaf image_xbm_pipe oma stl
  196. alp ffmetadata image_xpm_pipe paf str
  197. amr filmstrip image_xwd_pipe pcm_alaw subviewer
  198. amrnb fits ingenient pcm_f32be subviewer1
  199. amrwb flac ipmovie pcm_f32le sup
  200. anm flic ipu pcm_f64be svag
  201. apc flv ircam pcm_f64le svs
  202. ape fourxm iss pcm_mulaw swf
  203. apm frm iv8 pcm_s16be tak
  204. apng fsb ivf pcm_s16le tedcaptions
  205. aptx fwse ivr pcm_s24be thp
  206. aptx_hd g722 jacosub pcm_s24le threedostr
  207. aqtitle g723_1 jv pcm_s32be tiertexseq
  208. argo_asf g726 kux pcm_s32le tmv
  209. argo_brp g726le kvag pcm_s8 truehd
  210. asf g729 live_flv pcm_u16be tta
  211. asf_o gdv lmlm4 pcm_u16le tty
  212. ass genh loas pcm_u24be txd
  213. ast gif lrc pcm_u24le ty
  214. au gsm luodat pcm_u32be v210
  215. av1 gxf lvf pcm_u32le v210x
  216. avi h261 lxf pcm_u8 vag
  217. avr h263 m4v pcm_vidc vc1
  218. avs h264 matroska pjs vc1t
  219. avs2 hca mca pmp vividas
  220. avs3 hcom mcc pp_bnk vivo
  221. bethsoftvid hevc mgsts pva vmd
  222. bfi hls microdvd pvf vobsub
  223. bfstm hnm mjpeg qcp voc
  224. bink ico mjpeg_2000 r3d vpk
  225. binka idcin mlp rawvideo vplayer
  226. bintext idf mlv realtext vqf
  227. bit iff mm redspark w64
  228. bmv ifv mmf rl2 wav
  229. boa ilbc mods rm wc3
  230. brstm image2 moflex roq webm_dash_manifest
  231. c93 image2_alias_pix mov rpl webvtt
  232. caf image2_brender_pix mp3 rsd wsaud
  233. cavsvideo image2pipe mpc rso wsd
  234. cdg image_bmp_pipe mpc8 rtp wsvqa
  235. cdxl image_cri_pipe mpegps rtsp wtv
  236. cine image_dds_pipe mpegts s337m wv
  237. codec2 image_dpx_pipe mpegtsraw sami wve
  238. codec2raw image_exr_pipe mpegvideo sap xa
  239. concat image_gif_pipe mpjpeg sbc xbin
  240. data image_j2k_pipe mpl2 sbg xmv
  241. daud image_jpeg_pipe mpsub scc xvag
  242. dcstr image_jpegls_pipe msf sdp xwma
  243. derf image_pam_pipe msnwc_tcp sdr2 yop
  244. dfa image_pbm_pipe msp sds yuv4mpegpipe
  245. dhav image_pcx_pipe mtaf sdx
  246. Enabled muxers:
  247. a64 eac3 jacosub oma segafilm
  248. ac3 f4v kvag opus segment
  249. adts ffmetadata latm pcm_alaw singlejpeg
  250. adx fifo lrc pcm_f32be smjpeg
  251. aiff fifo_test m4v pcm_f32le smoothstreaming
  252. alp filmstrip matroska pcm_f64be sox
  253. amr fits matroska_audio pcm_f64le spdif
  254. amv flac md5 pcm_mulaw spx
  255. apm flv microdvd pcm_s16be srt
  256. apng framecrc mjpeg pcm_s16le stream_segment
  257. aptx framehash mkvtimestamp_v2 pcm_s24be streamhash
  258. aptx_hd framemd5 mlp pcm_s24le sup
  259. argo_asf g722 mmf pcm_s32be swf
  260. asf g723_1 mov pcm_s32le tee
  261. asf_stream g726 mp2 pcm_s8 tg2
  262. ass g726le mp3 pcm_u16be tgp
  263. ast gif mp4 pcm_u16le truehd
  264. au gsm mpeg1system pcm_u24be tta
  265. avi gxf mpeg1vcd pcm_u24le ttml
  266. avm2 h261 mpeg1video pcm_u32be uncodedframecrc
  267. avs2 h263 mpeg2dvd pcm_u32le vc1
  268. bit h264 mpeg2svcd pcm_u8 vc1t
  269. caf hash mpeg2video pcm_vidc voc
  270. cavsvideo hds mpeg2vob psp w64
  271. codec2 hevc mpegts rawvideo wav
  272. codec2raw hls mpjpeg rm webm
  273. crc ico mxf roq webm_chunk
  274. dash ilbc mxf_d10 rso webm_dash_manifest
  275. data image2 mxf_opatom rtp webp
  276. daud image2pipe null rtp_mpegts webvtt
  277. dirac ipod nut rtsp wtv
  278. dnxhd ircam oga sap wv
  279. dts ismv ogg sbc yuv4mpegpipe
  280. dv ivf ogv scc
  281. Enabled protocols:
  282. async file icecast rtmp tee
  283. cache ftp md5 rtmpt udp
  284. concat gopher mmsh rtp udplite
  285. crypto hls mmst srtp unix
  286. data http pipe subfile
  287. ffrtmphttp httpproxy prompeg tcp
  288. Enabled filters:
  289. abench avectorscope epx mcdeint showwaves
  290. abitscope avgblur eq mcompand showwavespic
  291. acompressor axcorrelate equalizer median shuffleframes
  292. acontrast bandpass erosion mergeplanes shufflepixels
  293. acopy bandreject estdif mestimate shuffleplanes
  294. acrossfade bass exposure metadata sidechaincompress
  295. acrossover bbox extractplanes midequalizer sidechaingate
  296. acrusher bench extrastereo minterpolate sidedata
  297. acue bilateral fade mix sierpinski
  298. addroi biquad fftdnoiz monochrome signalstats
  299. adeclick bitplanenoise fftfilt movie signature
  300. adeclip blackdetect field mpdecimate silencedetect
  301. adelay blackframe fieldhint mptestsrc silenceremove
  302. adenorm blend fieldmatch msad sinc
  303. aderivative bm3d fieldorder negate sine
  304. adrawgraph boxblur fifo nlmeans smartblur
  305. aecho bwdif fillborders nnedi smptebars
  306. aemphasis cas find_rect noformat smptehdbars
  307. aeval cellauto firequalizer noise sobel
  308. aevalsrc channelmap flanger normalize spectrumsynth
  309. aexciter channelsplit floodfill null speechnorm
  310. afade chorus format nullsink split
  311. afftdn chromahold fps nullsrc spp
  312. afftfilt chromakey framepack oscilloscope sr
  313. afifo chromanr framerate overlay ssim
  314. afir chromashift framestep owdenoise stereo3d
  315. afirsrc ciescope freezedetect pad stereotools
  316. aformat codecview freezeframes pal100bars stereowiden
  317. afreqshift color fspp pal75bars streamselect
  318. agate colorbalance gblur palettegen super2xsai
  319. agraphmonitor colorchannelmixer geq paletteuse superequalizer
  320. ahistogram colorcontrast gradfun pan surround
  321. aiir colorcorrect gradients perms swaprect
  322. aintegral colorhold graphmonitor perspective swapuv
  323. ainterleave colorize greyedge phase tblend
  324. alimiter colorkey haas photosensitivity telecine
  325. allpass colorlevels haldclut pixdesctest testsrc
  326. allrgb colormatrix haldclutsrc pixscope testsrc2
  327. allyuv colorspace hdcd pp thistogram
  328. aloop colortemperature headphone pp7 threshold
  329. alphaextract compand hflip premultiply thumbnail
  330. alphamerge compensationdelay highpass prewitt tile
  331. amerge concat highshelf pseudocolor tinterlace
  332. ametadata convolution hilbert psnr tlut2
  333. amix convolve histeq pullup tmedian
  334. amovie copy histogram qp tmidequalizer
  335. amplify cover_rect hqdn3d random tmix
  336. amultiply crop hqx readeia608 tonemap
  337. anequalizer cropdetect hstack readvitc tpad
  338. anlmdn crossfeed hue realtime transpose
  339. anlms crystalizer hwdownload remap treble
  340. anoisesrc cue hwmap removegrain tremolo
  341. anull curves hwupload removelogo trim
  342. anullsink datascope hysteresis repeatfields unpremultiply
  343. anullsrc dblur identity replaygain unsharp
  344. apad dcshift idet reverse untile
  345. aperms dctdnoiz il rgbashift uspp
  346. aphasemeter deband inflate rgbtestsrc v360
  347. aphaser deblock interlace roberts vaguedenoiser
  348. aphaseshift decimate interleave rotate vectorscope
  349. apulsator deconvolve join sab vflip
  350. arealtime dedot kerndeint scale vfrdet
  351. aresample deesser kirsch scale2ref vibrance
  352. areverse deflate lagfun scdet vibrato
  353. arnndn deflicker lenscorrection scroll vif
  354. aselect dejudder life select vignette
  355. asendcmd delogo limiter selectivecolor vmafmotion
  356. asetnsamples derain loop sendcmd volume
  357. asetpts deshake loudnorm separatefields volumedetect
  358. asetrate despill lowpass setdar vstack
  359. asettb detelecine lowshelf setfield w3fdif
  360. ashowinfo dilation lumakey setparams waveform
  361. asidedata displace lut setpts weave
  362. asoftclip dnn_processing lut1d setrange xbr
  363. asplit doubleweave lut2 setsar xfade
  364. astats drawbox lut3d settb xmedian
  365. astreamselect drawgraph lutrgb shear xstack
  366. asubboost drawgrid lutyuv showcqt yadif
  367. asubcut drmeter mandelbrot showfreqs yaepblur
  368. asupercut dynaudnorm maskedclamp showinfo yuvtestsrc
  369. asuperpass earwax maskedmax showpalette zoompan
  370. asuperstop ebur128 maskedmerge showspatial
  371. atadenoise edgedetect maskedmin showspectrum
  372. atempo elbg maskedthreshold showspectrumpic
  373. atrim entropy maskfun showvolume
  374. Enabled bsfs:
  375. aac_adtstoasc extract_extradata imx_dump_header null truehd_core
  376. av1_frame_merge filter_units mjpeg2jpeg opus_metadata vp9_metadata
  377. av1_frame_split h264_metadata mjpega_dump_header pcm_rechunk vp9_raw_reorder
  378. av1_metadata h264_mp4toannexb mov2textsub prores_metadata vp9_superframe
  379. chomp h264_redundant_pps mp3_header_decompress remove_extradata vp9_superframe_split
  380. dca_core hapqa_extract mpeg2_metadata setts
  381. dump_extradata hevc_metadata mpeg4_unpack_bframes text2movsub
  382. eac3_core hevc_mp4toannexb noise trace_headers
  383. Enabled indevs:
  384. fbdev lavfi oss v4l2
  385. Enabled outdevs:
  386. fbdev oss v4l2
  387. License: GPL version 3 or later
  388. WARNING: pkg-config not found, library detection may fail.
  389. WARNING: using libx264 without pkg-config

arm-linux下的交叉编译

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

  1. echo $PATH
  2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
  3. 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交叉编译

  1. ./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

其他资源

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通信实验 - 知乎 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/901680
推荐阅读
相关标签
  

闽ICP备14008679号