导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. lajuchenghui
    • 资料
    • 关注 0
    • 粉丝 3
    • 我的积分 1087
    • 主题 6
    • 帖子 22
    • 最佳 3
    • 群组 0

    逸俊晨晖LV 5

    @lajuchenghui

    作品一览
    使用tinyvision制作简单的网络摄像机IPCv2
    https://bbs.aw-ol.com/topic/5596
    使用tinyvision制作简单的网络摄像机IPC
    https://bbs.aw-ol.com/topic/5484
    哪吒D1编译配置DLNA客户端进行B站投屏
    https://whycan.com/t_7091.html
    荔枝派zero主线内核使用cedar硬编码和RTMP推流的网络摄像机
    https://whycan.com/t_7006.html
    荔枝派zero配置DLNA客户端进行B站投屏和网易云推送音乐
    https://whycan.com/t_5462.html
    F1C200s主线gstreamer使用openmax调用cedar硬解码
    https://whycan.com/t_5824.html

    1087
    积分
    15
    声望
    33
    资料浏览
    22
    帖子
    3
    粉丝
    0
    关注
    注册时间 最后登录

    lajuchenghui 取消关注 关注

    lajuchenghui 发布的最佳帖子

    • 使用tinyvision制作简单的网络摄像机IPCv2

      承接上一篇预告的功能
      上一篇链接 https://bbs.aw-ol.com/topic/5484

      功能简介
      实现rtsp/rtmp/http-flv服务 rtsp/rtmp推流外部服务器 mp4录制
      实现web管理后台 可以在网页上查看tinyvision资源占用状态 配置摄像头分辨率 流地址配置 观看摄像机画面 录制管理

      演示效果
      web管理后台
      导航.png

      在web上观看摄像机画面
      网页看摄像机画面.png

      录制管理
      录制管理.png

      web管理后台实现原理
      用nginx实现http服务器 然后web前端就是经典html js 后端接口是C艹写的fcgi 后端通过json和udp把配置参数传给读帧编码推流程序tinyvisionIpc

      附件
      使用tinyvision制作简单的网络摄像机IPCv2附件.zip
      附件内容
      安装包 整套程序的安装包 执行一个脚本就可以安装 本来打算用自解压脚本 后来发现在板子上解压不了 就直接用没压缩的
      测试工具 ffmpeg mediamtx流媒体服务
      镜像 和官方提供的镜像相比只是加了一些简单常用的命令进去
      源码工程 读帧编码推流程序tinyvisionIpcV2 web后端接口程序tinyvisionFcgi

      安装包安装
      先用adb把安装包传入板子
      adb push D:\Ubuntu18_tinyvision\share\setupTmp /root
      cd /root/setupTmp
      增加执行权限 执行安装脚本
      chmod +x setup.sh
      ./setup.sh
      等安装完毕后 修改启动脚本里的ip配置 以后开启都会自动配置ip
      vi /etc/init.d/S98tinyvisionIpc
      完成后重启
      reboot

      重要文件路径
      开机启动脚本 /etc/init.d/S98tinyvisionIpc
      主要程序 /root/
      nginx程序 /www/server/nginx/sbin/nginx/nginx
      nginx配置 /www/server/nginx/conf/nginx.conf
      web /www/server/nginx/html
      配置文件 /root/conf
      录制路径 /root/record

      功能测试
      web管理后台
      在pc浏览器上输入板子ip进入web管理后台
      web每秒刷新板子资源占用状态 可以配置部分参数 注意 配置参数需要保存重启系统才生效

      摄像机配置
      验证过的参数
      1920 1080 20
      1280 720 30
      640 480 30

      rtsp server配置
      可以配置url 和是否开启
      用ffplay拉流验证
      ffplay.exe -rtsp_transport tcp rtsp://192.168.2.17/live/1

      rtmp server 和 http-flv server配置
      可以配置是否开启 可以点击web video在web上观看摄像机画面
      用ffplay拉流验证
      ffplay.exe rtmp://192.168.2.17/live/1
      ffplay.exe "http://192.168.2.17/flv?port=1935&app=live&stream=1"

      rtsp push配置
      可以配置rtsp推流url和是否开启
      与rtsp服务不同的是 rtsp推流可以以rtsp的方式推流到外部的流媒体服务器
      在pc用mediamtx.exe开启流媒体服务 只需双击执行程序即可 不需要任何配置 关闭窗口则结束流媒体服务程序
      在rtsp推流配置url把ip换成pc的ip
      rtsp推流只在程序开始运行时推流 如果当时流媒体服务没开启来则推流失败不再推流 所以必须先开启流媒体服务再给板子重启

      rtmp push配置
      与rtsp push配置同理
      rtmp推流可以推流各种直播间

      mp4 recorder
      可以配置录制文件名 开启录制 查看录制文件
      配置录制文件名不需要重启才生效 开启录制就生效
      录制完成后 可以在record list查看、下载录制文件

      拉流注意
      拉rtmp和http-flv的延迟会比rtsp高
      点击web video在web上观看摄像机画面是http-flv协议 所以延迟会高一些

      最后发发牢骚
      整套功能实现难度不大 但是调起来非常繁琐 一会写读帧编码推流程序 一会写后端接口fcgi程序 一会写html js 出来问题各个部分都要看一遍
      最后还是一点一点调完了 64MB内存能跑这么多东西做完还是非常有成就感的

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 使用tinyvision制作简单的网络摄像机IPC

      前言
      静谧里 它静静地守候 如同时间的拾荒者 捕捉着光影交织的故事
      ——致摄像机

      演示效果


      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资料

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 回复: 使用tinyvision制作简单的网络摄像机IPCv2

      @amirhos_esm 开发的过程中我也纠结过这个零拷贝问题 主要是这个h264编码器的输入必须要拷贝图像数据进去 不能直接传指针 也许还有传物理地址的办法 但是没找到 厂商还有一套商用sdk是支持零拷贝的 但是那是另一套框架 需要签NDA协议才能拿到 就是4.0的SDK

      发布在 V Series
      lajuchenghui
      逸俊晨晖

    lajuchenghui 发布的最新帖子

    • tinyvision使用udp传输264延迟仅100+ms

      之前做了个rtsp服务 拉流发现延迟比较高 实际上读帧和编码的耗时并有没那么高 所以猜测时rtsp服务带来了较高的延时 于是就做了个单独的udp传输264
      测试结果 1080P@20 延迟100+ms
      延迟2.png

      通信过程
      tinyvision是服务端 PC是客户端
      首先客户端向服务端发起连接请求 服务端回复视频参数
      然后服务端向客户端持续发送264 客户端每次收到都必须回复顺序号 以此保证顺序同步 防止乱序和丢包导致的花屏
      为了保证稳定性 服务端在根据客户端回复的顺序号判断出丢包后会小间隔进行多次重发 多次重发失败后判定为连接断开 客户端在大间隔没收到数据后会重新向服务端发起连接

      PC端播放
      PC端拿到264数据后 用ffmpeg解码获得yuv数据 然后用SDL间接调用openGL接收yuv数据进行渲染

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 回复: 使用tinyvision制作简单的网络摄像机IPCv2

      @amirhos_esm 开发的过程中我也纠结过这个零拷贝问题 主要是这个h264编码器的输入必须要拷贝图像数据进去 不能直接传指针 也许还有传物理地址的办法 但是没找到 厂商还有一套商用sdk是支持零拷贝的 但是那是另一套框架 需要签NDA协议才能拿到 就是4.0的SDK

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 回复: 使用tinyvision制作简单的网络摄像机IPC

      @weifeng88 无限制 随意使用

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 回复: 使用tinyvision制作简单的网络摄像机IPC

      @dream 那可不是 网上随便找的

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 回复: 使用tinyvision制作简单的网络摄像机IPC

      预期功能已经实现 详细内容在下一篇
      https://bbs.aw-ol.com/topic/5596

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 使用tinyvision制作简单的网络摄像机IPCv2

      承接上一篇预告的功能
      上一篇链接 https://bbs.aw-ol.com/topic/5484

      功能简介
      实现rtsp/rtmp/http-flv服务 rtsp/rtmp推流外部服务器 mp4录制
      实现web管理后台 可以在网页上查看tinyvision资源占用状态 配置摄像头分辨率 流地址配置 观看摄像机画面 录制管理

      演示效果
      web管理后台
      导航.png

      在web上观看摄像机画面
      网页看摄像机画面.png

      录制管理
      录制管理.png

      web管理后台实现原理
      用nginx实现http服务器 然后web前端就是经典html js 后端接口是C艹写的fcgi 后端通过json和udp把配置参数传给读帧编码推流程序tinyvisionIpc

      附件
      使用tinyvision制作简单的网络摄像机IPCv2附件.zip
      附件内容
      安装包 整套程序的安装包 执行一个脚本就可以安装 本来打算用自解压脚本 后来发现在板子上解压不了 就直接用没压缩的
      测试工具 ffmpeg mediamtx流媒体服务
      镜像 和官方提供的镜像相比只是加了一些简单常用的命令进去
      源码工程 读帧编码推流程序tinyvisionIpcV2 web后端接口程序tinyvisionFcgi

      安装包安装
      先用adb把安装包传入板子
      adb push D:\Ubuntu18_tinyvision\share\setupTmp /root
      cd /root/setupTmp
      增加执行权限 执行安装脚本
      chmod +x setup.sh
      ./setup.sh
      等安装完毕后 修改启动脚本里的ip配置 以后开启都会自动配置ip
      vi /etc/init.d/S98tinyvisionIpc
      完成后重启
      reboot

      重要文件路径
      开机启动脚本 /etc/init.d/S98tinyvisionIpc
      主要程序 /root/
      nginx程序 /www/server/nginx/sbin/nginx/nginx
      nginx配置 /www/server/nginx/conf/nginx.conf
      web /www/server/nginx/html
      配置文件 /root/conf
      录制路径 /root/record

      功能测试
      web管理后台
      在pc浏览器上输入板子ip进入web管理后台
      web每秒刷新板子资源占用状态 可以配置部分参数 注意 配置参数需要保存重启系统才生效

      摄像机配置
      验证过的参数
      1920 1080 20
      1280 720 30
      640 480 30

      rtsp server配置
      可以配置url 和是否开启
      用ffplay拉流验证
      ffplay.exe -rtsp_transport tcp rtsp://192.168.2.17/live/1

      rtmp server 和 http-flv server配置
      可以配置是否开启 可以点击web video在web上观看摄像机画面
      用ffplay拉流验证
      ffplay.exe rtmp://192.168.2.17/live/1
      ffplay.exe "http://192.168.2.17/flv?port=1935&app=live&stream=1"

      rtsp push配置
      可以配置rtsp推流url和是否开启
      与rtsp服务不同的是 rtsp推流可以以rtsp的方式推流到外部的流媒体服务器
      在pc用mediamtx.exe开启流媒体服务 只需双击执行程序即可 不需要任何配置 关闭窗口则结束流媒体服务程序
      在rtsp推流配置url把ip换成pc的ip
      rtsp推流只在程序开始运行时推流 如果当时流媒体服务没开启来则推流失败不再推流 所以必须先开启流媒体服务再给板子重启

      rtmp push配置
      与rtsp push配置同理
      rtmp推流可以推流各种直播间

      mp4 recorder
      可以配置录制文件名 开启录制 查看录制文件
      配置录制文件名不需要重启才生效 开启录制就生效
      录制完成后 可以在record list查看、下载录制文件

      拉流注意
      拉rtmp和http-flv的延迟会比rtsp高
      点击web video在web上观看摄像机画面是http-flv协议 所以延迟会高一些

      最后发发牢骚
      整套功能实现难度不大 但是调起来非常繁琐 一会写读帧编码推流程序 一会写后端接口fcgi程序 一会写html js 出来问题各个部分都要看一遍
      最后还是一点一点调完了 64MB内存能跑这么多东西做完还是非常有成就感的

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 回复: 使用tinyvision制作简单的网络摄像机IPC

      @newcastle 附件里有
      编译出来的程序
      程序源码
      拉流测试用的ffmpeg

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 使用tinyvision制作简单的网络摄像机IPC

      前言
      静谧里 它静静地守候 如同时间的拾荒者 捕捉着光影交织的故事
      ——致摄像机

      演示效果


      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资料

      发布在 V Series
      lajuchenghui
      逸俊晨晖
    • 回复: 请问大家有没有两个屏幕的场景需求?

      ktv点歌机
      一个触摸屏点歌
      一个大屏播放视频

      发布在 灌水区
      lajuchenghui
      逸俊晨晖
    • gstreamer播放会闪屏 特别是把音频调为HDMI输出时

      使用这个命令播
      gst-launch-1.0 playbin uri=file:///root/bad_apple.mp4

      gstreamer播放会闪屏 特别是把音频调为HDMI输出时 基本次次播都闪 原来耳机座输出也会出现闪屏 但是概率会小很多 幅度也小

      发布在 MR Series
      lajuchenghui
      逸俊晨晖