You need to enable JavaScript to run this app.
文档中心
实时音视频

实时音视频

复制全文
下载 pdf
实现音视频通话
Unity
复制全文
下载 pdf
Unity
集成 RTC SDK 后,你可以使用其中接口快速构建基础应用,实现基本实时音视频通话;你也能通过阅读代码,了解音视频通话的最佳实践。 如果你想了解完整的项目实现,参看 Demo 工程文件。​
前提条件​
  • Unity Editor 2017+​
以下示例基于 Unity 2017 版本。不同的 Unity 版本上,操作方式可能有细微差别。如果你使用的 Unity 版本和示例中不一致,并发生了问题,请联系技术支持。​
  • Android Studio 3.5+​
  • XCode 14.1 +​
步骤 1:集成 SDK​
下载 SDK 离线包,然后导入到 Unity 工程中,如下图所示:​
​图片​​
步骤 2:系统配置​
Windows 平台​
进入 PlayerSetting -> Other Settings。​
  1. 设置 Scripting Runtime Version 为 Experimental (.Net 4.6 Equivalent)。​
  1. 选择 IL2CPP 打包方式。​
​图片​​
Android 平台​
配置 Gradle​
在 PlayerSetting -> Publishing Settings 下,勾选 CustomGradleTemplate, 如果没有 CustomGradleTemplate, 则勾选 CustomLauncherGradle Template。​
​图片​​
之后会在 Assets -> Plugins -> Android 目录下生成 Template.gradle 文件,然后在里面添加代码:​
​
dependencies​
{​
implementation fileTree(dir: 'libs', include: ['*.jar'])​
implementation 'com.android.support:support-v4:28.0.0'​
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.61'​
}​
​
android​
{​
packagingOptions​
{​
pickFirst "lib/*/libc++_shared.so"​
​
pickFirst "lib/*/libbmf_hydra.so"​
pickFirst "lib/*/libbmf_mods.so"​
pickFirst "lib/*/libbytenn.so"​
pickFirst "lib/*/libbytertc_ffmpeg_audio_extension.so"​
pickFirst "lib/*/libbytertc_nico_extension.so"​
pickFirst "lib/*/libbytertc_videodenoise_extension.so"​
pickFirst "lib/*/libbytertc_videosharpen_extension.so"​
pickFirst "lib/*/libbytertc_videosr_extension.so"​
pickFirst "lib/*/libh265enc.so"​
pickFirst "lib/*/libbdaudioeffect.so"​
​
}​
}​
​
iOS 平台​
配置 XCodePostProcess​
在 Assets 文件下新建 Editor 目录,在 Editor 目录下新建 XCodePostProcess.cs 文件。​
​图片​​
在 XCodePostProcess.cs 里面添加生成 XCode 工程的配置代码:​
​
using UnityEditor;​
using UnityEditor.Callbacks;​
using UnityEditor.iOS.Xcode;​
using UnityEditor.iOS.Xcode.Extensions;​
using System.IO;​
​
public static class XCodePostProcess​
{​
private static void AddEmbedFramework(PBXProject project, string targetGuid, string frameworkName) ​
{​
#if !UNITY_2019_3_OR_NEWER​
const string defaultLocationInProj = "Frameworks/RTCVideo/Plugins/iOS";​
string framework = Path.Combine(defaultLocationInProj, frameworkName);​
string fileGuid = project.AddFile(framework, "Frameworks/" + framework, PBXSourceTree.Sdk);​
PBXProjectExtensions.AddFileToEmbedFrameworks(project, targetGuid, fileGuid);​
#endif​
}​
​
[PostProcessBuild(999)]​
public static void OnPostProcessBuild(BuildTarget buildTarget, string path)​
{​
if(buildTarget == BuildTarget.iOS)​
{​
string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";​
​
PBXProject pbxProject = new PBXProject();​
pbxProject.ReadFromFile(projectPath);​
#if !UNITY_2019_3_OR_NEWER​
string mainTarget = PBXProject.GetUnityTargetName();​
#else​
string mainTarget = pbxProject.GetUnityMainTargetGuid();​
#endif​
string targetGuid = pbxProject.TargetGuidByName(mainTarget);​
pbxProject.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");​
pbxProject.SetBuildProperty(targetGuid, "CODE_SIGN_STYLE", "Manual");​
pbxProject.SetBuildProperty(targetGuid, "PRODUCT_NAME", "VideoSDKDemo");​
​
AddEmbedFramework(pbxProject, targetGuid, "VolcEngineRTC.framework");​
AddEmbedFramework(pbxProject, targetGuid, "VolcEngineRTCScreenCapturer.framework");​
AddEmbedFramework(pbxProject, targetGuid, "ByteRTCCWrapper.framework");​
pbxProject.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks");​
pbxProject.WriteToFile (projectPath);​
​
// 修改plist​
string plistPath = path + "/Info.plist";​
PlistDocument plist = new PlistDocument();​
plist.ReadFromString(File.ReadAllText(plistPath));​
PlistElementDict rootDict = plist.root;​
rootDict.SetString("NSMicrophoneUsageDescription", "App需要您的同意,才能访问麦克风");​
rootDict.SetString("NSCameraUsageDescription", "App需要您的同意,才能访问相机");​
rootDict.SetString("CFBundleIdentifier", "${PRODUCT_BUNDLE_IDENTIFIER}");​
PlistElementArray backgroundModesArray = rootDict.CreateArray("UIBackgroundModes");​
backgroundModesArray.AddString("audio");​
plist.WriteToFile(plistPath);​
}​
}​
}​
​
步骤 3:实现音视频通话​
​图片​​
1. 创建引擎实例 CreateRTCVideo​
​
public int CreateRTCVideo(RTCVideoEngineParams initParams); ​
​
public struct RTCVideoEngineParams {​
/** {zh}​
* @brief 应用 ID。​
*/​
public string AppID;​
/** {zh}​
* @brief 初始化参数。​
*/​
public Dictionary<string, object> Params;​
};​
​
​
参数名​
类型​
说明​
AppID​
String​
每个应用的唯一标识符,由 RTC 控制台随机生成的。不同的 AppId 生成的实例在 RTC 中进行音视频通话完全独立,无法互通。​
Params​
Dictionary<string, object>​
用以覆盖默认参数的本引擎实例参数。JSON 字符串格式。​
​
2. 设置视频编码参数​
​
public int SetVideoEncoderConfig(VideoEncoderConfig maxSolution)​
​
​
参数名​
类型​
说明​
maxSolution​
VideoEncoderConfig​
期望发布的最大分辨率视频流参数。参看 VideoEncoderConfig。​
​
3. 设置本地视频渲染视图 SetLocalVideoSink​
​
void SetLocalVideoSink(StreamIndex index, VideoSinkPixelFormat requiredFormat)​
​
​
参数名​
类型​
说明​
index​
StreamIndex​
视频流属性, 参看 StreamIndex​
requiredFormat​
VideoSinkPixelFormat​
视频编码格式 VideoSinkPixelFormat​
​
4. 开始视频采集 StartVideoCapture​
​
public void StartVideoCapture()​
​
5. 开始音频采集 StartAudioCapture​
​
public void StartAudioCapture()​
​
6. 创建房间 CreateRTCRoom​
​
IRTCVideoRoom CreateRTCRoom(string roomID)​
​
7. 加入房间 JoinRoom​
​
int JoinRoom(string token, UserInfo info, MultiRoomConfig roomConfig)​
​
​
参数名​
类型​
说明​
token​
String​
动态密钥。用于对进房用户进行鉴权验证。 进入房间需要携带 Token。测试时可使用控制台生成临时 Token,正式上线需要使用密钥 SDK 在你的服务端生成并下发 Token。 使用不同 AppID 的 App 是不能互通的。 请务必保证生成 Token 使用的 AppID 和创建引擎时使用的 AppID 相同,否则会导致加入房间失败。​
info​
UserInfo​
用户信息。参看 UserInfo。​
roomConfig​
MultiRoomConfig​
房间参数配置,设置房间模式以及是否自动发布或订阅流。具体配置模式参看 MultiRoomConfig。​
​
8. 处理房间状态改变回调 OnRoomStateChangedEventHandler​
​
void OnRoomStateChangedEventHandler(string roomID, string userID, int state, string ExtraInfo)​
​
​
参数名​
类型​
说明​
roomId​
String​
房间 ID。​
userID​
String​
用户 ID。​
state​
int​
房间状态码。​
• 0: 成功。​
• !0: 失败,具体原因参看 ErrorCode 及 WarningCode。​
ExtraInfo​
String​
额外信息,如 {"elapsed":1187,"join\_type":0}。 join_type 表示加入房间的类型,0 为首次进房,1 为重连进房。 elapsed 表示加入房间耗时,即本地用户从调用 JoinRoom 到加入房间成功所经历的时间间隔,单位为 ms。​
​
9. 处理用户加入房间回调 OnUserJoinedEventHandler​
​
void OnUserJoinedEventHandler(string roomID, UserInfo userInfo, int elapsed)​
​
​
参数名​
类型​
说明​
roomID​
String​
房间 ID。​
userInfo​
UserInfo​
用户信息。参看 UserInfo。​
elapsed​
int​
保留字段。​
​
10. 处理远端视频首帧解码的回调 OnFirstRemoteVideoFrameDecodedEventHandler​
​
void OnFirstRemoteVideoFrameDecodedEventHandler(RemoteStreamKey key, VideoFrameInfo info)​
​
​
参数名​
类型​
说明​
key​
RemoteStreamKey​
远端流信息,参看 RemoteStreamKey​
info​
VideoFrameInfo​
视频帧信息,参看 VideoFrameInfo​
​
11. 设置远端视图 SetRemoteVideoSink​
​
void SetRemoteVideoSink(RemoteStreamKey streamKey, VideoSinkPixelFormat requiredFormat)​
​
​
参数名​
类型​
说明​
streamKey​
RemoteStreamKey​
远端流信息,用于指定需要渲染的视频流来源及属性,参看 RemoteStreamKey。​
requiredFormat​
VideoSinkPixelFormat​
视频编码格式 VideoSinkPixelFormat​
​
12. 处理用户离开房间回调 OnUserLeaveEventHandler​
​
void OnUserLeaveEventHandler(string roomID, string userID, UserOfflineReason reason)​
​
​
参数名​
类型​
说明​
roomID​
String​
房间 ID。​
userID​
String​
用户 ID。​
reason​
UserOfflineReason​
用户离开房间的原因,参看 UserOfflineReason。​
​
13. 离开房间 LeaveRoom​
​
void LeaveRoom()​
​
14. 销毁引擎实例 DestroyRTCVideo​
​
void DestroyRTCVideo()​
​
后续步骤​
在实现音视频通话后,如遇无声音、无画面、视频卡顿等问题时,您可以使用诊断工具快速排查和定位异常房间及用户,并获取异常根因分析、处理建议、分析报告等。​
​
最近更新时间:2026.09.21 16:42:01
这个页面对您有帮助吗?
有用
有用
无用
无用