Firefly开源社区

123
发表新贴
打印 上一主题 下一主题

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

264

积分

6

威望

5

贡献

技术达人

Rank: 2

积分
264
QQ

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

发表于 2017-9-7 10:35:30      浏览:45854 | 回复:27        打印      只看该作者   [复制链接] 楼主
本帖最后由 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,刷机验证吧!!!



回复

使用道具 举报

1161

积分

10

威望

12

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
1161
发表于 2017-9-8 09:54:59        只看该作者  沙发
期待中
回复

使用道具 举报

264

积分

6

威望

5

贡献

技术达人

Rank: 2

积分
264
QQ
发表于 2017-9-10 16:47:40        只看该作者  板凳
本帖最后由 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

回复

使用道具 举报

264

积分

6

威望

5

贡献

技术达人

Rank: 2

积分
264
QQ
发表于 2017-9-11 15:32:30        只看该作者  地板
经测试,硬件解码性能较Firefly-rk3288_Ubuntu_1604_201705250940.img中有较大提升,(*@ο@*) 哇~~~~~(>_<)~~~~
回复

使用道具 举报

14

积分

0

威望

0

贡献

技术小白

积分
14
发表于 2017-9-29 16:27:41        只看该作者  5#
Nice work!

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

回复

使用道具 举报

264

积分

6

威望

5

贡献

技术达人

Rank: 2

积分
264
QQ
发表于 2017-10-9 09:20:05        只看该作者  6#
本帖最后由 luwanjia 于 2017-10-9 09:39 编辑
tuzhihe 发表于 2017-9-29 16:27
Nice work!

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

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

使用道具 举报

41

积分

0

威望

0

贡献

游客

积分
41
发表于 2018-3-1 20:43:24        只看该作者  7#
楼主,你好,百度云盘资源已经没有了,可以重新更新一下嘛???
回复

使用道具 举报

53

积分

0

威望

0

贡献

技术小白

积分
53
发表于 2018-3-12 15:42:15        只看该作者  8#
恳请楼主再分享一次,多谢!
回复

使用道具 举报

264

积分

6

威望

5

贡献

技术达人

Rank: 2

积分
264
QQ
发表于 2018-3-16 21:23:18        只看该作者  9#
andy9100 发表于 2018-3-12 15:42
恳请楼主再分享一次,多谢!

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

使用道具 举报

264

积分

6

威望

5

贡献

技术达人

Rank: 2

积分
264
QQ
发表于 2018-3-16 21:23:34        只看该作者  10#
andy9100 发表于 2018-3-12 15:42
恳请楼主再分享一次,多谢!

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

使用道具 举报

返回列表
123
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表