注意

这是最新开发分支配套的文档,可能包含已发布版本中尚未提供的功能。如果您要查看特定版本的文档,请使用左侧的下拉菜单并选择所需要的版本。

WebRTC Demo#

简介#

本示例介绍如何使用WebRTC协议在K230板子上实现实时视频推流到浏览器。通过以下示例,您将学习如何使用libpeer库的API接口搭建WebRTC服务,将板端摄像头采集的画面经硬件H.264编码后实时推流到浏览器,实现低延迟的局域网视频传输。

  • WebRTC LAN Camera: 介绍如何将板子上的sensor画面通过WebRTC协议推流到浏览器,同时支持LCD/HDMI本地预览。板端内置HTTP信令服务器和Web UI页面,浏览器访问即可一键连接查看实时画面。

使用说明#

代码位置#

  • WebRTC Demo/src/rtsmart/examples/mpp/sample_webrtc

假设 demo 已正确编译,启动开发板后进入 /sdcard/app/examples/mpp 目录,您将看到以下可执行文件:

  • sample_webrtc.elf:对应 WebRTC LAN Camera demo

确保该文件存在并且已正确编译,以便在开发板上运行相应的示例程序。

编译配置#

使用 make menuconfig 启用 libpeer 和 sample_webrtc:

RT-Smart UserSpace Libraries Configuration  →  Enable Build libpeer (WebRTC)  = Y
RT-Smart UserSpace Examples Configuration   →  Enable MPP examples           = Y
                                               →  Enable Build sample_webrtc   = Y

示例#

示例1: WebRTC LAN Camera#

该示例介绍了如何使用WebRTC协议实时将板子上的sensor画面推流到浏览器。板端启动HTTP信令服务器,浏览器访问内置Web页面即可自动完成SDP协商并建立WebRTC连接,实现实时视频传输。

架构说明#

VICAP (摄像头)
  ├── CHN0 ──bind──> VO (LCD/HDMI 预览)
  └── CHN1 ──bind──> VENC (H.264) ──> WebRTC ──> 浏览器
                                          ▲
                                   HTTP 信令 (offer/answer)

数据流程:

  1. VICAP采集摄像头画面,CHN0绑定到VO用于本地预览,CHN1绑定到VENC进行H.264编码。

  2. VENC输出的H.264码流帧通过 peer_connection_send_video() 发送到WebRTC对端。

  3. HTTP信令服务器处理浏览器的SDP offer/answer交换,完成WebRTC连接建立。

参数说明#

参数名

描述

参数范围

默认值

p

HTTP服务器端口

-

8080

s

CSI设备号

0-2

2

c

显示接口类型

605274512=LCD, 757006876=HDMI

LCD (605274512)

W

视频编码宽度

[128, 1920]

1280

H

视频编码高度

[64, 1080]

720

b

视频编码码率 (kbps)

-

2000

运行程序#

启动WebRTC demo后,串口输出将显示一个URL地址。在浏览器中打开该URL即可查看板端实时画面。

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

确保浏览器设备与板端在同一局域网下。按下 ctrl+c 退出程序。

msh /sdcard/app/examples/mpp>./sample_webrtc.elf -p 8080 -s 2 -c 605274512 -W 1280 -H 720 -b 2000
vb_set_config ok
debug: _ai_i2s_set_pitch_shift : semitones = 0
kd_mpi_venc_init start 0
venc[0] 1280*720 size:462848 cnt:30 srcfps:30 dstfps:30 rate:4000 rc_mode:1 type:96 profile:3
kd_mpi_venc_init end
set output err, set default format ISP_PIX_FMT_YUV420SP
[tuning] dev: 0
acq_win.width: 1920
acq_win.height: 1080
pipe_ctrl: 4294967289
sensor_fd: 12
sensor_type: 7
sensor_name: ov5647_csi0
database_name: ov5647-1920x1080
buffer_num: 0
buffer_size: 0
[tuning] chn: 0
out_win.width: 1280
out_win.height: 720
bit_width: 0
pix_format: 5
buffer_num: 6
buffer_size: 1382400
yraw_size: 0
uv_size: 0
v_size: 0
block_type: 1
wait_time: 500
chn_enable: 1
isp_3dnr_en is 0 g_isp_dev_ctx[dev_num].dev_attr.pipe_ctrl.bits.dnr3_enable is 1
VsiCamDeviceCreate hw:0-vt:0 created!
kd_mpi_isp_set_output_chn_format, width(1920), height(1080), pix_format(5)
[dw] init, version Feb 17 2025 00:06:56
[dw] open dewarp config file error
[dw] load config /bin/ov5647-1920x1080.bin failed, bypass
[dw] enter kd_mpi_sys_mmz_alloc((k_u64*)&settings->lut_phy_addr, &settings->lut_user_virt_addr, "dewarp/lut", "anonymous", settings->lut_size)
[dw] enter dev_fds[dev_num] < 0
[dw] enter ioctl(dev_fds[dev_num], K_DWVIOC_SETUP, settings)
[dw] split: 0 8191 8191 8191
[dw] LUT: 121x69=33396 phy(130ac000)
[dw] input:     1920x1080@YUV420SP align 0 bit 8
[dw] output[0]: 1280x720@YUV420SP align 12 bit 8 crop(0,0,0,0)

========================================
  libpeer LAN Camera Demo
========================================
  CSI: 2, Connector: 605274512
  Encode: 1280x720 @ 2000kbps H264
  Open in browser:
  http://10.100.228.46:8080
========================================

State: PEER_CONNECTION_NEW

在浏览器中打开 http://10.100.228.46:8080,页面将自动发起WebRTC连接请求。连接成功后串口输出:

State: PEER_CONNECTION_CHECKING
State: PEER_CONNECTION_CONNECTED

此时浏览器页面将显示板端摄像头的实时画面。

浏览器要求#

Chrome/Edge 默认启用 mDNS 隐私保护,会隐藏本地 IP 导致 WebRTC 连接失败。页面会自动检测并提示。

修复方式(任选其一):

  1. 地址栏输入 chrome://flags/#enable-webrtc-hide-local-ips-with-mdns → 设为 Disabled → 重启

  2. 启动参数加 --disable-features=WebRtcHideLocalIpsWithMdns

  3. 使用 Firefox(默认未启用 mDNS)

重连说明#

浏览器页面支持重连:当WebRTC连接断开后,点击页面上的重连按钮即可发起新的SDP协商,无需刷新页面或重启板端程序。

提示

有关 WebRTC 模块的具体接口,请参考API文档

评论列表
条评论
登录