【已更新】Ubuntu16.04如何集成gstreamer的插件mpp实现硬件解码?

本帖最后由 luwanjia 于 2018-3-16 21:24 编辑

首先,网盘共享如下:
链接: https://pan.baidu.com/s/15_Xr4brEIns-Fk3m5dReug 密码: sy7u
里面有完整的update镜像文件(用户名:ubuntu 密码:ubuntu),直接刷机,先给大家体验。需要自己动手的请看下面步骤,要有足够的耐心才能走到最后,祝你成功。

  1. 创建基本的ubuntu1604根文件系统
    按照帖子http://dev.t-firefly.com/thread-12393-1-1.html中的介绍,可做成能够启动的rootfs。

  2. 下载硬件解码/wifi蓝牙相关的安装包
    官方下载:https://github.com/rockchip-linux/rk-rootfs-build.git
    用git克隆下来即可,后面要用到。

  3. 下载依赖包及工具
    网盘共享中有后面步骤需要用的的安装包以及update升级包,还有ch-mount.sh和mkimage-ubuntu-1604.sh两个脚本。
    将pkg.tar.bz2下载下来,并解压。将脚本也一并下载下来。

  4. 当前目录状态如下:
    └── rk3288
    ├── linux-rootfs
    │ ├── ch-mount.sh
    │ ├── linux-rootfs-ubuntu-1604.tar.bz2
    │ └── mkimage-ubuntu-1604.sh
    ├── pkg
    │ ├── 01_dep
    │ ├── 02_dep
    │ ├── 03_dep
    │ ├── alsa-utils_1.1.3-1ubuntu1_armhf.deb
    │ ├── gstreamer1.0-alsa_1.10.4-1ubuntu1_armhf.deb
    │ ├── gstreamer1.0-plugins-bad_1.10.4-1ubuntu1_armhf.deb
    │ ├── gstreamer1.0-plugins-base_1.10.4-1ubuntu1_armhf.deb
    │ ├── gstreamer1.0-plugins-good_1.10.4-1ubuntu1_armhf.deb
    │ └── gstreamer1.0-tools_1.10.4-1_armhf.deb
    └── rk-rootfs-build
    ├── mk-base-debian.sh
    ├── mk-image.sh
    ├── mk-rootfs.sh
    ├── overlay
    ├── overlay-debug
    ├── overlay-firmware
    ├── packages
    ├── readme.md
    └── ubuntu-build-service

    其中 linux-rootfs-ubuntu-1604.tar.bz2是基于ubuntu-base-16.04-core-armhf制作的rootfs,在此基础上安装wifi驱动和硬件解码的gstreamer1.0

  5. 解压 linux-rootfs-ubuntu-1604.tar.bz2, 将官方rk-rootfs-build里面的相关文件及下载的依赖库文件复制到解压后的根文件系统里面
    $sudo tar -xvpf linux-rootfs-ubuntu-1604.tar.bz2
    $sudo cp -rf ../rk-rootfs-build/overlay/* linux-rootfs-ubuntu-1604 // 此步是系统初始化配置和一些service配置
    $sudo cp -rf ../rk-rootfs-build/overlay-debug/* linux-rootfs-ubuntu-1604 // 此步可以省略,这里面都是一些测试脚本和qt例子,大家可以参考使用
    $sudo cp -rf ../rk-rootfs-build/overlay-firmware/* linux-rootfs-ubuntu-1604 // 此步是wifi蓝牙相关的驱动
    $sudo mkdir -p linux-rootfs-ubuntu-1604/packages // 创建一个目录用于暂存相关安装包。注意,一定是packages这个名字,不要更改此目录名
    $sudo cp -rf ../rk-rootfs-build/packages/armhf/* linux-rootfs-ubuntu-1604/packages/ //相关文件拷贝到packages目录
    $sudo cp -rf ../pkg/ linux-rootfs-ubuntu-1604/packages/ //将依赖包拷贝到packages目录

  6. 使用ch-mount.sh脚本挂载根文件系统(rootfs)
    $./ch-mount.sh -m linux-rootfs-ubuntu-1604

  7. 参照rk-rootfs-build/mk-rootfs.sh脚本,执行以下安装
    a) 安装xserver
    #apt update
    #apt install libxfont1 libinput-bin libinput10 libwacom-common libwacom2 libunwind8 xserver-xorg-input-libinput
    #dpkg -i /packages/xserver/xserver-common__all.deb
    #dpkg -i packages/pkg/01_dep/lib
    .deb // 这都是xserver-xorg-core_armhf.deb的依赖库
    #dpkg -i /packages/xserver/xserver-xorg-core
    _armhf.deb
    至此,xserver安装完毕

    b) 安装gstreamer
    mk-rootfs.sh里面安装gstreamer1.0的时候,需要依赖的额外deb包的版本都较高,而ubuntu16.04默认的库版本较低,无法满足要求。
    解决办法是利用ubuntu-base-17.04-core-armhf下载所有依赖的库,通过ubuntu17.04下载的库版本基本都是最新的,可以成功解决deb包的依赖问题。

     安装依赖包:
     #dpkg -i packages/pkg/02_dep/*.deb // 注意,此命令请执行两次,第一次执行失败,可能是版本依赖导致,请自行研究。
     #dpkg -i packages/pkg/03_dep/*.deb // 这里的deb包比较多,都是安装gstreamer需要的依赖包
    
     安装gstreamer基础包:
     #dpkg -i packages/pkg/*.deb
    
     安装mpp插件:
     #dpkg -i  /packages/video/mpp/librockchip-mpp1_*_armhf.deb
     #dpkg -i  /packages/video/mpp/librockchip-mpp-dev_*_armhf.deb
    
     安装gstreamer主体包:
     #dpkg -i  /packages/video/gstreamer/*.deb
     这里会有两个包安装失败,分别是gstreamer1.0-plugins-bad_1.10.4-1_armhf.deb和libgstreamer-plugins-bad1.0-0_1.10.4-1_armhf.deb,这里忽略,直接过,不管它。
     可能以后有问题,大家自行研究
    

    至此,gstreamer安装完毕

  8. 禁止libmali-rk-midgard安装
    为什么要禁止这个包安装呢?因为安装上它之后,lightdm就无法启动,原因没有仔细研究。所以为了保证系统正常运行,先屏蔽掉,以后有需要再加上。
    大家打开/etc/init.d/rockchip.sh文件,里面针对rk3288的需要安装libmali-rk-midgard-r9p0-r0p0_.deb和libmali/libmali-rk-dev_.deb两个包,这里把它们都屏蔽掉。
    修改rockchip.sh文件可以再启动一个shell窗口,在外部修改它,修改部分如下:

             if [ "$1" == "rk3288" ];
             then
                 GPU_VERSION=$(cat /sys/devices/platform/*gpu/gpuinfo)
                 if [[ $GPU_VERSION =~ "Mali-T76x MP4 r1p0 0x0750" ]];
                 then
                     dpkg -i  /packages/libmali/libmali-rk-midgard-r9p0-r1p0_*.deb #3288w
                 else
                     # dpkg -i  /packages/libmali/libmali-rk-midgard-r9p0-r0p0_*.deb
                 fi
                 # dpkg -i  /packages/libmali/libmali-rk-dev_*.deb
             elif [[  "$1" == "rk3328"  ]]; then
                 dpkg -i  /packages/libmali/lib32mali-rk-utgard-2th-r7p0_*.deb
                 dpkg -i  /packages/libmali/libmali-rk-dev_*.deb
             elif [[  "$1" == "rk3399"  ]]; then
                 dpkg -i  /packages/libmali/lib*mali-rk-midgard-4th-r13p0_*.deb
                 dpkg -i  /packages/libmali/libmali-rk-dev_*.deb
             else
                 dpkg -i  /packages/libmali/libmali-rk-utgard0_*.deb
                 dpkg -i  /packages/libmali/libmali-rk-dev_*.deb
             fi
    
  9. 系统启动脚本设置
    $systemctl enable rockchip.service
    $systemctl mask systemd-networkd-wait-online.service
    $systemctl mask NetworkManager-wait-online.service

  10. 处理系统依赖问题
    前面的操作破坏了系统的依赖关系,做以下处理:
    #apt install -f
    #apt autoremove
    #apt install xubuntu-desktop

  11. 清理,退出以及卸载根文件系统
    #rm -rf /var/lib/apt/lists/*
    #exit

    此处一定要记得卸载根文件系统:
    $./ch-mount.sh -u linux-rootfs-ubuntu-1604

  12. 制作根文件系统镜像文件
    $./mkimage-ubuntu-1604.sh

    至此,整个根文件系统的硬件解码库安装完毕。

    测试硬件解码请参考:/usr/local/bin/test_dec-gst.sh

    请与linux-boot.img一起制作成update.img,刷机验证吧!!!

期待中

本帖最后由 luwanjia 于 2017-9-11 15:35 编辑

解决firefox奔溃问题:
sudo apt update
sudo apt remove firefox
sudo apt-cache madison firefox // 查看firefox可用的版本
sudo apt install firefox=45.0.2+build1-0ubuntu1 // 安装旧版本
(谁有更好的解决办法,烦请告知,谢谢~)

解决ParoleMediaPlay的GStreamer错误:
[Tools]->[Preferences]->[Display],设置为None xV

经测试,硬件解码性能较Firefly-rk3288_Ubuntu_1604_201705250940.img中有较大提升,(@ο@) 哇~(>_<)

Nice work!

请问有没有测试一下 内存泄露?之前ubuntu上的硬件解码应该是有内存泄露的(采用的是android的解码库)。
测试起来也很简单,循环跑几个小时视频,看看内存的状态。我对ubuntu硬件解码已近不报希望了。

本帖最后由 luwanjia 于 2017-10-9 09:39 编辑

tuzhihe 发表于 2017-9-29 16:27
Nice work!

请问有没有测试一下 内存泄露?之前ubuntu上的硬件解码应该是有内存泄露的(采用的是android …

内存泄漏官方已经解决,详情请看github上面的提交记录
我们连续测试了4小时,无内存泄露,硬解性能还不错

楼主,你好,百度云盘资源已经没有了,可以重新更新一下嘛???

恳请楼主再分享一次,多谢!

andy9100 发表于 2018-3-12 15:42
恳请楼主再分享一次,多谢!

链接: https://pan.baidu.com/s/15_Xr4brEIns-Fk3m5dReug 密码: sy7u
不记得了,应该是这个。

andy9100 发表于 2018-3-12 15:42
恳请楼主再分享一次,多谢!

链接: https://pan.baidu.com/s/15_Xr4brEIns-Fk3m5dReug 密码: sy7u
不记得了,应该是这个。

luwanjia 发表于 2018-3-16 21:23
链接: https://pan.baidu.com/s/15_Xr4brEIns-Fk3m5dReug 密码: sy7u
不记得了,应该是这个。

楼主,是这个,能留下QQ,方便我好好感谢一下你吗?
在下QQ326889964

楼主,我下载后用升级工具打开提示加载固件失败!

是不是文件超过2G,androidtools不能用还是文件损坏了?楼主怎么刷机的?

andy9100 发表于 2018-3-24 17:34
是不是文件超过2G,androidtools不能用还是文件损坏了?楼主怎么刷机的?

http://dev.t-firefly.com/thread-12833-1-1.html

多谢!

多谢

你好楼主大哥 ,请问在第3步中:
3. 下载依赖包及工具
网盘共享中有后面步骤需要用的的安装包以及update升级包,还有ch-mount.sh和mkimage-ubuntu-1604.sh两个脚本。
将pkg.tar.bz2下载下来,并解压。将脚本也一并下载下来

我已经下载了ch-mount.sh, 另外pkg.tar.bz2 mkimage-ubuntu-1604.sh 没有看到哪里有下载。

你好楼主大哥 ,请问在第3步中:
3. 下载依赖包及工具
网盘共享中有后面步骤需要用的的安装包以及update升级包,还有ch-mount.sh和mkimage-ubuntu-1604.sh两个脚本。
将pkg.tar.bz2下载下来,并解压。将脚本也一并下载下来
我已经下载了ch-mount.sh, 另外pkg.tar.bz2 mkimage-ubuntu-1604.sh 没有看到哪里有下载。

楼主,安装后测试gstreamer cpu占用100%, 4核都满了, 我用的是逻辑c920测试的,测试命令gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! queue ! video/x-h264,width=1280,height=720,framerate=30/1 !
h264parse ! avdec_h264 ! xvimagesink sync=false
感觉没有用上硬件加速

kqqnhzl 发表于 2018-3-29 11:55
你好楼主大哥 ,请问在第3步中:
3. 下载依赖包及工具
网盘共享中有后面步骤需要用的的安装包以及update …

https://github.com/luwanjia/rockchip-dev