成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!

      移植的过程还是有点艰辛的,Tiny  4412 ADK 开发板上手册说 要使用录制功能,需要购买配套的CMOS摄像头,哈哈,我偏不信。ffmpeg移植成功,这下我给老师省下了几十块钱的CMOS摄像头购买前,所以说,手册也只是用来参考,不一定要完全相信的啊!

     话不多说,首先我们必须要知道在ARM板摄像头工作时是使用了他的设备结点 /dev/video15,这意味着只要软件程序可以使用这个设备结点,将他数据流处理成视频文件就可以成功,而ffmpeg功能强大,早就替我们解决了这个问题,所以使用他正好。

     下面我将一步一步的搞定如何移植并使用这个ffmpeg 去录制视频。

      1。首先,做ARM嵌入式的开发,电脑的linux 必须要安装交叉编译环境,我们这里的使用的是友善之臂公司手册上提供的交叉编译环境,版本是

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第1张图片

   ok,安装过程,手册上有的,我就不多说哈。

      2.下载x264 并使用交叉编译,这个东西吧其实我们使用的是x264的编译功能,提供了视频流处理的一个环境。本身就带有视频流处理的功能,但不够,交叉编译ffmpeg时需要他。  我是直接进入x264的官网上下载的,如下:http://www.videolan.org/developers/x264.html

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第2张图片

一个是下载包,一个是直接命令复制到本地。都可以下载成狗,如果是第一种方式就解压包文件:

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第3张图片

解压好了,进入 目录,配置交叉编译。

                 (1).生成配置文件  执行 ./configure --host=arm-linux --prefix=/usr/local/x264-arm --enable-shared --enable-debug --disable-asm


                 ( 2 ). 修改配置文件 vim/vi   config.mak 

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第4张图片

修改几个参数:

cc=gcc 修改为 cc=arm-linux-gcc

LD = gcc 修改为arm-linux-gcc

ar=ar rc修改为ar=arm-linux-ar rc

ranlib=ranlib 修改为 ranlib=arm-linux-ranlib

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第5张图片


ok,执行make  就可以编译了,然后make  install  安装这个x264的交叉编译环境。

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第6张图片

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第7张图片

检查一下,进入cd /usr/loacl 就可以看到又交叉编译的X264-arm 文件了。

好了,有了编译环境了。还需要yasm 的依赖关系。

2.安装 并编译 yasm 。

下载网址:http://yasm.tortall.net/Download.html

当然这可能不一定是必须的,因为依赖关系可能是并存的。但为了确保无误编译不报错,还是安装一下比较好。

下载好之后,解压成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第8张图片

进入目录:成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第9张图片

配置arm, 执行./configure  --prefix=/usr/local/ --host=arm-linux成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第10张图片


make


make install

 成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第11张图片

ok,查看一下安装状态:

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第12张图片

到此为止,ffmpeg 的依赖yasm也安装好了。

3.安装SDL库

官网:http://www.libsdl.org/download-2.0.php

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第13张图片

ok,tar解压

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第14张图片

配置生成configura.mak 文件    #./configure --prefix=/usr/local/ --host=arm-linux --target=arm-linux

好了,make and make install ,会报警告,不用管他。检查这个SDL库是否安装上




4.安装ffmpeg

首先下载:http://ffmpeg.org/download.html

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第15张图片

第一种方式直接下载包,可以选择很多版本,第二种可以选择操作系统,第三种是执行命令直接复制源码到本地。

解压:tar 成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第16张图片

进入目录,配置生成 config.mak 文件。

执行 ./configure --help 出来一大堆选项,可供你配置选择。

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第17张图片

这里我做了一下整理,这些选项是什么意思呢?如下:

帮助选项:
  
-- help      打印此消息
  
-- quiet    抑制显示信息输出
  
--list-decoders 显示所有可用的解码器
  
--list-encoders 显示所有可用的编码器
  
--list-hwaccels显示所有可用的硬件加速器
  
--list-demuxers显示所有可用的分离器
  
--list-muxers显示所有可用的复用器
  
--list-parsers 显示所有可用的解析器
  
--list-protocols显示所有可用的协议
  
--list-bsfs显示所有可用的比特流过滤器
  
--list-indevs显示所有可用的输入设备
  
--list-outdevs显示所有可用的输出设备
  --list-filters
显示所有可用的过滤器

标准选项:
  
--logfile = FILE日志测试并输出到FILE [config.log]
  
--disable-logging不记录配置调试信息
   --fatal-warnings
- 如果生成任何配置警告,则会发出警告
  
--prefix = PREFIX安装在PREFIX [/ usr / local]
  
