agora_rtc_engine实现直播互动、播放音频文件
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 10 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 2 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 2 年前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 29 天前 | ||
| 6 个月前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 6 个月前 | ||
| 29 天前 | ||
| 29 天前 | ||
| 1 年前 | ||
| 3 年前 | ||
| 2 年前 | ||
| 4 个月前 | ||
| 6 个月前 |
agora_rtc
本项目基于 agora_rtc。
1. 安装与使用
1.1 安装
由于gitcode对上传文件大小有限制,需要下载当前项目到本地进行本地引用,检查项目更目录下ohos/lib下的AgoraRtcSdk.har文件大小是否有22121kb,若没有,则需要删除该har,然后将同级目录下的三个压缩包一起解压缩,以获取正确的har
TAG 命名规则:
原库版本-ohos-版本号-betax,不同 TAG 之间的变更详见 CHANGELOG.OpenHarmony.md。
TAG 版本对应表
| Flutter 框架版本 | TAG | 分支 |
|---|---|---|
| 3.7 | 6.5.0-ohos-1.0.0 | master |
| 3.22 | 6.5.0-ohos-1.0.0 | master |
| 3.27 | 6.5.0-ohos-1.0.0 | master |
| 3.35 | 6.5.0-ohos-1.0.0 | master |
1.2 OpenHarmony 设置
如果您需要播放网络视频,请在 module.json5 文件中添加网络权限:
"requestPermissions": [
// 访问互联网的权限
{
"name": "ohos.permission.INTERNET",
"reason": "$string:Internet_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "always" // 始终需要该权限
}
},
// 访问麦克风的权限
{
"name": "ohos.permission.MICROPHONE",
"reason": "$string:Audio_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "always" // 始终需要该权限
}
},
// 访问摄像头的权限
{
"name": "ohos.permission.CAMERA",
"reason": "$string:Video_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse" // 仅在使用时需要该权限
}
}
]
1.3 使用
完整用例请参阅 example。
最小示例:
_engine = createAgoraRtcEngine();
await _engine.initialize(RtcEngineContext(
appId: config.appId,
));
_rtcEngineEventHandler = RtcEngineEventHandler(
onError: (ErrorCodeType err, String msg) {
logSink.log('[onError] err: $err, msg: $msg');
},
onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
logSink.log(
'[onJoinChannelSuccess] connection: ${connection.toJson()} elapsed: $elapsed');
setState(() {
isJoined = true;
});
},
onRemoteAudioStateChanged: (RtcConnection connection, int remoteUid,
RemoteAudioState state, RemoteAudioStateReason reason, int elapsed) {
logSink.log(
'[onRemoteAudioStateChanged] connection: ${connection.toJson()} remoteUid: $remoteUid state: $state reason: $reason elapsed: $elapsed');
},
onLeaveChannel: (RtcConnection connection, RtcStats stats) {
logSink.log(
'[onLeaveChannel] connection: ${connection.toJson()} stats: ${stats.toJson()}');
setState(() {
isJoined = false;
});
},
onAudioRoutingChanged: (routing) {
logSink.log('[onAudioRoutingChanged] routing: $routing');
},
);
_engine.registerEventHandler(_rtcEngineEventHandler);
await _engine.enableAudio();
await _engine.setClientRole(role: ClientRoleType.clientRoleBroadcaster);
await _engine.setAudioProfile(
profile: AudioProfileType.audioProfileDefault,
scenario: AudioScenarioType.audioScenarioGameStreaming,
);
2. 约束条件
本文档基于以下版本验证:
- Flutter: 3.7.12-ohos-1.1.3; SDK: 5.0.0(12); IDE: DevEco Studio: 5.1.0.828; ROM: 5.1.0.130 SP8;
- Flutter: 3.22.0-ohos-1.0.3; SDK: 5.0.0(12); IDE: DevEco Studio: 5.1.0.828; ROM: 5.1.0.130 SP8;
- Flutter: 3.27.5-ohos-1.0.1; SDK: 5.0.0(12); IDE: DevEco Studio: 5.1.0.828; ROM: 5.1.0.130 SP8;
- Flutter: 3.35.8-ohos-0.0.2; SDK: 6.0.2(22); IDE: DevEco Studio: 6.0.2.640; ROM: 6.0.0.130 SP8;
3. API
"OpenHarmony 支持" 列中,"是" 表示支持;"否" 表示不支持。
| 名称 | 描述 | 类型 | 输入 | 输出 | OpenHarmony 支持 |
|---|---|---|---|---|---|
| initialize | 创建并初始化 RtcEngine | 方法 | {"appId": appId} | Future | 是 |
| release | 销毁 RtcEngine 对象 | 方法 | NA | Future | 是 |
| setChannelProfile | 设置频道场景 | 方法 | ChannelProfileType profile | Future | 是 |
| joinChannel | 加入频道 | 方法 | String token,String channelId,int uid,ChannelMediaOptions options | Future | 是 |
| joinChannelEx | 加入频道 | 方法 | String token,RtcConnection connection,ChannelMediaOptions options | Future | 是 |
| updateChannelMediaOptions | 加入频道后更新频道媒体选项 | 方法 | ChannelMediaOptions options | Future | 是 |
| updateChannelMediaOptionsEx | 加入频道后更新频道媒体选项 | 方法 | ChannelMediaOptions options,RtcConnection connection | Future | 是 |
| leaveChannel | 设置频道选项并离开频道 | 方法 | LeaveChannelOptions? options | Future | 是 |
| leaveChannelEx | 设置频道选项并离开频道 | 方法 | RtcConnection connection, LeaveChannelOptions? options | Future | 是 |
| renewToken | 更新 Token | 方法 | String token | Future | 是 |
| setClientRole | 设置直播场景下的用户角色和观众端延时级别 | 方法 | ClientRoleType role, ClientRoleOptions? options | Future | 是 |
| muteLocalAudioStream | 取消或恢复发布本地音频流 | 方法 | bool mute | Future | 是 |
| muteLocalAudioStreamEx | 取消或恢复发布本地音频流 | 方法 | bool mute, RtcConnection connection | Future | 是 |
| muteRemoteAudioStream | 取消或恢复订阅指定远端用户的音频流 | 方法 | int uid, bool mute | Future | 是 |
| muteRemoteAudioStreamEx | 停止/恢复接收指定的音频流 | 方法 | int uid,bool mute,RtcConnection connection | Future | 是 |
| muteAllRemoteAudioStreams | 取消或恢复订阅所有远端用户的音频流 | 方法 | bool mute | Future | 是 |
| muteAllRemoteAudioStreamsEx | 取消或恢复订阅所有远端用户的音频流 | 方法 | bool mute, RtcConnection connection | Future | 是 |
| muteLocalVideoStream | 取消或恢复发布本地视频流 | 方法 | bool mute | Future | 是 |
| muteLocalVideoStreamEx | 取消或恢复发布本地视频流 | 方法 | bool mute, RtcConnection connection | Future | 是 |
| muteRemoteVideoStream | 取消或恢复订阅指定远端用户的视频流 | 方法 | int uid, bool mute | Future | 是 |
| muteRemoteVideoStreamEx | 停止/恢复接收指定的视频流 | 方法 | int uid, bool mute, RtcConnection connection | Future | 是 |
| muteAllRemoteVideoStreams | 取消或恢复订阅所有远端用户的视频流 | 方法 | bool mute | Future | 是 |
| muteAllRemoteVideoStreamsEx | 取消或恢复订阅所有远端用户的视频流 | 方法 | bool mute, RtcConnection connection | Future | 是 |
| adjustUserPlaybackSignalVolume | 调节本地播放的指定远端用户信号音量 | 方法 | int uid, int volume | Future | 是 |
| adjustUserPlaybackSignalVolumeEx | 调节本地播放的指定远端用户信号音量 | 方法 | int uid, int volume, RtcConnection connection | Future | 是 |
| adjustPlaybackSignalVolume | 调节本地播放的所有远端用户信号音量 | 方法 | int volume | Future | 是 |
| enableAudio | 启用音频模块 | 方法 | NA | Future | 是 |
| disableAudio | 关闭音频模块 | 方法 | NA | Future | 是 |
| enableAudioVolumeIndication | 启用用户音量提示 | 方法 | int interval, int smooth,bool reportVad | Future | 是 |
| enableAudioVolumeIndicationEx | 启用用户音量提示 | 方法 | int interval, int smooth,bool reportVad,RtcConnection connection | Future | 是 |
| setAudioProfile | 设置音频编码属性 | 方法 | AudioProfileType profile,AudioScenarioType scenario | Future | 是 |
| setAudioScenario | 设置音频场景 | 方法 | AudioScenarioType scenario | Future | 是 |
| enableLocalAudio | 开启或关闭本地音频采集 | 方法 | bool enabled | Future | 是 |
| adjustRecordingSignalVolume | 调节音频采集信号音量 | 方法 | int volume | Future | 是 |
| enableInEarMonitoring | 开启耳返功能 | 方法 | bool enabled,EarMonitoringFilterType includeAudioFilters | Future | 是 |
| setInEarMonitoringVolume | 设置耳返音量 | 方法 | int volume | Future | 是 |
| enableVideo | 启用视频模块 | 方法 | NA | Future | 是 |
| disableVideo | 关闭视频模块 | 方法 | NA | Future | 是 |
| setVideoEncoderConfiguration | 设置视频编码属性 | 方法 | VideoEncoderConfiguration config | Future | 是 |
| setVideoEncoderConfigurationEx | 设置视频编码属性 | 方法 | VideoEncoderConfiguration config,RtcConnection connection | Future | 是 |
| startPreview | 开启视频预览并指定预览的视频源 | 方法 | VideoSourceType sourceType | Future | 是 |
| stopPreview | 停止视频预览 | 方法 | VideoSourceType sourceType | Future | 是 |
| enableLocalVideo | 开关本地视频采集 | 方法 | bool enabled | Future | 是 |
| startCameraCapture | 开始通过摄像头采集视频 | 方法 | VideoSourceType sourceType,CameraCapturerConfiguration config | Future | 是 |
| stopCameraCapture | 停止通过摄像头采集视频 | 方法 | VideoSourceType sourceType | Future | 是 |
| startScreenCapture | 开始屏幕采集 | 方法 | ScreenCaptureParameters2 captureParams | Future | 是 |
| updateScreenCaptureParameters | 更新屏幕采集的参数配置 | 方法 | ScreenCaptureParameters captureParams | Future | 是 |
| stopScreenCapture | 停止屏幕采集 | 方法 | NA | Future | 是 |
| enableContentInspect | 开启/关闭本地截图上传 | 方法 | bool enabled, ContentInspectConfig config | Future | 是 |
| takeSnapshot | 获取视频截图 | 方法 | int uid, String filePath | Future | 是 |
| enableVirtualBackground | 开启虚拟背景并指定媒体源,或关闭虚拟背景 | 方法 | bool enabled, VirtualBackgroundSource backgroundSource,SegmentationProperty segproperty,MediaSourceType type | Future | 是 |
| enableFaceDetection | 开启/关闭本地人脸检测 | 方法 | bool enabled | Future | 是 |
| setDualStreamModeEx | 在发送端设置双流模式 | 方法 | SimulcastStreamMode mode,SimulcastStreamConfig streamConfig,RtcConnection connection | Future | 是 |
| startLocalVideoTranscoder | 开启本地合图 | 方法 | LocalTranscoderConfiguration config | Future | 是 |
| stopLocalVideoTranscoder | 停止本地合图 | 方法 | NA | Future | 是 |
| updateLocalTranscoderConfiguration | 更新本地合图配置 | 方法 | LocalTranscoderConfiguration config | Future | 是 |
| setLocalRenderMode | 更新本地视图显示模式 | 方法 | RenderModeType renderMode,VideoMirrorModeType mirrorMode | Future | 是 |
| setRemoteRenderMode | 更新远端视图显示模式 | 方法 | int uid,RenderModeType renderMode,VideoMirrorModeType mirrorMode | Future | 是 |
| setupLocalVideo | 初始化本地视图 | 方法 | VideoCanvas canvas | Future | 是 |
| setupRemoteVideo | 初始化远端用户视图 | 方法 | VideoCanvas canvas | Future | 是 |
| setupRemoteVideoEx | 初始化远端用户视图 | 方法 | VideoCanvas canvas, RtcConnection connection | Future | 是 |
| createCustomVideoTrack | 创建一个自定义的视频轨道 | 方法 | NA | Future | 是 |
| destroyCustomVideoTrack | 销毁指定的视频轨道 | 方法 | int videoTrackId | Future | 是 |
| startAudioMixing | 开始播放音乐文件 | 方法 | String filePath,bool loopback,int cycle,int startPos | Future | 是 |
| stopAudioMixing | 停止播放音乐文件 | 方法 | NA | Future | 是 |
| pauseAudioMixing | 暂停播放音乐文件 | 方法 | NA | Future | 是 |
| resumeAudioMixing | 恢复播放音乐文件 | 方法 | NA | Future | 是 |
| adjustAudioMixingVolume | 调节音乐文件的播放音量 | 方法 | int volume | Future | 是 |
| adjustAudioMixingPlayoutVolume | 调节音乐文件在本地播放的音量 | 方法 | int volume | Future | 是 |
| getAudioMixingDuration | 获取音乐文件总时长 | 方法 | NA | Future | 是 |
| getAudioMixingCurrentPosition | 获取音乐文件的播放进度 | 方法 | NA | Future | 是 |
| playEffect | 播放指定的本地或在线音效文件 | 方法 | required int soundId,String filePath,int loopCount,double pitch,double pan,int gain,publish,int startPos | Future | 是 |
| stopEffect | 停止播放指定音效文件 | 方法 | NA | Future | 是 |
| createMediaPlayer | 创建媒体播放器对象 | 方法 | NA | Future | 是 |
| createMediaRecorder | 创建音视频录制对象 | 方法 | RecorderStreamInfo info | Future | 是 |
| startAudioRecording | 开始客户端录音 | 方法 | AudioRecordingConfiguration config | Future | 是 |
| stopAudioRecording | 停止客户端录音 | 方法 | NA | Future | 是 |
| destroyMediaRecorder | 销毁音视频录制对象 | 方法 | MediaRecorder mediaRecorder | Future | 是 |
| startOrUpdateChannelMediaRelay | 开始或更新跨频道媒体流转发 | 方法 | ChannelMediaRelayConfiguration configuration | Future | 是 |
| startOrUpdateChannelMediaRelayEx | 开始或更新跨频道媒体流转发 | 方法 | ChannelMediaRelayConfiguration configuration,RtcConnection connection | Future | 是 |
| stopChannelMediaRelay | 停止跨频道媒体流转发。一旦停止,主播会退出所有目标频道 | 方法 | NA | Future | 是 |
| pauseAllChannelMediaRelay | 暂停向所有目标频道转发媒体流 | 方法 | NA | Future | 是 |
| resumeAllChannelMediaRelay | 恢复向所有目标频道转发媒体流 | 方法 | NA | Future | 是 |
| startRtmpStreamWithTranscoding | 开始旁路推流并设置转码属性 | 方法 | String url, LiveTranscoding transcoding | Future | 是 |
| updateRtmpTranscoding | 更新旁路推流转码属性 | 方法 | LiveTranscoding transcoding | Future | 是 |
| stopRtmpStream | 结束旁路推流 | 方法 | String url | Future | 是 |
| createDataStream | 创建数据流 | 方法 | DataStreamConfig config | Future | 是 |
| createDataStreamEx | 创建数据流 | 方法 | DataStreamConfig config, RtcConnection connection | Future | 是 |
| sendStreamMessage | 发送数据流 | 方法 | int streamId, Uint8List data,int length | Future | 是 |
| setDefaultAudioRouteToSpeakerphone | 设置默认的音频路由 | 方法 | bool defaultToSpeaker | Future | 是 |
| setEnableSpeakerphone | 开启或关闭扬声器播放 | 方法 | bool speakerOn | Future | 是 |
| isSpeakerphoneEnabled | 检查扬声器状态启用状态 | 方法 | NA | Future | 是 |
| switchCamera | 切换前置/后置摄像头 | 方法 | NA | Future | 是 |
| setCameraCapturerConfiguration | 设置摄像头采集配置 | 方法 | CameraCapturerConfiguration config | Future | 是 |
| getCameraMaxZoomFactor | 获取摄像头支持最大缩放比例 | 方法 | NA | Future | 是 |
| setCameraZoomFactor | 设置摄像头缩放比例 | 方法 | double factor | Future | 是 |
| isCameraFocusSupported | 检测设备是否支持手动对焦功能 | 方法 | NA | Future | 是 |
| setCameraExposureFactor | 设置当前摄像头的曝光系数 | 方法 | double factor | Future | 是 |
| setCameraFocusPositionInPreview | 设置手动对焦位置,并触发对焦 | 方法 | double positionX, double positionY | Future | 是 |
| startLastmileProbeTest | 开始通话前网络质量探测 | 方法 | LastmileProbeConfig config | Future | 是 |
| stopLastmileProbeTest | 停止通话前网络质量探测 | 方法 | NA | Future | 是 |
| getCurrentMonotonicTimeInMs | 获取 SDK 当前的 Monotonic Time | 方法 | NA | Future | 是 |
| setParameters | SDK 的 JSON 配置信息,用于提供技术预览或特别定制功能 | 方法 | String parameters | Future | 是 |
| getCallId | 获取通话 ID | 方法 | NA | Future | 是 |
| getCallIdEx | 使用连接 ID 获取通话 ID | 方法 | RtcConnection connection | Future | 是 |
| enableEncryption | 开启或关闭内置加密 | 方法 | bool enabled, EncryptionConfig config | Future | 是 |
| adjustPlayoutVolume | 调节本地播放音量 | 方法 | int volume | Future | 是 |
| adjustPublishSignalVolume | 调节远端用户听到的音量 | 方法 | int volume | Future | 是 |
| getDuration | 获取媒体文件总时长 | 方法 | NA | Future | 是 |
| getMediaPlayerId | 获取播放器 ID | 方法 | NA | int | 是 |
| getMute | 获取当前播放的媒体文件是否静音 | 方法 | NA | Future | 是 |
| getPlayoutVolume | 获取当前本地播放音量 | 方法 | NA | Future | 是 |
| getPlayPosition | 获取当前播放进度 | 方法 | NA | Future | 是 |
| getPlaySrc | 获取播放的媒体资源的路径 | 方法 | NA | Future | 是 |
| getPublishSignalVolume | 获取远端用户听到的音量 | 方法 | NA | Future | 是 |
| getState | 获取播放器当前状态 | 方法 | NA | Future | 是 |
| getStreamCount | 获取当前媒体文件中媒体流的数量 | 方法 | NA | Future | 是 |
| getStreamInfo | 通过媒体流的索引值获取媒体流信息 | 方法 | int index | Future | 是 |
| mute | 设置是否静音 | 方法 | bool muted | Future | 是 |
| open | 打开媒体资源 | 方法 | String url, int startPos | Future | 是 |
| openWithMediaSource | 打开媒体资源并进行播放设置 | 方法 | MediaSource source | Future | 是 |
| pause | 暂停播放 | 方法 | NA | Future | 是 |
| play | 播放媒体文件 | 方法 | NA | Future | 是 |
| playPreloadedSrc | 播放预加载的媒体资源 | 方法 | String src | Future | 是 |
| preloadSrc | 预加载媒体资源 | 方法 | String src, int startPos | Future | 是 |
| resume | 暂停后恢复播放 | 方法 | NA | Future | 是 |
| seek | 定位到媒体文件的指定播放位置 | 方法 | int newPos | Future | 是 |
| selectAudioTrack | 指定当前音频文件的播放音轨 | 方法 | int index | Future | 是 |
| selectMultiAudioTrack | 选择本地播放和发送至远端的音轨 | 方法 | int playoutTrackIndex, int publishTrackIndex | Future | 是 |
| setAudioPitch | 调整当前播放的媒体资源的音调 | 方法 | int pitch | Future | 是 |
| setAudioDualMonoMode | 设置当前音频文件的声道模式 | 方法 | AudioDualMonoMode mode | Future | 是 |
| setLoopCount | 设置循环播放 | 方法 | int loopCount | Future | 是 |
| setPlaybackSpeed | 设置当前音频文件的播放速度 | 方法 | int speed | Future | 是 |
| setRenderMode | 设置播放器视图的渲染模式 | 方法 | RenderModeType renderMode | Future | 是 |
| setView | 设置播放器渲染视图 | 方法 | int view | Future | 是 |
| stop | 销毁播放器 | 方法 | NA | Future | 是 |
| switchSrc | 切换媒体资源 | 方法 | String src, bool syncPts | Future | 是 |
| unloadSrc | 释放预加载的媒体资源 | 方法 | String src | Future | 是 |
| startRecording | 开始录制 | 方法 | MediaRecorderConfiguration config | Future | 是 |
| stopRecording | 停止录制 | 方法 | NA | Future | 是 |
4. 许可证
遵循 BSD 3-Clause License 分发。详见 LICENSE。
5. 补充说明
AgoraRtcSdk.har来源:声网官方下载地址 AgoraRtcSdk.part1.rar AgoraRtcSdk.part2.rar AgoraRtcSdk.part3.rar是AgoraRtcSdk.har的分卷压缩包