【技术分享】Firefly-RK3288多路视频编解码技术案例源码发布啦~

本帖最后由 Livvol 于 2018-1-30 15:07 编辑

如题,这次给大家带来的是rk3288多路视频编解码技术案例的源码,视频效果如下:
http://v.youku.com/v_show/id_XMTMzNTI2Njc0OA==.html

这个多路编解码案例主要同时有五路h264硬解码和两路h264硬编码。具体实现是播放三个经h264解码的mp4视频,同时从两个uvc摄像头采集数据并进行h264编码再解码显示。所用的平台是fireflyrk3288开发板,系统是android4.4。以下是效果截图:

实现思路:1.使用androidVideoView播放三个经h264解码的mp4视频。

2.创建一个android系统服务uvcserver管理uvc,android应用通过jni与uvc通信,采集视频数据。然后,使用androidMediaCodec进行h264硬编码,再通过h264硬解码,并渲染出来。

3.以上功能同时进行,一共是五路h264硬编码和两路h264硬解码。

实现方法:
在sdk下编译所需库和执行文件:
1、将文件夹uvc复制到frameworks/av/目录下
2、进入frameworks/av/uvc,运行mm -B进行编译
确保以下文件已经生成:
out/target/product/rk3288_box/system/bin/uvcserver
out/target/product/rk3288_box/system/lib/libmp4v2.so
out/target/product/rk3288_box/system/lib/libuvc-bunchen-jni.so

添加Android系统服务
1、打开编辑device/rockchip/rksdk/init.rc
2、添加系统服务:
service uvcd /system/bin/uvcserver
class main
user root
group system audio camera inet net_bt net_bt_admin net_bw_acct drmrpc mediadrm
ioprio rt 4

更换libRkOMX_Resourcemanager.so:
Android 4.4可以直接打补丁:0001-Android-vpu-omx-support-5-decodes-and-2-encodes.patch
其他版本的可以自己在相应位置手动替换。

之后就可以编译sdk,打包生成img文件烧到板子上即可。

接下来就是安装MultiCodecs.apk:
1、路径:MultiCodecs/bin/MultiCodecs.apk
2、通过adb install安装或者拷贝apk到板子上安装都可

如果一切顺利,那么接着就可以准备三个mp4格式的视频,分别命名为video1.mp4,video2.mp4,video3.mp4,并拷贝到板子/mnt/sdcard/下面。然后插上两个uvc摄像头,运行MultiCodecs,就能看到效果了。相信我,你会被firefly-rk3288的强大性能惊艳到的。
上面所说到的uvc源码和MultiCodecs Apk源码均已分享,大家慢慢享用吧{:2_27:}~
当然,这只是一个简单的例子,仅供参考。大家如果对多路编解码感兴趣,可以参考这个例子,开发出更多实用性强,功能强大的应用。如果可以的话,欢迎来社区多多分享~

更新源码下载地址,点此下载

有没有ubuntu的?

Hailong 发表于 2016-7-29 10:33
有没有ubuntu的?

没有哦:hug:

Livvol 发表于 2016-7-29 11:49
没有哦

:‘(:’(:cry:

Hailong 发表于 2016-7-29 14:57

自己动手丰衣足食也是可以的,相信自己:lol

[quote][url=forum.php?mod=redirect&goto=findpost&pid=22588&ptid=10605]Livvol 鍙戣〃浜

[quote][url=forum.php?mod=redirect&goto=findpost&pid=22588&ptid=10605]Livvol 鍙戣〃浜

Hailong 发表于 2016-7-30 11:20

[quote]Livvol 鍙戣〃浜

:o什么东东

请问下编译uvc是在内核编译前还是后呢?

编译遇到错误:
*** 没有规则可以创建“out/target/product/rk3288_box/obj/SHARED_LIBRARIES/libuvc-bunchen-jni_intermediates/import_includes”需要的目标“out/target/product/rk3288_box/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates/export_includes”。

kuangye1988 发表于 2016-8-1 17:45
请问下编译uvc是在内核编译前还是后呢?

编译遇到错误:

可以直接模块编译uvc那部分试试

kuangye1988 发表于 2016-8-1 17:45
请问下编译uvc是在内核编译前还是后呢?

编译遇到错误:

内核编译前后都没关系的,用的是官方的sdk吗,初始化编译环境没?source build.sh,然后可以直接编译uvc试试,进入到uvc运行mm -B

leung先森 发表于 2016-8-2 10:03
可以直接模块编译uvc那部分试试

谢谢,正是单独编译uvc模块出的问题

Livvol 发表于 2016-8-2 14:25
内核编译前后都没关系的,用的是官方的sdk吗,初始化编译环境没?source build.sh,然后可以直接编译uvc …

嗯,是用的官方sdk,编译环境没问题,编译uvc不过,但测试编译Android没问题。。。

kuangye1988 发表于 2016-8-2 17:15
嗯,是用的官方sdk,编译环境没问题,编译uvc不过,但测试编译Android没问题。。。

确认下uvc路径有没问题,另外可以编译frameworks/av/下其他模块,来确认是否是uvc本身问题还是环境问题,至少我这里是没出现问题的

Livvol 发表于 2016-8-3 10:19
确认下uvc路径有没问题,另外可以编译frameworks/av/下其他模块,来确认是否是uvc本身问题还是环境问题, …

谢啦,已经编译过了

Android 5.1 已经编译过了,但测试又出现问题了。

reload的板子,连接2个UVC时,程序只显示一个摄像头的影像(在最左窗口),拔掉1端口后(中间)窗口正常显示一个摄像头影像。

官方多路视频编解码的镜像遇到同样情况。

kuangye1988 发表于 2016-8-3 11:31
Android 5.1 已经编译过了,但测试又出现问题了。

reload的板子,连接2个UVC时,程序只显示一个摄像头的 …

你应该是两个UVC摄像头连在了一个usb hub上,这样可能会导致usb传输带宽不够,这时将其中一个UVC摄像头连到板子的另一个USB接口就行{:3_52:}

Livvol 发表于 2016-8-3 15:51
你应该是两个UVC摄像头连在了一个usb hub上,这样可能会导致usb传输带宽不够,这时将其中一个UVC摄像头连 …

谢谢,已经换过几次了,两个摄像头都在独立的USB口,不在hub上

kuangye1988 发表于 2016-8-3 16:44
谢谢,已经换过几次了,两个摄像头都在独立的USB口,不在hub上

换个次点的摄像头吧哈哈,可能板子驱动能力不够{:3_54:}

Livvol 发表于 2016-8-3 17:06
换个次点的摄像头吧哈哈,可能板子驱动能力不够

恩,我明天拿个分辨率低点的摄像头过来。

能问下您那测试时用的什么摄像头呢,是正常的吧