--bindir = DIR中安装二进制文件[PREFIX / bin]
  
--datadir = DIR在DIR中安装数据文件[PREFIX / share / ffmpeg]
  
--docdir = DIR中的DIR安装文档[PREFIX / share / doc / ffmpeg]
  
--libdir = DIR在DIR中安装lib [PREFIX / lib]
  
--shlibdir = DIR在DIR中安装共享库[LIBDIR]
  
--incdir = DIR安装包含在DIR中[PREFIX / include]
  
--mandir = DIR安装手册页DIR [PREFIX / share / man]
  
--pkgconfigdir = DIR在DIR中安装pkg-config文件[LIBDIR / pkgconfig]
  
--enable-rpath使用rpath允许在路径中安装库
                           
不是动态链接器搜索路径的一部分
                           
链接程序时使用rpath(使用护照)
  
--install-name-dir =已安装目标的DIR达尔文目录名称

许可选项:
  
--enable-gpl允许使用GPL代码,由此产生的libs
                           
并且二进制文件将在GPL下[否]
  
--enable-version3升级(L)GPL到版本3 [否]
  
--enable-nonfree允许使用非自由代码,由此产生的libs
                           
二进制文件将不可分配[不]

配置选项:
  
--disable-static不建静态库[no]
  --enable-shared
- 共享共享库[no]
  
--enable-small- 可以小型化优化大小而不是速度
  
--disable-runtime-cpudetect在运行时禁用检测CPU功能(较小的二进制)
  
--enable-gray- 可以使用灰色启用全灰度支持(较慢的颜色)
  
--disable-swscale-alpha禁用阿尔法通道支持swscale
  
--disable-all- 禁用 - 禁用构建组件,库和程序
  
--enable-raise-major- 主要增加主要版本号在sonames [no]

程序选项:
  
--disable程序不构建命令行程序
  
--disable-ffmpeg禁用ffmpeg构建
  
--disable-ffplay禁用ffplay构建
  
--disable-ffprobe禁用ffprobe构建
  
--disable-ffserver禁用ffserver构建

文档选项:
  
--disable-doc不构建文档
  
--disable-htmlpages不构建HTML文档页面
  
--disable-manpages- 不可用的联机帮助页面不构建人员文档页面
  
--disable-podpages不构建POD文档页面
  
--disable-txtpages不构建文本文档页面

组件选项:
  
--disable-avdevice禁用libavdevice构建
  
--disable-avcodec禁用libavcodec构建
  
--disable-avformat禁用libavformat构建
  
--disable-swresample禁用libswresample构建
  
--disable-swscale禁用libswscale构建
  
--disable-postproc禁用libpostproc构建
  
--disable-avfilter禁用libavfilter构建
  
--enable-avresample启用libavresample build [no]
  
--disable-pthreads禁用pthreads [autodetect]
  
--disable-w32threads禁用Win32线程[autodetect]
  
--disable-os2threads禁用OS / 2线程[autodetect]
  
--disable-network- 禁用网络禁用网络支持[否]
  
--disable-dct- 禁用dct禁用DCT代码
  
--disable-dwt 禁用DWT代码
  
--disable-error-resilience- 禁用错误恢复能力禁用错误弹性代码
  
--disable-lsp禁用LSP代码
  
--disable-lzo- 禁用lzo禁用LZO解码器代码
  
--disable-mdct禁用MDCT代码
  
--disable-rdft禁用RDFT代码
  
--disable-fft禁用FFT代码
  
--disable-faan- 禁用浮点AAN(I)DCT代码
  
--disable-pixelutils禁用libavutil中的像素工具

个别组件选项:
  
--disable - 一切都禁用下面列出的所有组件
  
--disable-encoder = NAME禁用编码器名称
  
--enable-encoder = NAME启用编码器名称
  
--disable-encoders- 可编码器禁用所有编码器
  
--disable-decoder = NAME禁用解码器NAME
  
--enable-decoder = NAME启用解码器NAME
  
--disable-decoders- 禁止解码器

  --disable-hwaccel = NAME禁用hwaccel NAME
  
--enable-hwaccel = NAME启用hwaccel NAME
  
--disable-hwaccels禁用所有hwaccels
  
--disable-muxer = NAME禁用muxer NAME
  
--enable-muxer = NAME启用MUXER NAME
  
--disable-muxers禁用所有muxers
  
--disable-demuxer = NAME禁用demuxer NAME
  
--enable-demuxer = NAME启用分解器名称
  
- disable-demuxers禁用所有分离器
  
--enable-parser = NAME启用解析器NAME
  
