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

来源:互联网 发布:淘宝高仿警官证制作 编辑:程序博客网 时间:2024/04/29 16:28

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

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

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

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

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

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

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

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

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


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

修改几个参数:

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


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

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

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

2.安装 并编译 yasm 。

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

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

下载好之后,解压

进入目录:

配置arm, 执行./configure  --prefix=/usr/local/ --host=arm-linux


make


make install

 

ok,查看一下安装状态:

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

3.安装SDL库

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

ok,tar解压

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

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




4.安装ffmpeg

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


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

解压:tar

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

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

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

帮助选项:
  
-- 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

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

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

检查一下是否安装好了:

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

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

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

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

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

按 Q 退出。

进入 /mnt

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


阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 娃娃和老师有隔阂了怎么办 大人字写得不好怎么办 不会写好看的字怎么办 无限量流量限速了怎么办 长期化妆后皮肤变黄怎么办 手机密码忘记了打不开怎么办 手机解压包不知道密码怎么办 手机屏图标没了怎么办 b站页面卡顿怎么办 被全景视觉骗了怎么办? 逆战进去没声音怎么办 Mac电脑ai卡住了怎么办 pr字幕打不了字怎么办 pr手写字多笔画怎么办 家中挖矿噪音很大怎么办 学了栏目包装不想干怎么办 在文本打字乱了怎么办 体考后觉得成绩有出入怎么办 荧光棒进眼睛里怎么办 无法读源文件或磁盘怎么办 爱剪辑视频横着怎么办 pr界面字体太小怎么办 0p手机卡槽坏了怎么办 pr视频有水波纹怎么办 手机耳机插口插上没声音怎么办 xp系统电脑没有声音怎么办 win10笔记本耳机没声音怎么办 电脑插耳机还是外放怎么办 主机电脑耳机插孔坏了怎么办 苹果6plus有点卡怎么办 手机拨通电话后黑屏怎么办 手机拨通后没声音怎么办 苹果手机铃声不响了怎么办 婴儿喘气粗好像有痰怎么办 金毛呼吸声很大怎么办 回看福建导视该怎么办 楼上木地板走路声音都很响怎么办 班里团支不搭理我我该怎么办 客户买家具说贵怎么办 英雄联盟超出显示范围怎么办 脸上有斑点怎么办内条