前言
静谧里 它静静地守候 如同时间的拾荒者 捕捉着光影交织的故事
——致摄像机
演示效果
1080P20
基本思路
用v4l2读取摄像头图像 然后用硬件编码器把图像编码 最后把编码数据传给rtsp服务器 这样外部就可以直接拉流播放了
提供的系统里有个摄像头测试程序camerademo 能用v4l2读取摄像头图像 sdk里有源码 把源码简单修改一下接口对接
提供的系统里有个硬件编码器测试程序encodertest 能把图像编码成h264数据 直接运行是不能使用的 它的参数解析有问题 需要修改源码的长宽和文件输入输出路径 重新编译才能使用
注意 sdk里面有多个编码器操作例子 只看到一个是接口符合sdk里面的编码器操作接口 其他都是不能用的老接口
能用的encodertest源码路径openwrt/package/allwinner/multimedia/tina_multimedia_demo/encodertest/mpp_src
rtsp部分是网上找的一个编程实现的简单的rtsp服务器 相当于推流加服务器 外部直接拉流就行
硬件软件版本
主板 TinyVision
主控 V851SE
系统sdk Tina 5.0
系统镜像
https://tinyvision.yuzukihd.top/#/?id=tinasdk-50
v851se_linux_tinyvision_uart0.zip
外设
摄像头 GC2053
网络 百兆RJ45头
附件
使用tinyvision制作简单的网络摄像机IPC附件.zip
应用程序使用方法
先用adb把程序传进板子
adb push D:\Ubuntu18_tinyvision\share\app\tinyvisionIpcV1\tinyvisionIpcV1 /root
使用命令添加执行权限
chmod +x tinyvisionIpcV1
使用ifconfig配网
ifconfig eth0 192.168.2.17 broadcast 192.168.2.255 netmask 255.255.255.0 up
ifconfig lo 127.0.0.1 up
route add default gw 192.168.2.1
仅支持一种参数格式 参数为 长 宽 帧率
执行例子
./tinyvisionIpcV1 640 480 30
执行时不加参数时默认参数为 640 480 30
当参数不支持时v4l2会打印出不同的参数 不会自动调整为相近的适合参数
v4l2打印的帧率有时候不对 以程序每秒打印的摄像头帧率为准
验证过的参数
1920 1080 20
1280 720 30
640 480 30
摄像头读图像帧使用v4l2框架 输出格式是NV21 参数不支持基本上是摄像头不支持导致的
默认操作设备/dev/video0 使用前检查有没这个设备 接了摄像头 摄像头驱动加载成功基本都会有这个设备
可以使用系统自带的camerademo排查操作摄像头有没问题
编码器是用的sdk提供的硬编码 输入NV21输出H264
程序运行时会每秒打印编码帧率 这个帧率不是编码器最大帧率 是工作时的帧率 摄像头帧率低会导致编码器帧率低
可以使用系统自带的encodertest排查编码器有没问题
rtsp是网上找的一个编程实现的简单的rtsp服务器 相当于推流加服务器 外部直接拉流就行
rtsp端口为554 路径为/live
拉流流例子 ip要换成板子的ip
rtsp://192.168.2.17/live
ffmpeg拉流使用方法
在pc上解压ffmpeg压缩包 用cmd进入ffmpeg bin目录执行命令 记得换ip
ffplay.exe -rtsp_transport tcp rtsp://192.168.2.17/live
参数-rtsp_transport tcp的意思是以tcp的方式建立rtsp链接 不写默认是udp 用tcp可以减少丢包花屏情况
cmake工程编译使用方法
工程使用cmake构建
需要安装cmake
apt-get install cmake
需要修改CMakeLists.txt里指定的编译器路径和头文件库文件路径
然后在CMakeLists.txt所在路径执行一次命令
cmake .
产生makefile 然后执行
make
就可以产生应用程序
注意 sdk的gcc使用时要求导出变量STAGING_DIR
export STAGING_DIR="/root/tina-v853-open/out/v851se/tinyvision/openwrt/staging_dir/"
用编译sdk时的source build/envsetup.sh也行
预告
读图像编码 rtsp流服务 只是开始
因为编解码器接口变更 4.0mpp没有移植到5.0的原因 我看很多人眼馋5.0的rtsp流 所以先把这个功能简单的工程分享出来
在以后的版本中 还要做rtsp/rtmp推流外部服务器 rtmp流服务 mp4录制 等等等
因为rtmp流服务用nginx服务器 nginx本身还是个http服务器 所以还会顺带上web搭建 在web上播放视频 在web上展示配置板子状态 用C艹写web后端
这所有的一切 将在这个64M内存的芯片上实现
我们的征途是星辰大海
羁绊
起初 我是在一些技术群 看到tinyvision的宣传资料 想看看生态如何 但又没有看到相关的交流群
然后到百问网的群里碰运气问问情况 没想到百问网的世玉轩找到了我 解答了我的问题 还送了我一套板子 你这是干什么 真是太客气了
最后感谢前人的努力
感谢百问网和yuzuki大佬联合出品的TinyVision
感谢百问网赠送的TinyVision及官方配件
感谢全志在线和yuzuki大佬提供整理的sdk资料