mplayer 交叉编译及嵌入式设备上使用的问题

参考:

mplayer 下载地址


环境

虚拟机环境:ubuntu16.04

mplayer:版本1.0rc3

目标架构:ARMV7


        原计划是打算在开发板上使用 QT 播放视频,QT 的多媒体播放插件从 QT5 开始使用的是 gstreamer。在 PC 上通过 QT + gstreamer 播放视频流畅无卡顿。但在我所使用的嵌入式板卡上就会有明显的卡顿现象。不得以,只能移植 mplayer 来进行播放视频。实测播放同样的视频会比 QT + gstreamer 流畅,但也存在一些问题,后面会提出。

交叉编译        

        对于 ubuntu 在 交叉编译 mplayer 时的环境,我现在无法做验证,依稀记得是有个依赖,不得过解决也很简单,apt-get install 安装即可。

        在官网下载 mplayer 1.0rc3 的版本,更高的版本在我所使用的开发板上播放视频会出现闪屏的现象。PC 上正常播放。解压进入配置 configure ,我写的 configure 配置脚本如下,仅供参考

  1 #!/bin/bash
  2 ./configure \
  3 --prefix=$(pwd)/arm-mplayer/ \
  4 --host-cc=gcc \
  5 --cc=arm-linux-gnueabihf-gcc \
  6 --target=arm-linux \
  7 --enable-fbdev \
  8 --extra-cflags=\
  9 "-I$(pwd)/../zlib-1.2.11/arm-zlib/include" \
 10 --extra-ldflags=\
 11 "-L$(pwd)/../zlib-1.2.11/arm-zlib/lib"

第6行 --target=arm-linux 一定要有, 否则在编译过程中会出现很多架构指令相关的 error。诸如以下的错误:

Error: The instruction is not recognized.

我也实验过 csky 架构的编译,在 configure 配置时加入 --target=csky-linux 会提示

The architecture of your CPU (csky) is not supported by this configure script
It seems nobody has ported MPlayer to your OS or CPU type yet.

相信一些其他小众的架构在 configure 时也会出现这个问题,我的解决办法是修改 configure 编译脚本,在其中加入 csky 架构的说明。在 configure 脚本如下位置添加 csky 相关代码

第 8 ~ 11 行指定了 zlib 的 include 和 lib。这个版本的 mplayer 的编译需要 zlib。所以需要先去交叉编译 zlib。下面贴出我交叉编译 zlib 的脚本,仅供参考

  1 #!/bin/bash
  2 
  3 export CC=/tools/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
  4 ./configure \
  5 --prefix=$(pwd)/arm-zlib

        在利用上述配置脚本配置好 mplayer 的 configure 后,就可以开始编译了,在编译 ARM 架构时,会遇到如下错误

Error: thumb conditional instruction should be in IT block 

         这时就需要修改 config.mak 。在 OPTFLAGS 选项中加入下述语句,意思是在使用Thumb ISA指令编译时自动产生“IT”指令 。

OPTFLAGS = -Wa,-mimplicit-it=thumb

        make 完毕之后,不需要 make install, 就会在当前目录下产生 mplayer 和 mencoder 可执行文件。


使用中遇到的问题

         在嵌入式板卡上使用的主要问题是无法指定某个窗口播放,在搭配 QT 使用时,我想指定播放视频的位置是受 QT 控制的,也就是内嵌于某个 widget 之中,这样可以在视频播放的过程中,通过改变 widget 的大小来达到改变视频大小的目的。

        mplayer 有个命令行参数 “-wid” 就可以指定视频播放内嵌于某个窗口。但只适用 x11 与 opengl。实验在 PC 上搭配 QT 使用是正常内嵌到某个 widget 之内的,可以达到我的目的。但在嵌入式平台上所使用的 framebuffer 环境中,“-wid” 命令失效不可用。 

        正是因为这个问题,导致我目前也没想出一个能够在视频播放过程中改变窗口大小的办法......

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值