使用树莓派实现(山寨)高清视频叠加(HDMI OSD)

项目须要在HDMI上叠加一些字符包括汉字和数值,要求不能使用台式机,自己也没有HDMI采集卡驱动开发能力,因此经过海思的HDMI编码器将HDMI编码为h.264网络视频流,而后经过树莓派解码显示,作字符叠加(OSD),将树莓派的HDMI输出接在电视上,就实现了HDMI的高清视频字符叠加。
一、中文字符问题
  opencv实现中文字符显示须要依赖freetype,因此这里简单的加载一张图像模板,opencv在模板上添加数字,汉字部分不须要动在模板中写好便可。
二、树莓派串口问题
首先read的时候报错:
  device reports readiness to read but returned no data (device disconnected?)
而后从新打开,报错:
  Could not configure port: (5, 'Input/output error')
用minicom打开正常,再用程序打开也正常
整个系统常常假死,ssh没法链接,已经链接的终端不断开,但没法操做,鼠标能移动,但界面无反应。软件中止运行,但有时视频能正常播放。
将树莓派的硬件串口引出后,问题解决。
三、视频显示问题
一开始使用nanopi-M1,但播放视频时发现卡顿严重,1080p仅能播放14帧每秒。使用OpenCV-Python直接打开rtsp流,进行叠加显示,结果卡顿严重,基本上全是绿屏。CPU占用率单核100%,说明opencv使用软解,没法达到实时。
经过ffmpeg播放rtsp流,效果同样。经过ffmpeg播放时,解码部分是硬解,但转码部分没有优化,致使CPU占用达到100%,不能流畅播放。
经过mplayer指定解码器播放视频文件流畅,CPU占用30%,因此应该是用GPU解码的:
  mplayer rtsp://192.168.1.90:554/ -vo vdpau -vc ffh264vdpau
使用mplayer播放rtsp时,CPU占用率低,但播放不流畅。怀疑是mplayer的rtsp部分有问题,如今也没有解决。linux

因此用树莓派继续尝试。
在树莓派3上使用omxplayer直接播放rtsp视频:
  omxplayer --avdict rtsp_transport:tcp rtsp://192.168.1.90:554/
但延时高。并且也没有找到方法作osd。因此找了这个连接:https://github.com/AndrewFromMelbourne/raspidmx,用这里边的例子pngview实现了PNG图像在显示器上透明显示,一边用omxplayer播放rtsp视频,一边用opencv绘制PNG图像,再经过pngview画到显示器上,就实现了视频osd功能。git

单张PNG叠加实现后,将pngview编译成动态库,由Python调用,但叠加几回之后黑屏,没法解决。因此pngview仍然做为独立进程使用,Python 调用opencv在PNG模板上绘制数字,保存在内存文件系统/tmp下,而后调用pngview显示,启动pngview后,延时50ms杀死上次启动的pngview,防止闪屏。github

内存文件系统:
在/etc/fstab中加入一行:
  none /tmp tmpfs default 0 0
或者在/etc/rc.local中加入
  mount tmpfs /tmp -t tmpfs -o size=128m
注:size=128m 表示/tmp最大能用128m
无论哪一种方式,只要linux重启,/tmp下的文件所有消失网络

这样就实现了HDMI视频osd功能。效果以下:ssh

四、显示分辨率问题
解决视频显示之后,本觉得就完成了。可是断电从新开机时,发现屏幕分辨率不对。
  一、使用显示器直接链接树莓派,显示器先上电,树莓派再上电,分辨率1280*720,一切正常
  二、使用显示器直接链接树莓派,显示器稍晚1s上电,树莓派不启动图形界面,显示器上显示无信号
  三、使用以色列图传链接树莓派,同时上电时,显示分辨率变为640*480,没法改变
  四、使用以色列图传链接树莓派,图传上电之后树莓派上电,显示分辨率为1920*1080,没法改变,视频正常播放,osd正常叠加,但视频和osd一块儿运行,屏幕花屏,而后黑屏。截掉任意一个程序,恢复正常。
问题没法解决,因此开机时检测屏幕分辨率,若分辨率不对,就重启,因为分辨率问题是树莓派与显示器一块儿上电致使的,因此重启后分辨率就对了,就造成了以上的第四种状况,而后又接了一个HDMI双路视频切换的盒子,这个切换盒与树莓派同时上电能够得到正确的分辨率,因而问题解决了……
因此系统拓扑以下……tcp

因为不具有全系统开发能力,没法提升系统集成度,只能依靠买来的模块攒,最终没法作出稳定可靠的东西优化

相关文章
相关标签/搜索