HEXA娱乐开发日志技术点007——放弃标准姿势
HEXA开发日志目录
上一篇 HEXA娱乐开发日志技术点006——日拱一卒拱歪了
成果
c6a82368ade66bbec1399940dbd4a61e5634cba5成功实现从手机启动抓取摄像头图像推流。也就是说,加上之前的进展,我可以:
- 用手机控制它连接到我的直播房间抓取弹幕
- 用手机控制它把摄像头拍到的东西直播到手机上指定的地址
更新一下下图,看起来所有东西已经完成了,不过准确地说,弹幕的转译和执行还没有完成,不过这一部分工作比较简单,就直接标绿了。
技术需求与技术点标准姿势
标准姿势——是指所有功能都要在一个skill内完成,即能够做一个发布的skill,大家从应用中心安装这个skill就可以玩起来。那么放弃标准姿势就是说,我不得不把一部分功能从skill里面拆出来,即安装这个skill之后,还必须再做点别的准备才能玩起来,这令我很不爽。
放弃是个无奈之举,因为一个致命问题——运行skill的Linux用户没有访问摄像头(/dev/video0
)和编码器(/dev/mxc_vpu
)的权限,所以skill程序没法独立使用摄像头和编码器,必须要root用户帮忙提供系统服务来完成摄像头和编码器的使用。
没有权限这个事费了我不少时间,因为总是C程序验得好好的,整合到skill里面就不工作了,反反复复的尝试后,才突然意识到这两种运行环境的用户不同。
解决方案
解决方案就以下两点
- Gstreamer功能用系统服务的形式实现
- skill通过命名管道(FIFO)的方式向系统服务发送命令,来控制Gstreamer服务
以上两点一写出来,相对于上一篇就没多少新鲜的了。剩下那点新鲜的,一个是系统服务的实现方法,另一个是命名管道实现方法。这两个东西网上随便一搜就有,都是经典的linux知识,预计弄一两个番外篇专门说一下,在这里就不细讲了,都在commit里面了。
这里只补充一些commit里面没体现的细节——系统服务的部署步骤:
- 把demo_not_skill/gstreamer复制到机器人里;
- 在这个目录中make,生成simple_server执行程序,如果要交叉编译,需要对Makefile里的CC进行配置;
- 将simple_serverd放到
/etc/init.d
,把simple_server放到/usr/local/sbin
; - 为了能够开机自动启动服务,还需要建立一个这样的软链接(这涉及到系统服务中,运行等级的相关知识,网上也有很多资料)
/etc/rc2.d/S99simple_serverd -> ../init.d/simple_serverd
总结
- 关键技术都完成了,但是放弃了封装成一个skill的标准姿势
- 也许下次把弹幕命令设计一下
- 也许下次把弹幕动作实现一下
再说两句
这个机器人摄像头的性能挺差的,原本的设计应该不是用来拍摄实时图像的,只是用来做一些简单的近距离识别,1280x720的分辨率下,帧数到不了5。要想接近实时帧率,分辨率必须是320x240。当然,默认配置会放大到640x480,这个由小放大是我一个玩过freescale的朋友说的。
也就是说,由于硬件限制,最初玩直播的设想基本打水漂,等这个项目完成,后面还是多从它的运动机能上多动动脑筋吧。
下一篇 未出炉