想要在linux板子上通过qt界面来播放视频,一种可选的方式是调用ffmpeg库来实现视频的解码与播放。本篇先来进行ffmpeg库的交叉编译,将ffmpeg库移植到linux板子上。
1 交叉编译ffmpeg ffmpeg需要用到x264库,需要先编译这个库。
1.1 编译x264 官网http://www.videolan.org/developers/x264.html下载x264的源码
然后解压,并进行配置
#解压tar -xvf x264-master.tar.bz2#进入源码目录, 进行配置./configure --enable-shared --enable-static --host=arm-linux-gnueabihf --cross-prefix=arm-linux-gnueabihf- --disable-opencl --enable-pic --disable-asm --prefix=$pwd/_install 一些参数说明:
--host=arm-linux-gnueabihf :指定交叉编译链
--enable-shared :允许共享
--disable-asm:跳过汇编
--prefix=$pwd/_install:指定编译后存放路径(当前目录的install子目录)
然后进行编译
makemake install 查看文件夹_install,可以看到生成的bin、include、lib子目录
1.2 编译ffmpeg 然后编译ffmpeg,官网下载地址:http://ffmpeg.org/download.html
同样是进行解压
tar -xvf ffmpeg-snapshot.tar.bz2 进入ffmpeg源码目录,修改makefile,添加编译选项:cflags += -fpic
然后进行配置
./configure --cross-prefix=arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --prefix=$pwd/_install --enable-shared --disable-static --enable-gpl --enable-nonfree --disable-ffplay --enable-swscale --enable-pthreads --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-x86asm --disable-stripping --enable-libx264 --extra-cflags=-i/home/xxpcb/tools/ffmpeg/x264-master/_install/include --extra-ldflags=-l/home/xxpcb/tools/ffmpeg/x264-master/_install/lib --extra-libs=-ldl 一些参数说明:
--cross-prefix=arm-linux-gnueabihf-:配置为自己的交叉编译工具
--cc=arm-linux-gnueabihf-gcc:配置为自己的交叉编译工具
--extra-cflags=-i/home/xxpcb/tools/ffmpeg/x264-master/_install/include:配置为刚才x264生成出来的include目录
--extra-ldflags=-l/home/xxpcb/tools/ffmpeg/x264-master/_install/lib --extra-libs=-ldl:配置为刚才x264生成出来的lib目录
我这里配置后报错,如下:
尝试将pkg_config_path变量进行配置:
export pkg_config_path=/home/xxpcb/tools/ffmpeg/x264-master/_install/lib/pkgconfig 实际测试无效,还是报错:
参考这个帖子:
https://stackoverflow.com/questions/51918409/compiling-ffmpeg-x265-not-found-using-pkg-config/63661853
在配置项增加一条:
--pkg-config=pkg-config --static 完整的配置项如下:
./configure --cross-prefix=arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --prefix=$pwd/_install --enable-shared --disable-static --enable-gpl --enable-nonfree --disable-ffplay --enable-swscale --enable-pthreads --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-x86asm --disable-stripping --enable-libx264 --extra-cflags=-i/home/xxpcb/tools/ffmpeg/x264-master/_install/include --extra-ldflags=-l/home/xxpcb/tools/ffmpeg/x264-master/_install/lib --extra-libs=-ldl --pkg-config=pkg-config --static 这次配置成功了:
然后进行编译
makemake install 查看文件夹_x264_install,可以看到生成的bin、include、lib、share子目录
2 测试ffmpeg 2.1 编译的库拷贝到板子中 复制x264-master的lib目录中的x264库文库到开发板的/usb/local/lib目录
复制ffmpeg的lib目录中的so库文库到开发板/usb/local/lib目录
复制ffmpeg的bin目录中的ffmpeg文库到开发板/usb/local/bin目录
我使用的是ssh的方式进行复制的,具体命令如下:
scp xxpcb@192.168.5.104:/home/xxpcb/tools/ffmpeg/x264-master/_install/lib/*x264* ./scp xxpcb@192.168.5.104:/home/xxpcb/tools/ffmpeg/ffmpeg/_install/lib/*so* ./scp xxpcb@192.168.5.104:/home/xxpcb/tools/ffmpeg/ffmpeg/_install/bin/ffmpeg ./ ssh复制有点慢,可以尝试其它复制方式。
2.2 视频播放测试 先输入ffmpeg,看下是否能找到这个程序,我这里有报错,提示找不到对应的库(实际上是有这个库的):
添加ld_library_path变量,并导出
export ld_library_path=/usr/local/lib 再次输入ffmpeg,没有报错了:
通过ffmpeg指令测试视频播放
#播放板子中自带的视频ffmpeg -i mixkit_river.mp4 -pix_fmt rgb565le -f fbdev /dev/fb0 -f hw:0,0#播放网络视频ffmpeg -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:bigbuckbunny_115k.mp4 -pix_fmt rgb565le -vf scale=800:480 -f fbdev /dev/fb0 -f hw:0,0 指令输入后的打印如下:
这个是播放效果的截图:
3 总结 本篇介绍了嵌入式qt播放视频的准备工作:交叉编译ffmpeg库并移植到linux板子中,并先通过ffmpeg指令测试视频播放效果。下篇将尝试设计qt界面来结合ffmpeg进行视频的播放。
揭秘贴片一体电感使用中异响的常见故障原因
Ayla Networks宣布IoT平台设备联接和管理能力与谷歌云平台进行集成
SWZ-8V数字毫秒计在SWZ-8的基础上增加了很多功能
合宙开年新品—Air780EG模组:Cat.1+GNSS二合一,支持北斗/GPS双模卫星定位
使用 Featuretools库来了解自动化特征工程如何改变并优化机器学习的工作方式
嵌入式Qt-交叉编译FFmpeg与视频播放测试
Linux基础中的软件管理
在多方权衡之下,Google 在中国未来是否还有更好的出路?
联创电子获传音控股2000万部订单 未来预计承接5000万部
电话录音设备,USB电话录音器,数码电话录音,模拟电话录音
石墨烯、磁材展品将隆重亮相高交会新材料展,再掀展会高潮
CO传感器在燃气热水采暖炉安全防护中的应用
2019款三菱欧蓝德PHEV得到了WLTP的数据
黄仁勋:英伟达并不会进军手机市场
敢于第一个“吃螃蟹”引入RFID技术的沃尔玛发展怎么样了?
机器人替代人工实现生产线上下料自动化
Fitbit推大众款智能手表 将使用Fitbit操作系统
Qualcomm董事长保罗•雅各布博士:LTE推动创新
传感技术的重要性主要体现在哪些方面
油品检测仪的优点介绍