--disable-parser = NAME禁用解析器NAME
  
--disable-解析器禁用所有解析器
  
--enable-bsf = NAME启用比特流过滤器NAME
  
--disable-bsf = NAME禁用比特流过滤器NAME
  
--disable-bsfs禁用所有比特流过滤器
  
--enable-protocol = NAME启用协议名称
  
--disable-protocol = NAME禁用协议名称
  
--disable-protocols禁用所有协议
  
--enable-indev = NAME启用输入设备NAME
  
--disable-indev = NAME禁用输入设备NAME
  
--disable-indevs禁用输入设备
  
--enable-outdev = NAME启用输出设备名称
  
--disable-outdev = NAME禁用输出设备名称
  
--disable-outdevs禁用输出设备
  
--disable-devices禁用所有设备
  
--enable-filter = NAME启用过滤器NAME
  
--disable-filter = NAME禁用过滤器NAME
  
--disable-filters禁用所有过滤器

外部库支持:
     使用以下任何一个开关将允许FFmpeg链接到相应的外部库。 所有组件取决于该库如果满足所有其他依赖关系,而不是它们将被启用明确禁用例如。--enable-libwavpack将启用链接libwavpack并允许构建libwavpack编码器,除非它是特别禁用--disable-encoder = libwavpack。请注意,只有系统库自动检测。所有其他外部的库必须显式启用。另请注意,以下帮助文本描述了库的用途,并不是所有的功能都将被FFmpeg所使用。

--enable-avisynth启用阅读AviSynth脚本文件[否]
  
--disable-bzlib disable bzlib [autodetect]
  
--enable-chromaprint使用chromaprint启用音频指纹[no]
  
--enable-frei0r启用frei0r视频过滤[否]
  
--enable-gcrypt启用gcrypt,rtmp(t)e支持需要
                           
如果openssl,librtmp或gmp不被使用[否]
  
--enable-gmp enable gmp,需要rtmp(t)e支持
                           
如果openssl或librtmp不被使用[否]
  
--enable-gnutls启用了支持https的gnutls
                           
如果openssl没有使用[否]
  
--disable-iconv disable iconv [autodetect]
  
--enable-jni启用JNI支持[否]
  
--enable-ladspa启用LADSPA音频过滤[否]
  
--enable-libass启用libass字幕渲染,
                           
字幕和屁股过滤需要[否]
  
--enable-libbluray启用BluRay使用libbluray阅读[no]
  
--enable-libbs2b启用bs2b DSP库[否]
  
--enable-libcaca启用文本显示使用libcaca [no]
  
--enable-libcelt通过libcelt启用CELT解码[否]
  
--enable-libcdio启用音频CD抓取与libcdio [否]
  
--enable-libdc1394启用IIDC-1394使用libdc1394抓取
                           
和图书馆1394 [不]
  
--enable-libfdk-aac通过libfdk-aac启用AAC de / encoding [no]
  
--enable-libflite通过libflite支持flite(语音合成)支持[no]
  
--enable-libfontconfig启用libfontconfig,对drawtext filter有用[否]
  
--enable-libfreetype启用libfreetype,需要drawtext filter [no]
  
--enable-libfribidi启用libfribidi,改进drawtext filter [no]
  
--enable-libgme通过libgme启用游戏音乐Emu [no]
  
--enable-libgsm通过libgsm启用GSM de /编码[no]
  
--enable-libiec61883启用iec61883 via libiec61883 [no]
  
--enable-libilbc通过libilbc启用iLBC de / encoding [no]
  
--enable-libkvazaar通过libkvazaar启用HEVC编码[no]
  
--enable-libmodplug通过libmodplug启用ModPlug [no]
  
--enable-libmp3lame通过libmp3lame启用MP3编码[no]
  
--enable-libnut通过libnut启用NUT(de)muxing,
                           
native(de)muxer exists [no]
  
--enable-libopencore-amrnb通过libopencore-amrnb启用AMR-NB de /编码[no]
  
--enable-libopencore-amrwb通过libopencore-amrwb启用AMR-WB解码[no]
  
--enable-libopencv通过libopencv启用视频过滤[no]
  
--enable-libopenh264通过OpenH264启用H.264编码[no]
  
--enable-libopenjpeg通过OpenJPEG启用JPEG 2000 de /编码[no]
  
--enable-libopenmpt通过libopenmpt启用解码跟踪文件[no]
  
--enable-libopus通过libopus启用Opus de /编码[no]
  
--enable-libpulse通过libpulse启用Pulseaudio输入[no]
  --enable-librubberband
橡胶带过滤器需要橡胶带[no]
  
