音视频通话 Linux SDK 开发集成指南

概要介绍

网易云通信 SDK 提供完善的音视频通话开发框架,提供基于网络的点对点视频通话和语音通话功能,还提供多人视频和音频会议功能,支持通话中音视频设备控制和实时音视频模式切换,支持音视频采集数据回调以实现美颜和变声等自定义功能。

业务介绍

网易云实时音视频源于网易多年的即时通讯的实时音视频通话功能的技术积累,提供稳定流畅、高品质、全平台、高实时的点对点和多人实时音视频通话服务。端到端延时小于200ms,网络动态优化,抗800ms网络抖动,在网络丢包30%时仍能正常通话。

网易云实时音视频服务适用于各种实时音视频场景,比如社交行业的视频聊天、视频交友、教育行业的小班化教学、点对点视频教学、企业内部的多人会议、远程医疗、游戏语音等等。

网易云实时音视频服务包含以下功能:

点对点音视频通话 多人音视频通话 场景模式 当前通话信息 采集 音视频前处理 通话过程控制 网络状况 录制

总体接口介绍

SDK 提供了3种类型的接口:

  1. 全局广播类通知的注册接口

    常见的几类消息或通知是通过这些接口注册的回调函数中通知开发者的,比如收到的消息,会话数据更新,用户相关数据的变更等,开发者需要在登录前提前注册好这些接口,例如:

     // 数据同步结果通知(nim_data_sync)
     void nim_data_sync_reg_complete_cb(nim_data_sync_cb_func cb, const void *user_data);        
     // 接收会话消息通知(nim_talk)
     void nim_talk_reg_receive_cb(const char *json_extension, nim_talk_receive_cb_func cb, const void *user_data);        
     // 接收系统消息通知(nim_sysmsg)
     void nim_sysmsg_reg_sysmsg_cb(const char *json_extension, nim_sysmsg_receive_cb_func cb, const void *user_data);    
     // 发送消息结果通知(nim_talk)
     void nim_talk_reg_arc_cb(const char *json_extension, nim_talk_arc_cb_func cb, const void *user_data);
     // 发送自定义系统通知的结果通知(nim_talk)
     void nim_talk_reg_custom_sysmsg_arc_cb(const char *json_extension, nim_custom_sysmsg_arc_cb_func cb, const void *user_data);
     // 群组事件通知(nim_team)
     void nim_team_reg_team_event_cb(const char *json_extension, nim_team_event_cb_func cb, const void *user_data);    
     // 帐号被踢通知(nim_client)
     void nim_client_reg_kickout_cb(const char *json_extension, nim_json_transport_cb_func cb, const void *user_data);        
     // 网络连接断开通知(nim_client)
     void nim_client_reg_disconnect_cb(const char *json_extension, nim_json_transport_cb_func cb, const void *user_data);    
     // 将本帐号的其他端踢下线的结果通知(nim_client)
     void nim_client_reg_kickout_other_client_cb(const char *json_extension, nim_json_transport_cb_func cb, const void *user_data); 
     // 好友通知 
     void nim_friend_reg_changed_cb(const char *json_extension, nim_friend_change_cb_func cb, const void *user_data);    
     // 用户特殊关系通知
     void nim_user_reg_special_relationship_changed_cb(const char *json_extension, nim_user_special_relationship_change_cb_func cb, const void *user_data);
  2. 异步接口。

    回调函数作为参数,传入执行接口,然后执行接口时,会触发传入的回调函数。注意,回调函数中如果涉及到跨线程资源的需要开发者切换线程操作,即使不涉及到资源问题,也要保证回调函数中不会处理耗时任务,以免堵塞SDK底层线程。

  3. 同步接口。

    为方便开发者使用,我们提供了一些同步接口,调用接口获取的内容同步返回,以block命名的都是同步接口。

服务器和客户端上线了频控策略,与服务器有交互的接口(接口命名结尾为_online的查询接口以及命令类接口,如同意群邀请等)增加频控控制,开发者关注错误码416。

如果开发者在调用C接口过程中或者解析接口返回结果过程中出现疑问,可以参考和借鉴C++封装层。

数据格式

SDK 使用JSON进行数据传输,接口的输入参数和返回结果都是JSON字符串,用户可以直接组装字符串或者通过序列化/反序列化在JSON和c 结构之间进行转换,推荐使用第二种方式,可阅读性和扩展性更好。接口数据的JSON schema 在头文件中都有说明。在SDK的结果回调中通常都包含错误码来指示操作是否成功,操作成功错误码被设置为 200 (kNIMResSuccess),其它值表明接口调用有错误发生,详细错误码定义请参考nim_res_code_def.h文件中NIMResCode的定义。

该文档中的代码片段使用 json_buildjsoncpp进行JSON字符串序列化/反序列化,演示了一些接口输入参数和返回结果的JSON格式和处理方法,用户可以使用其他第三方json库

依赖的库文件

SDK在Linux系统上使用alsa_lib库进行声音的采集和播放,nrtc_device库文件依赖asound库,若Linux系统没有自带这个库文件,请用户自行安装。以Ubuntu为例: sudo apt-get install libasound2-dev