新增WebRTC支持,局域网摄像头推流超丝滑!

Viewed 85

问题描述


各位嵌入式、机器视觉开发者,K230/K230D RT-Smart又更新重磅实用功能——WebRTC局域网摄像头Demo正式开源,推流延迟低至150ms!

依托K230内置硬件H.264/H.265编码器,实现摄像头采集、硬件编码、WebRTC低延迟推流全链路零拷贝,无需第三方流媒体服务,浏览器打开即可实时查看画面,本地LCD/HDMI同步预览,开发调试、小型监控场景直接落地。

一、Demo中WebRTC 整体使用逻辑介绍

本次示例基于官方libpeer WebRTC封装库开发,完整打通硬件媒体管线与WebRTC传输层,整套使用流程分为4大模块:

1. 媒体采集分流

通过VICAP读取CSI摄像头图像,分成两路通道:CHN0输出至VO模块,实现LCD/HDMI本地实时预览;CHN1送入VENC硬件编码器做H.264/H.265 CBR恒定码率压缩,支持自定义分辨率、码率。

2. WebRTC信令服务

内置轻量HTTP服务器,承载SDP offer/answer信令交互,浏览器访问内置Web页面后自动发起协商,无需自建前端、独立信令服务。

3. 码流实时传输

硬件编码后的H.264/H.265 帧通过peer_connection_send_video接口直接送入libpeer,基于SRTP加密传输,全程零拷贝,减少内存拷贝带来的延迟与性能损耗。

4. 浏览器适配校验

内置mDNS隐私检测逻辑,自动识别Chrome/Edge连接失败问题并给出提示,同时支持页面一键重连,断网后无需重启开发板即可恢复视频流。

整套WebRTC能力全部封装在开源Demo中,开发者可直接复用HTTP信令、媒体绑定、帧发送全套代码,快速移植到自家IPC、视觉采集设备项目。

二、核心功能亮点

✅ 硬件H.264/H.265 实时推流,CBR码率可控,分辨率灵活自定义

✅ 双路画面输出:LCD/HDMI本地预览 + WebRTC浏览器远程查看

✅ 内置嵌入式Web UI,局域网浏览器一键连接,开箱即用

✅ 原生SDP信令交互,HTTP单线程服务,支持跨域CORS

✅ mDNS兼容性检测,自动提示浏览器连接故障解决方案

✅ 完整开源工程,管线、信令、前端代码全部开放可修改

image.png

三、3步快速编译运行Demo

1.配置menuconfig开启依赖

make menuconfig
# 开启两项配置
RT-Smart UserSpace Libraries Configuration → Enable Build libpeer (WebRTC) = Y
RT-Smart UserSpace Examples Configuration → Enable MPP examples = Y
                                          → Enable Build sample_webrtc = Y

2.SDK根目录编译

make

3.开发板执行程序(参数可按需修改)

sample_webrtc.elf -p 8080 -s 2 -c 605274512 -W 1280 -H 720 -b 2000

4.浏览器访问

程序启动后串口打印设备地址,浏览器打开 http://设备IP:8080 即可查看实时画面。

四、命令行参数对照表

参数 说明 默认值
-p HTTP服务端口 8080
-s CSI摄像头设备号(0-2) 2
-c 显示输出:605274512=LCD / 757006876=HDMI LCD
-W 编码画面宽度 1280
-H 编码画面高度 720
-b H.264码率(kbps) 2000
-t 视频编码类型(H264/H265) H264
注意:使用 -t h265 时,部分浏览器无法解码 H.265 (HEVC) WebRTC 流。

五、Chrome/Edge浏览器 连接失败解决方案

Chrome、Edge默认开启mDNS隐私保护,会隐藏局域网本地IP导致WebRTC握手失败,任选一种修复:

  1. 浏览器地址栏输入 chrome://flags/#enable-webrtc-hide-local-ips-with-mdns,选项改为Disabled,重启浏览器;

  2. 浏览器快捷方式添加启动参数:--disable-features=WebRtcHideLocalIpsWithMdns;

  3. 直接使用Firefox浏览器(无mDNS限制)

六、工程文件分工说明

文件 核心作用
main.c 程序入口、SDP信令处理、H.264/H.265 码流转发至WebRTC
http_server.c/.h 轻量HTTP信令服务器,支持CORS跨域
mpp_pipeline.c/.h MPP媒体管线封装:VICAP/VO/VENC资源管理
web_page.h 内置Web前端页面,无需单独部署网页
Makefile 工程编译构建脚本

七、底层依赖说明

  1. libpeer三方库:封装WebRTC底层,包含mbedTLS、cJSON、SRTP、SCTP协议栈;
  2. K230 MPP SDK:提供VB内存池、VICAP图像采集、VO显示、VENC硬件编码全套媒体接口。

八、适用开发场景

小型局域网监控设备、视觉调试工具、机器人车载摄像头、本地工业图像采集、低延迟视频演示设备,省去FFmpeg、Nginx-RTMP等流媒体中间件,大幅降低设备内存占用与开发工作量。

参考文档

[1] K230 RT-Smart WebRTC官方开发文档
https://www.kendryte.com/k230_rtos/zh/main/app_develop_guide/media/webrtc.html

[2] WebRTC完整开源Demo工程仓库
https://github.com/canmv-k230/k230_rtsmart_examples/tree/main/mpp/sample_webrtc

1 Answers