--enable-librtmp通过librtmp启用RTMP [E]支持[no]
  
--enable-libschroedinger通过libschroedinger启用Dirac de /编码[no]
  
--enable-libshine通过libshine启用定点MP3编码[no]
  
--enable-libsmbclient通过libsmbclient启用Samba协议[no]
  
--enable-libsnappy启用Snappy压缩,需要hap编码[no]
  
--enable-libsoxr enable包含libsoxr重采样[否]
  
--enable-libspeex通过libspeex启用Speex de /编码[no]
  
--enable-libssh通过libssh启用SFTP协议[no]
  
--enable-libtesseract启用Tesseract,ocr过滤器需要[否]
  
--enable-libtheora通过libtheora启用Theora编码[no]
  
--enable-libtwolame通过libtwolame启用MP2编码[no]
  
--enable-libv4l2启用libv4l2 / v4l-utils [no]
  
--enable-libvidstab启用视频稳定使用vid.stab [no]
  
--enable-libvo-amrwbenc通过libvo-amrwbenc启用AMR-WB编码[no]
  
--enable-libvorbis启用Vorbis en /解码通过libvorbis,本地实现存在[否]
  
--enable-libvpx启用VP8和VP9 de /编码通过libvpx [no]
  
--enable-libwavpack通过libwavpack启用wavpack编码[no]
  
--enable-libwebp通过libwebp启用WebP编码[no]
  
--enable-libx264通过x264启用H.264编码[否]
  
--enable-libx265通过x265启用HEVC编码[no]
  
--enable-libxavs通过xavs启用AVS编码[no]
  
--enable-libxcb启用X11抓取使用XCB [autodetect]
  
--enable-libxcb-shm启用X11抓取shm通讯[autodetect]
  
--enable-libxcb-xfixes启用X11抓取鼠标渲染[autodetect]
  
--enable-libxcb-shape启用X11抓取形状渲染[autodetect]
  
--enable-libxvid通过xvidcore启用Xvid编码,本地MPEG-4 / Xvid编码器存在[否]
  --enable-libzimg启用z.lib,需要zscale过滤器[否]
  
--enable-libzmq通过libzmq启用消息[no]
  
--enable-libzvbi通过libzvbi启用图文电视支持[no]
  
--disable-lzma disable lzma [autodetect]
  
--enable-decklink启用Blackmagic DeckLink I / O支持[否]
  
--enable-mediacodec启用Android MediaCodec支持[否]
  
--enable-netcdf启用NetCDF,需要sofalizer过滤器[否]
  
--enable-openal启用OpenAL 1.1捕获支持[否]
  
--enable-opencl启用OpenCL代码
  
--enable-opengl启用OpenGL渲染[否]
  
--enable-openssl启用openssl,用于https支持如果不使用gnutls [否]
  
--disable-schannel - 禁用通道禁用SChannel SSP,需要TLS支持Windows如果没有使用openssl和gnutls [autodetect]
  
--disable-sdl2 disable sdl2 [autodetect]
  
--disable-securetransport禁用TLS支持所需的安全传输在OSX上,如果openssl和gnutls不被使用[autodetect]
  
--disable-xlib禁用xlib [autodetect]
  
--disable-zlib禁用zlib [autodetect]

    。。。 当然,这么多选项,可以到需要使用时在详细查看。

为了是我们的移植功能更加的强大,可以使用ffplay,简单的说,ffplay 是一个使用了 ffmpeg 和 sdl 库的、一个简单的可移植的媒体播放器。

配置选项:

./configure --cross-prefix=arm-linux- --enable-cross-compile --target-os=linux --cc=arm-linux-gcc --arch=arm --prefix=/usr/local/arm_ffmpeg --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --enable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-yasm --disable-stripping

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第18张图片

生成 configure.mak 文件,make接着就是一波大时间的等待啦(我是虚拟机,跑了半个多小时)。警告不用管它。

然后 make install.就搞定了大部分的工作了。

检查一下是否安装好了:

5.ok.下面就可以移植到ARM开发板了。

1)将 bin目录下的ffmpeg复制到ARM开发板的bin  目录下  

2)将 lib 目录下的所有文件都复制到ARM开发板的lib目录下

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第19张图片

ok.进入Tiny 4412 ADK arm 开发板,可以录制视频了。

输入命令  #./ffmpeg -f video4linux2 -s 320x240 -i /dev/video15 /mnt/test.avi

成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!_第20张图片

按 Q 退出。

进入 /mnt

可以使用自带的播放器,也可以使用ffplay 观看。


你可能感兴趣的:(成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!)