K230 编码实战 - rtsp sever搭建和推流#
1. 环境准备#
1.1 硬件环境#
K230-USIP-LP3-EVB-V1.0/K230-UNSIP-LP3-EVB-V1.1
Ubuntu PC 20.04
Typec USB线 * 2。
一根连接到UART0/3,用于串口收发,UART0对应小核,UART3对应大核。
一根连接到DC:5V接口,用于供电。
USB TypeC转以太网,连接到USB0。
网线一根
SD卡(如果使用SD卡启动,或软件需要访问SD卡)
摄像头子板(IMX335,用于rtsp推音视频流)
耳机(用于语音对讲)
杜邦线一根,按下图连接USB0_OTG_EN和高电平
注意:音频对讲需要两套设备。
1.2 软件环境#
K230 SDK
VLC播放器
1.3 运行准备#
在EVB上执行rtsp程序需要启动网络服务,并保证PC和EVB板在同一个网段。
2. 源码介绍#
2.1 源码位置#
在SDK中包含的rtsp相关demo位于k230_sdk/src/common/cdk/user/samples
目录下,其中
rtsp_demo
:语音推音视频流程序rtsp_server
:语音对讲服务器端程序backchannel_client
:语音对讲客户端程序
2.2 源码介绍#
K230 SDK采用双核架构,小核运行linux系统,实现网络控制服务。大核运行RTT系统,实现对音视频硬件的控制。小核在启动过程中负责引导大核。大小核通过核间通信进行消息通信和内存共享。
小核网络服务移植了live源码,路径为k230_sdk/src/common/cdk/user/thirdparty/live
音频使用G711编码。
音视频推流中,视频默认最大分辨率与配置的sensor_type相关,默认最大分辨率为1920x1080。
2.2.1 程序主要步骤#
2.2.1.1 音视频推流程序#
new StreamingPlayer
初始化核间通信。
配置video buffer。
InitVicap
:初始化摄像头。CreateSession
:创建server session。
创建并开启音频输入通道,音频采样率为44.1k,采样宽度16bit。
初始化音频编码,音频采用G711A编码。
创建视频编码通道,使能IDR帧。
Start
:开启视频编码通道并绑定到vo。
开启视频编码通道,并将视频输入绑定到视频编码。
开始音视频推流。
2.2.1.2 语音对讲程序#
Init
:创建server session。
初始化核间通信。
配置video buffer。
创建并开启音频输入通道,音频采样率为8k,采样宽度为16bit。
创建音频编码通道,音频采用G711U编码。
创建音频输出通道和音频解码通道,并将音频解码绑定到音频输出。
Start
:开始推音频流。
开启视频编码通道,并将视频输入绑定到视频编码。
3.程序执行#
3.1 rtsp推音视频流#
3.1.1 参数说明#
参数名 |
描述 |
参数范围 |
默认值 |
---|---|---|---|
help |
打印命令行参数信息 |
- |
- |
n |
session个数 |
|
1 |
t |
编码类型 |
h264、h265、mjpeg |
h264 |
w |
视频编码宽度 |
|
1280 |
h |
视频编码高度 |
|
720 |
s |
sensor类型 |
查看camera sensor文档 |
7 |
sensor类型取值查看k230_docs/zh/01_software/board/mpp/K230_Camera_Sensor适配指南.md
文档中关于k_vicap_sensor_type的描述
3.1.2 编译程序#
在k230_sdk
目录下执行make cdk-user
,在k230_sdk/src/common/cdk/user/out/little/
目录下生成rtsp_demo
程序源码目录k230_sdk/src/common/cdk/user/samples/rtsp_demo
3.1.3 运行程序#
支持音视频码流同时推流到rtsp server上,其中通过mapi venc&aenc
接口实现对音视频的编码;推流之后通过url进行拉取,目前支持两路url推拉流。
在大核上执行:
cd /sharefs; ./sample_sys_init.elf
在小核上执行:
./rtsp_demo
小核上运行rtsp_demo后,会打印出形如:
rtsp://ip:8554/session0
和rtsp://ip:8554/session01
的url地址,可通过vlc拉取对应的流进行播放。 vlc拉流方式:媒体->打开网络串流->在打开的窗口中输入对应的url。
3.2 语音对讲#
用于实现音频数据的双向传输和处理。 语音对讲涉及到两端,两端均能实时采集编码发送音频数据到对端,同时也能接收对端来的音频数据进行解码和输出。 当前实现参照了ONVIF,在rtsp协议的基础上扩展backchannel,从而支持从client向server发送音频数据;下文使用server和client分别代指语音对讲的两端。
音频码流格式为G711 mu-Law;
sever端实现了实时的音频采集编码和发送,以及通过backchannel接收来自client的音频数据进行解码和输出;
client端实现了音频码流的接收,解码和播放,以及实时采集音频,G711 mu-Law编码,并通过backchannel发送到server端
仅支持一对一的对讲(仅支持一路backchannel);
不支持回声消除等处理(设备侧需要音频输出到耳机,不能使用外放speaker);
3.2.1 编译程序#
在k230_sdk
目录下执行make cdk-user
,在k230_sdk/src/common/cdk/user/out/little/
目录下生成rtsp_server
和backclient_test
程序源码目录:
k230_sdk/src/common/cdk/user/samples/rtsp_demo/rtsp_server
k230_sdk/src/common/cdk/user/samples/rtsp_demo/backchannel_client
3.2.2 rtsp_server参数说明#
参数名 |
描述 |
参数范围 |
默认值 |
---|---|---|---|
h |
打印命令行参数信息 |
- |
- |
v |
是否创建video session |
- |
- |
t |
编码类型 |
h264、h265 |
h265 |
w |
视频编码宽度 |
|
1280 |
h |
视频编码高度 |
|
720 |
b |
视频编码码率 |
- |
2000 |
a |
变声设置 |
|
0 |
s |
sensor类型 |
查看camera sensor文档 |
7 |
sensor类型查看k230_docs/zh/01_software/board/mpp/K230_Camera_Sensor适配指南.md
文档中关于k_vicap_sensor_type的描述
3.2.3 运行程序#
两块EVB连到同一个网段,一个作为server,一个作为client。大小核完全启动后。
server端运行如下命令:
在大核上执行:
cd /sharefs; ./sample_sys_init.elf
在小核上执行:
cd /mnt; ./rtsp_server
(运行rtsp_server后,会打印出形如:rtsp://<server_ip>:8554/BackChannelTest
的url地址)
client端运行如下命令:
在大核上执行:
cd /sharefs; ./sample_sys_init.elf
在小核上执行:
./backclient_test rtsp://<server_ip>:8554/BackChannelTest
)
backclient_test执行命令说明:./backclient_test <rtsp_url> <out_type>
, 其中rtsp_url为rtsp地址,out_type为vo输出connect type,参看k230_docs/zh/01_software/board/mpp/K230_视频输出_API参考.md
中关于k_connector_type的描述,out_type默认设置为0