简体中文

基于AVAPIs的对讲实现

导语

在说实现方式之前,先简单说下avIndex。3.3以上的SDK,默认已经支持数据全双工通信。

在连接一创建,就会建立一个主通道(即使用IOTC的0通道创建的那个通道,详情可见avClientStartE和avServStartEx的参数),然后客户端通过主通道去观看视频。

image.png

音频格式同步(公版APP做法)

APP端将发送IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_REQ向设备查询对讲支持的音频格式。
参数如下:
typedef struct{
    unsigned int channel;       // camera index
    char reserved[4];
}SMsgAVIoctrlGetAudioOutFormatReq;
设备端回复指令IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_RESP,
参数如下:
typedef struct{
    unsigned int channel;          // camera index
    int format;                    // 参考ENUM_CODECID in AVFRAMEINFO.h
    char sample_rate;
    char bitdata;
    char channels;                 // 可支持的通道数量
    char avservchannel;            // 0:子通道;1:主通道;otherwise:子通道(默认0)
}SMsgAVIoctrlGetAudioOutFormatResp;

 enum Sample_Rate{
    AUDIO_SAMPLE_8K = 0,
    AUDIO_SAMPLE_11K = 1,
    AUDIO_SAMPLE_12K = 2,
    AUDIO_SAMPLE_16K = 3,
    AUDIO_SAMPLE_22K = 4,
    AUDIO_SAMPLE_24K = 5,
    AUDIO_SAMPLE_32K = 6,
    AUDIO_SAMPLE_44K = 7,
    AUDIO_SAMPLE_48K = 8
}

enum CodecId{
    MEDIA_CODEC_UNKNOWN = 0x00,
    MEDIA_CODEC_VIDEO_MPEG4 = 0x4C,       // 76
    MEDIA_CODEC_VIDEO_H263 = 0x4D,        // 77
    MEDIA_CODEC_VIDEO_H264 = 0x4E,        // 78
    MEDIA_CODEC_VIDEO_MJPEG = 0x4F,       // 79
    MEDIA_CODEC_VIDEO_HEVC = 0x50,        // 80
    MEDIA_CODEC_AUDIO_AAC_RAW = 0x86,     // 134
    MEDIA_CODEC_AUDIO_AAC_ADTS = 0x87,    // 135
    MEDIA_CODEC_AUDIO_AAC_LATM = 0x88,    // 136
    MEDIA_CODEC_AUDIO_G711U = 0x89,       // 137
    MEDIA_CODEC_AUDIO_G711A = 0x8A,       // 138
    MEDIA_CODEC_AUDIO_ADPCM = 0x8B,       // 139
    MEDIA_CODEC_AUDIO_PCM = 0x8C,         // 140
    MEDIA_CODEC_AUDIO_SPEEX = 0x8D,       // 141
    MEDIA_CODEC_AUDIO_MP3 = 0x8E,         // 142
    MEDIA_CODEC_AUDIO_G726 = 0x8F         // 143
}

enum DATABITS{
    AUDIO_DATABITS_8 = 0,
    AUDIO_DATABITS_16 = 1
}

实现方式

因为主通道是一个全双工的通道,所以我们可以在这个主通道上面去传对讲的音频。
那么客户端怎么通知设备开启对讲呢?
我们的IO Ctrl定义里面2条指令(可以参考SDK Readme.htm第五部分):
IOTYPE_USER_IPCAM_SPEAKERSTART  => 用以开启对讲
IOTYPE_USER_IPCAM_SPEAKERSTOP   => 用以关闭对讲
APP通过avSendIOCtrl发送IOTYPE_USER_IPCAM_SPEAKERSTART之后,就可以调用avSendAudioData给设备发送声音了。
设备端通过avRecvIOCtrl接收到IOTYPE_USER_IPCAM_SPEAKERSTART之后,就可以调用avRecvAudioData去接收APP传过来的声音了。
同理,如果要结束对讲,则通过IOTYPE_USER_IPCAM_SPEAKERSTOP去通知设备端即可。


即刻开启您的物联网之旅

联系解决方案专家
Kalay App
解决方案
新闻动态
公司动态
行业资讯
媒体报道
永续发展
经营者的话
社会参与
环境永续
公司治理

+86 755 27702549

7×24小时服务热线

法律声明 隐私权条款

关注“TUTK”

TUTK服务尽在掌握

© 2022 物联智慧科技(深圳)有限公司版权所有粤ICP备14023641号
在线咨询
扫一扫

TUTK服务尽在掌握

全国免费服务热线
+86 755 27702549

返回顶部