Firefly开源社区

标题: 【已更新】Ubuntu16.04如何集成gstreamer的插件mpp实现硬件解码? [打印本页]

作者: luwanjia    时间: 2017-9-7 10:35
标题: 【已更新】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,刷机验证吧!!!




作者: Firefly    时间: 2017-9-8 09:54
期待中
作者: luwanjia    时间: 2017-9-10 16:47
本帖最后由 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


作者: luwanjia    时间: 2017-9-11 15:32
经测试,硬件解码性能较Firefly-rk3288_Ubuntu_1604_201705250940.img中有较大提升,(*@ο@*) 哇~~~~~(>_<)~~~~
作者: tuzhihe    时间: 2017-9-29 16:27
Nice work!

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


作者: luwanjia    时间: 2017-10-9 09:20
本帖最后由 luwanjia 于 2017-10-9 09:39 编辑
tuzhihe 发表于 2017-9-29 16:27
Nice work!

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

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

作者: 一个人    时间: 2018-3-1 20:43
楼主,你好,百度云盘资源已经没有了,可以重新更新一下嘛???
作者: andy9100    时间: 2018-3-12 15:42
恳请楼主再分享一次,多谢!
作者: luwanjia    时间: 2018-3-16 21:23
andy9100 发表于 2018-3-12 15:42
恳请楼主再分享一次,多谢!

链接: https://pan.baidu.com/s/15_Xr4brEIns-Fk3m5dReug 密码: sy7u
不记得了,应该是这个。
作者: luwanjia    时间: 2018-3-16 21:23
andy9100 发表于 2018-3-12 15:42
恳请楼主再分享一次,多谢!

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

楼主,是这个,能留下QQ,方便我好好感谢一下你吗?
在下QQ326889964
作者: andy9100    时间: 2018-3-24 17:12
楼主,我下载后用升级工具打开提示加载固件失败!
作者: andy9100    时间: 2018-3-24 17:34
是不是文件超过2G,androidtools不能用还是文件损坏了?楼主怎么刷机的?
作者: luwanjia    时间: 2018-3-25 16:16
andy9100 发表于 2018-3-24 17:34
是不是文件超过2G,androidtools不能用还是文件损坏了?楼主怎么刷机的?

http://dev.t-firefly.com/thread-12833-1-1.html
作者: andy9100    时间: 2018-3-29 11:39
多谢!
作者: andy9100    时间: 2018-3-29 11:39
多谢
作者: kqqnhzl    时间: 2018-3-29 11:55
你好楼主大哥 ,请问在第3步中:
3. 下载依赖包及工具
网盘共享中有后面步骤需要用的的安装包以及update升级包,还有ch-mount.sh和mkimage-ubuntu-1604.sh两个脚本。
    将pkg.tar.bz2下载下来,并解压。将脚本也一并下载下来

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

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

作者: andy9100    时间: 2018-4-2 12:25
楼主,安装后测试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
感觉没有用上硬件加速
作者: luwanjia    时间: 2018-4-11 14:10
kqqnhzl 发表于 2018-3-29 11:55
你好楼主大哥 ,请问在第3步中:
3. 下载依赖包及工具
网盘共享中有后面步骤需要用的的安装包以及update ...

https://github.com/luwanjia/rockchip-dev
作者: luwanjia    时间: 2018-4-11 14:11
各位亲,时间久远链接失效了,项目的github链接:https://github.com/luwanjia/rockchip-dev,请参照使用,相关文件里面可以找到
作者: yl5006    时间: 2018-4-12 10:18
pkg.tar.bz2 和工具包在哪下载?
作者: luwanjia    时间: 2018-4-18 19:32
yl5006 发表于 2018-4-12 10:18
pkg.tar.bz2 和工具包在哪下载?

pkg.tar.bz2解压出来的东西就是这个:https://github.com/luwanjia/rock ... fs/rootfs_gstreamer
这是一整套步骤,但是现在很多东西都更新了,请参考使用,不一定保证百分百没问题。遇到问题自己先分析一下
作者: 一只大犀牛    时间: 2018-6-5 13:44
luwanjia 发表于 2018-4-18 19:32
pkg.tar.bz2解压出来的东西就是这个:https://github.com/luwanjia/rockchip-dev/tree/master/linux-root ...

大神,您好,mpp的mpi_enc_test编码1920×1080(USB摄像头)的时候,由于mpp的264编码是16字节对齐的,1080会导致底下有条绿边,使用1920×1088(网络摄像机)就没有这个绿边,一切正常。这个问题怎么处理,是mpp有问题吗,还是需要修改mpp的h264编码参数?
作者: luwanjia    时间: 2018-6-6 08:47
一只大犀牛 发表于 2018-6-5 13:44
大神,您好,mpp的mpi_enc_test编码1920×1080(USB摄像头)的时候,由于mpp的264编码是16字节对齐的,10 ...

mpp我们当时测试的时候是没有问题的,你说的具体问题我不太清楚
作者: 静静的等待    时间: 2018-9-18 19:37
luwanjia 发表于 2017-10-9 09:20
内存泄漏官方已经解决,详情请看github上面的提交记录
我们连续测试了4小时,无内存泄露,硬解性能还不 ...

请问,您指的的是哪个git网址?
作者: luwanjia    时间: 2018-10-24 21:28
静静的等待 发表于 2018-9-18 19:37
请问,您指的的是哪个git网址?

https://github.com/rockchip-linux?page=1
作者: 李阳    时间: 2020-10-15 09:36
luwanjia 发表于 2017-10-9 09:20
内存泄漏官方已经解决,详情请看github上面的提交记录
我们连续测试了4小时,无内存泄露,硬解性能还不 ...

解决个几把




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1