| Name | Date | Size | #Lines | LOC | ||
|---|---|---|---|---|---|---|
| .. | - | - | ||||
| AppScope/ | 06-May-2025 | - | 35 | 32 | ||
| entry/ | 06-May-2025 | - | 3,755 | 3,258 | ||
| hvigor/ | 06-May-2025 | - | 22 | 21 | ||
| screenshots/ | 06-May-2025 | - | ||||
| script/ | 06-May-2025 | - | 66 | 37 | ||
| .gitignore | D | 06-May-2025 | 95 | 7 | 7 | |
| README_zh.md | D | 06-May-2025 | 8.9 KiB | 142 | 103 | |
| build-profile.json5 | D | 06-May-2025 | 1.1 KiB | 43 | 42 | |
| hvigorfile.ts | D | 06-May-2025 | 159 | 2 | 1 | |
| hvigorw | D | 06-May-2025 | 2.1 KiB | 64 | 28 | |
| hvigorw.bat | D | 06-May-2025 | 2 KiB | 72 | 56 | |
| oh-package.json5 | D | 06-May-2025 | 834 | 27 | 25 | |
| ohosTest.md | D | 06-May-2025 | 1.1 KiB | 15 | 12 |
README_zh.md
1# 音频通话示例 2 3### 介绍 4 5本示例主要展示了音频通话相关的功能,使用[@ohos.multimedia.audio](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-audio-kit/js-apis-audio.md) 6、[@ohos.net.socket](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-network-kit/js-apis-socket.md) 7等接口,实现音频录制和渲染,音频数据网络传输等功能 8 9### 效果预览 10 11| 发起通话 | 来电 | 通话页 | 悬浮窗 | 12|--------------------------------------------|---------------------------------------------|------------------------------------------|----------------------------------------------| 13|  |  |  |  | 14 15使用说明 16 171.语音通话需要运行服务端代码模拟启动流媒体服务端,连接成功后服务端会在终端打印client连接数,如下图: 18 19 20 212.服务端和两台设备在局域网内组成socket网络,运行时需要注意修改ip地址: 22 23- 服务端地址在[socket.js](./script/socket.js)第19行修改 24- 客户端地址在[BufferModel.ets](./entry/src/main/ets/model/BufferModel.ets),将serverIp替换为服务端IP地址即可 25 26 27 28 293.仅体验语音通话功能时,可以两台设备都手动启动语音通话应用,分别点击接听按钮进入通话页面 30 314.体验场景所有功能时,需要两台设备启动[聊天应用](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Connectivity/StageSocket),通过左下方语音按钮发起语音通话 32 335.一方发起语音通话请求,对方选择同意或拒绝 34 356.对方同意后,进行通话 36 377.通话页或请求通话页可以选择关闭麦克风或扬声器 38 398.对方拒接或同意后挂断,则返回聊天页面 40 41 42 43### 工程目录 44 45``` 46/VoiceCallDemo 47├── entry # 主entry模块目录 48│ └── src 49│ ├── main 50│ ├── ets # ets模块目录 51│ ├── audio # 音频录制和渲染 52│ ├── components # 组件目录 53│ ├── ComponentOption.ets # 按钮组件,如扬声器麦克风切换按钮 54│ ├── ComponentPerson.ets # 头像和名称组件 55│ ├── ComponentVoiceBg.ets # 通话公用父组件 56│ ├── UIAnswer.ets # 被呼叫UI 57│ ├── UICall.ets # 呼叫UI 58│ ├── UIVoice.ets # 呼叫UI或通话UI 59│ ├── controller # 60│ ├── FloatWindowController.ets # 负责管理悬浮窗切换 61│ ├── IndexController.ets # 负责管理socket连接逻辑,worker启动停止,UI和通话事件传递 62│ ├── entryability 63│ ├── model # 64│ ├── AudioManagerModel.ts # mic开关和扬声器开关 65│ ├── BufferModel.ts # 流媒体连接,数据接收与发送,管理workers 66│ ├── OptionModel.ets # 与聊天示例应用通讯事件管理 67│ ├── net # 网络层封装代码,不含业务逻辑 68│ ├── pages # 69│ ├── utils # 工具类目录 70│ ├── workers # works目录 71│ ├── CapturerWorker.ts # 音频录制线程 72│ ├── RendererWorker.ts # 音频渲染线程 73│ ├── Constants.ts # 定义 workers 通讯常量,UI事件常量,IPC通讯常量 74 75``` 76 77### 具体实现 78 79+ TCP socket模拟音频流网络传输: 80 + 代码:[BufferModel](entry/src/main/ets/model/BufferModel.ets)和 [SocketImpl](entry/src/main/ets/net/SocketImpl.ets) 81 + 使用@ohos.net.socket 的constructTCPSocketInstance创建TCP socket连接,模拟实现音频流网络传输 82 + 3s一次检查网络状态和尝试连接,实现网络异常时的处理逻辑 83+ 音频录制: 84 + [CapturerWorker](entry/src/main/ets/workers/CapturerWorker.ts)创建音频采集的子线程 85 + [AudioCapturerHelper](./entry/src/main/ets/audio/AudioCapturerHelper.ts) 86 使用@ohos.multimedia.audio.AudioCapturer完成音频采集 [具体使用参考](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/media/using-audiocapturer-for-recording.md/) 87+ 音频播放: 88 + [RendererWorker](entry/src/main/ets/workers/RendererWorker.ts)创建音频播放的子线程 89 + [AudioRendererHelper](./entry/src/main/ets/audio/AudioCapturerHelper.ts) 90 使用@ohos.multimedia.audio.AudioRenderer完成音频播放 [具体使用参考](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/media/using-audiorenderer-for-playback.md/) 91+ 麦克风与扬声器以及通话场景控制: 92 + 代码[AudioManagerModel](entry/src/main/ets/model/AudioManagerModel.ets) 93 + 使用@ohos.multimedia.audio.AudioManager的setAudioScene接口切换通话场景 94 + 使用@ohos.multimedia.audio.AudioVolumeGroupManager的setMicrophoneMute接口切换麦克风 95 + 使用@ohos.multimedia.audio.AudioRoutingManager的setCommunicationDevice接口切换扬声器 96 97### 相关权限 98 99| [权限](https://docs.openharmony.cn/pages/v3.2/zh-cn/application-dev/security/permission-list.md/) | 说明 | 权限登记 | 授权方式 | 100|-------------------------------------------------------------------------------------------------|------------------|--------------|--------------| 101| ohos.permission.MICROPHONE | 允许应用使用麦克风 | normal | user_grant | 102| ohos.permission.INTERNET | 允许使用Internet网络 | normal | system_grant | 103| ohos.permission.GET_WIFI_INFO | 允许应用获取WLAN信息 | normal | system_grant | 104| ohos.permission.MANAGE_AUDIO_CONFIG | 允许应用进行全局麦克风静音等操作 | system_basic | system_grant | 105| ohos.permission.SYSTEM_FLOAT_WINDOW | 允许应用使用悬浮窗的能力 | system_basic | system_grant | 106 107### 依赖 108 1091. windows上启动node socket服务,模拟流媒体服务,音频数据使用pcm传输,未编解码. [代码](./script/socket.js) 1102. 需要使用[聊天示例](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Connectivity/StageSocket)启动音频通话功能 111 112 113 114### 约束与限制 115 1161.本示例仅支持标准系统上运行,支持设备:RK3568,DAYU200。 117 1182.本示例为Stage模型,支持API10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0 Release) 119 1203.本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。 121 1224.本示例涉及使用系统接口@ohos.multimedia.audio:setAudioScene,需要手动替换Full 123 SDK才能编译通过,具体操作可参考[替换指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/faqs/full-sdk-switch-guide.md) 124 1255.本示例所配置的权限为system_basic级别( 126 相关权限级别可通过[权限定义列表](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md) 127 查看),需要手动配置对应级别的权限签名( 128 具体操作可查看[自动化签名方案](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/hapsigntool-overview.md)) 129 1306.本示例有使用系统特性api,需要手动配置对应级别的应用类型("app-feature": "hos_system_app")。具体可参考profile配置文件[bundle-info对象内部结构](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/app-provision-structure.md#bundle-info%E5%AF%B9%E8%B1%A1%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84) 131 132### 下载 133 134如需单独下载本工程,执行如下命令: 135 136``` 137git init 138git config core.sparsecheckout true 139echo code\SystemFeature\Media\VoiceCallDemo\ > .git/info/sparse-checkout 140git remote add origin https://gitee.com/openharmony/applications_app_samples.git 141git pull origin master 142```