diff --git a/ClientDemo/App.config b/ClientDemo/App.config new file mode 100644 index 0000000..74ade9d --- /dev/null +++ b/ClientDemo/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/ClientDemo/App.xaml b/ClientDemo/App.xaml new file mode 100644 index 0000000..0bebfea --- /dev/null +++ b/ClientDemo/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/ClientDemo/App.xaml.cs b/ClientDemo/App.xaml.cs new file mode 100644 index 0000000..5fd2fa4 --- /dev/null +++ b/ClientDemo/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace ClientDemo +{ + /// + /// App.xaml 的交互逻辑 + /// + public partial class App : Application + { + } +} diff --git a/ClientDemo/ClientDemo.csproj b/ClientDemo/ClientDemo.csproj new file mode 100644 index 0000000..bc2116c --- /dev/null +++ b/ClientDemo/ClientDemo.csproj @@ -0,0 +1,208 @@ + + + + + Debug + AnyCPU + {5C83270B-1086-494D-BCAF-0E773CC598AB} + WinExe + ClientDemo + ClientDemo + v4.0 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + true + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + SDK\CSharp\Win64\lib\ManageLiteAV.dll + + + SDK\CSharp\Win64\lib\ManageLiteAV.dll + + + SDK\CSharp\Win32\lib\ManageLiteAV.dll + + + ..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll + + + + + + + + + + + 4.0 + + + + + + ..\packages\zlib.net.1.0.4.0\lib\zlib.net.dll + + + + + MSBuild:Compile + Designer + + + + + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 + false + + + + + set Platform=Win64 +SETLOCAL ENABLEDELAYEDEXPANSION +if $(PlatformName)==x86 ( +set Platform=Win32 +) +copy /Y "$(ProjectDir)TRTC_SDK\!Platform!\lib\*.dll" "$(ProjectDir)$(OutDir)" +ENDLOCAL + + \ No newline at end of file diff --git a/ClientDemo/MainWindow.xaml b/ClientDemo/MainWindow.xaml new file mode 100644 index 0000000..4de7c02 --- /dev/null +++ b/ClientDemo/MainWindow.xaml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/ClientDemo/MainWindow.xaml.cs b/ClientDemo/MainWindow.xaml.cs new file mode 100644 index 0000000..1db9887 --- /dev/null +++ b/ClientDemo/MainWindow.xaml.cs @@ -0,0 +1,130 @@ +using JianGongYun.TRTC.Components; +using JianGongYun.TRTC.Utils; +using ManageLiteAV; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace ClientDemo +{ + /// + /// MainWindow.xaml 的交互逻辑 + /// + public partial class MainWindow : Window + { + const uint SDKAppID = 1400463444; + const string SDKAppKEY = "6ee2586282eb8ab5bff3f917b44500c4ffd9bbd3d820258b1fa8cdd470cfd1ee"; + /// + /// TRTC实例 + /// + public static ITRTCCloud lTRTCCloud; + /// + /// 设备管理器 + /// + public static ITXDeviceManager lTXDeviceManager; + public static TRTCCloudCallback TRTCCloudCallback = new TRTCCloudCallback(); + public MainWindow() + { + InitializeComponent(); + lTRTCCloud = ITRTCCloud.getTRTCShareInstance();//创建TRTC实例 + Console.WriteLine(lTRTCCloud.getSDKVersion()); + lTRTCCloud.addCallback(TRTCCloudCallback);//注册回调 + + var roomPars = new TRTCParams + { + sdkAppId = SDKAppID, + userId = "666", + userSig = GenTestUserSig("666"), + roomId = 0,//使用strRoomId + strRoomId = "53245345", + role = TRTCRoleType.TRTCRoleAudience + }; + lTRTCCloud.enterRoom(ref roomPars, TRTCAppScene.TRTCAppSceneLIVE);//创建房间 + + StartVideo(); + } + + public void StartVideo() + { + lTRTCCloud.startRemoteView("53245345", TRTCVideoStreamType.TRTCVideoStreamTypeBig, IntPtr.Zero); + AddCustomVideoView(main, "53245345", TRTCVideoStreamType.TRTCVideoStreamTypeBig, false); + lTRTCCloud.startRemoteView("53245345", TRTCVideoStreamType.TRTCVideoStreamTypeSub, IntPtr.Zero); + AddCustomVideoView(sub, "53245345", TRTCVideoStreamType.TRTCVideoStreamTypeSub, false); + } + public void StopVideo() + { + lTRTCCloud.stopRemoteView("53245345", TRTCVideoStreamType.TRTCVideoStreamTypeBig); + RemoveCustomVideoView(main, "666", TRTCVideoStreamType.TRTCVideoStreamTypeBig, false); + lTRTCCloud.stopRemoteView("53245345", TRTCVideoStreamType.TRTCVideoStreamTypeSub); + RemoveCustomVideoView(sub, "666", TRTCVideoStreamType.TRTCVideoStreamTypeSub, false); + } + private static void RemoveCustomVideoView(Panel parent, string userId, TRTCVideoStreamType streamType, bool local = false) + { + TXLiteAVVideoView videoView = null; + string key = string.Format("{0}_{1}", userId, streamType); + if (VideoViews.TryGetValue(key, out videoView)) + { + videoView.RemoveEngine(lTRTCCloud); + parent.Dispatcher.Invoke(new Action(() => + { + parent.Children.Remove(videoView); + })); + VideoViews.Remove(key); + } + } + + + /// + /// 视频画面 + /// + public static Dictionary VideoViews = new Dictionary(); + /// + /// 添加自定义渲染 View 并绑定渲染回调 + /// + private static TXLiteAVVideoView AddCustomVideoView(Panel parent, string userId, TRTCVideoStreamType streamType, bool local = false) + { + TXLiteAVVideoView videoView = new TXLiteAVVideoView(); + videoView.RegEngine(userId, streamType, lTRTCCloud, local); + videoView.SetRenderMode(streamType == TRTCVideoStreamType.TRTCVideoStreamTypeBig ? TRTCVideoFillMode.TRTCVideoFillMode_Fill : TRTCVideoFillMode.TRTCVideoFillMode_Fit); + videoView.SetBinding(TXLiteAVVideoView.WidthProperty, new Binding("ActualWidth") { Source = parent }); + videoView.SetBinding(TXLiteAVVideoView.HeightProperty, new Binding("ActualHeight") { Source = parent }); + parent.Dispatcher.Invoke(new Action(() => + { + parent.Children.Add(videoView); + })); + string key = string.Format("{0}_{1}", userId, streamType); + VideoViews.Add(key, videoView); + return videoView; + } + + protected override void OnClosing(CancelEventArgs e) + { + StopVideo(); + lTRTCCloud.exitRoom(); + lTRTCCloud.removeCallback(TRTCCloudCallback);//注册回调 + ITRTCCloud.destroyTRTCShareInstance();//销毁TRTC实例 + lTRTCCloud.Dispose(); + lTRTCCloud = null; + base.OnClosing(e); + } + public static string GenTestUserSig(string userId) + { + if (SDKAppID == 0 || string.IsNullOrEmpty(SDKAppKEY)) return null; + TLSSigAPIv2 api = new TLSSigAPIv2((int)SDKAppID, SDKAppKEY); + // 统一转换为UTF8,SDK内部是用UTF8编码。 + return api.GenSig(Util.UTF16To8(userId)); + } + } +} diff --git a/ClientDemo/Properties/AssemblyInfo.cs b/ClientDemo/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0ae3390 --- /dev/null +++ b/ClientDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("ClientDemo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ClientDemo")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +//若要开始生成可本地化的应用程序,请设置 +//.csproj 文件中的 CultureYouAreCodingWith +//例如,如果您在源文件中使用的是美国英语, +//使用的是美国英语,请将 设置为 en-US。 然后取消 +//对以下 NeutralResourceLanguage 特性的注释。 更新 +//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //主题特定资源词典所处位置 + //(未在页面中找到资源时使用, + //或应用程序资源字典中找到时使用) + ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置 + //(未在页面中找到资源时使用, + //、应用程序或任何主题专用资源字典中找到时使用) +)] + + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ClientDemo/Properties/Resources.Designer.cs b/ClientDemo/Properties/Resources.Designer.cs new file mode 100644 index 0000000..ebfc246 --- /dev/null +++ b/ClientDemo/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace ClientDemo.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ClientDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/ClientDemo/Properties/Resources.resx b/ClientDemo/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/ClientDemo/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ClientDemo/Properties/Settings.Designer.cs b/ClientDemo/Properties/Settings.Designer.cs new file mode 100644 index 0000000..892eb26 --- /dev/null +++ b/ClientDemo/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace ClientDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/ClientDemo/Properties/Settings.settings b/ClientDemo/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/ClientDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ClientDemo/TLSSigAPIv2.cs b/ClientDemo/TLSSigAPIv2.cs new file mode 100644 index 0000000..cd70105 --- /dev/null +++ b/ClientDemo/TLSSigAPIv2.cs @@ -0,0 +1,123 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using zlib; + +namespace JianGongYun.TRTC.Utils +{ + public class TLSSigAPIv2 + { + private readonly int sdkappid; + private readonly string key; + + public TLSSigAPIv2(int sdkappid, string key) + { + this.sdkappid = sdkappid; + this.key = key; + } + + private static byte[] CompressBytes(byte[] sourceByte) + { + MemoryStream inputStream = new MemoryStream(sourceByte); + Stream outStream = CompressStream(inputStream); + byte[] outPutByteArray = new byte[outStream.Length]; + outStream.Position = 0; + outStream.Read(outPutByteArray, 0, outPutByteArray.Length); + return outPutByteArray; + } + + private static Stream CompressStream(Stream sourceStream) + { + MemoryStream streamOut = new MemoryStream(); + ZOutputStream streamZOut = new ZOutputStream(streamOut, zlibConst.Z_DEFAULT_COMPRESSION); + CopyStream(sourceStream, streamZOut); + streamZOut.finish(); + return streamOut; + } + + public static void CopyStream(System.IO.Stream input, System.IO.Stream output) + { + byte[] buffer = new byte[2000]; + int len; + while ((len = input.Read(buffer, 0, 2000)) > 0) + { + output.Write(buffer, 0, len); + } + output.Flush(); + } + + private string HMACSHA256(string identifier, long currTime, int expire, string base64UserBuf, bool userBufEnabled) + { + string rawContentToBeSigned = "TLS.identifier:" + identifier + "\n" + + "TLS.sdkappid:" + sdkappid + "\n" + + "TLS.time:" + currTime + "\n" + + "TLS.expire:" + expire + "\n"; + if (true == userBufEnabled) + { + rawContentToBeSigned += "TLS.userbuf:" + base64UserBuf + "\n"; + } + using (HMACSHA256 hmac = new HMACSHA256()) + { + UTF8Encoding encoding = new UTF8Encoding(); + Byte[] textBytes = encoding.GetBytes(rawContentToBeSigned); + Byte[] keyBytes = encoding.GetBytes(key); + Byte[] hashBytes; + using (HMACSHA256 hash = new HMACSHA256(keyBytes)) + hashBytes = hash.ComputeHash(textBytes); + return Convert.ToBase64String(hashBytes); + } + } + + private string GenSig(string identifier, int expire, byte[] userbuf, bool userBufEnabled) + { + DateTime epoch = new DateTime(1970, 1, 1); // unix 时间戳 + Int64 currTime = (Int64)(DateTime.UtcNow - epoch).TotalMilliseconds / 1000; + + string base64UserBuf; + string jsonData; + if (true == userBufEnabled) + { + base64UserBuf = Convert.ToBase64String(userbuf); + string base64sig = HMACSHA256(identifier, currTime, expire, base64UserBuf, userBufEnabled); + var jsonObj = new JObject(); + jsonObj["TLS.ver"] = "2.0"; + jsonObj["TLS.identifier"] = identifier; + jsonObj["TLS.sdkappid"] = sdkappid; + jsonObj["TLS.expire"] = expire; + jsonObj["TLS.time"] = currTime; + jsonObj["TLS.sig"] = base64sig; + jsonObj["TLS.userbuf"] = base64UserBuf; + jsonData = JsonConvert.SerializeObject(jsonObj); + } + else + { + string base64sig = HMACSHA256(identifier, currTime, expire, "", false); + var jsonObj = new JObject(); + jsonObj["TLS.ver"] = "2.0"; + jsonObj["TLS.identifier"] = identifier; + jsonObj["TLS.sdkappid"] = sdkappid; + jsonObj["TLS.expire"] = expire; + jsonObj["TLS.time"] = currTime; + jsonObj["TLS.sig"] = base64sig; + jsonData = JsonConvert.SerializeObject(jsonObj); + } + byte[] buffer = Encoding.UTF8.GetBytes(jsonData); + return Convert.ToBase64String(CompressBytes(buffer)) + .Replace('+', '*').Replace('/', '-').Replace('=', '_'); + } + + public string GenSig(string identifier, int expire = 180 * 86400) + { + return GenSig(identifier, expire, null, false); + } + + public string GenSigWithUserBuf(string identifier, int expire, byte[] userbuf) + { + return GenSig(identifier, expire, userbuf, true); + } + } +} diff --git a/ClientDemo/TRTCCloudCallback.cs b/ClientDemo/TRTCCloudCallback.cs new file mode 100644 index 0000000..d38d556 --- /dev/null +++ b/ClientDemo/TRTCCloudCallback.cs @@ -0,0 +1,261 @@ +using ManageLiteAV; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace JianGongYun.TRTC.Utils +{ + public class TRTCCloudCallback : ITRTCCloudCallback + { + public void onAudioDeviceCaptureVolumeChanged(uint volume, bool muted) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onAudioDevicePlayoutVolumeChanged(uint volume, bool muted) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onAudioEffectFinished(int effectId, int code) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onCameraDidReady() + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onConnectionLost() + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onConnectionRecovery() + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onConnectOtherRoom(string userId, TXLiteAVError errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onDeviceChange(string deviceId, TRTCDeviceType type, TRTCDeviceState state) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onDisconnectOtherRoom(TXLiteAVError errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onEnterRoom(int result) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onError(TXLiteAVError errCode, string errMsg, IntPtr arg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onExitRoom(int reason) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onFirstAudioFrame(string userId) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onFirstVideoFrame(string userId, TRTCVideoStreamType streamType, int width, int height) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onMicDidReady() + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onMissCustomCmdMsg(string userId, int cmdId, int errCode, int missed) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onNetworkQuality(TRTCQualityInfo localQuality, TRTCQualityInfo[] remoteQuality, uint remoteQualityCount) + { + //StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onPlayBGMBegin(TXLiteAVError errCode) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onPlayBGMComplete(TXLiteAVError errCode) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onPlayBGMProgress(uint progressMS, uint durationMS) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onRecvCustomCmdMsg(string userId, int cmdID, uint seq, byte[] msg, uint msgSize) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onRecvSEIMsg(string userId, byte[] message, uint msgSize) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onRemoteUserEnterRoom(string userId) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onRemoteUserLeaveRoom(string userId, int reason) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onScreenCaptureCovered() + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onScreenCapturePaused(int reason) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onScreenCaptureResumed(int reason) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onScreenCaptureStarted() + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onScreenCaptureStoped(int reason) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onSendFirstLocalAudioFrame() + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onSendFirstLocalVideoFrame(TRTCVideoStreamType streamType) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onSetMixTranscodingConfig(int errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onSpeedTest(TRTCSpeedTestResult currentResult, uint finishedCount, uint totalCount) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onStartPublishCDNStream(int errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onStartPublishing(int errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onStatistics(TRTCStatistics statis) + { + //StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onStopPublishCDNStream(int errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onStopPublishing(int errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onSwitchRole(TXLiteAVError errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onSwitchRoom(TXLiteAVError errCode, string errMsg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onTestMicVolume(uint volume) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onTestSpeakerVolume(uint volume) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onTryToReconnect() + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onUserAudioAvailable(string userId, bool available) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onUserEnter(string userId) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onUserExit(string userId, int reason) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onUserSubStreamAvailable(string userId, bool available) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onUserVideoAvailable(string userId, bool available) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onUserVoiceVolume(TRTCVolumeInfo[] userVolumes, uint userVolumesCount, uint totalVolume) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + + public void onWarning(TXLiteAVWarning warningCode, string warningMsg, IntPtr arg) + { + StackTrace trace = new StackTrace(true);StackFrame frame = trace.GetFrame(1);var method = frame.GetMethod();Console.WriteLine(method.Name); + } + } +} diff --git a/ClientDemo/TRTC_SDK/Win32/lib/LiteAvAudioHook.dll b/ClientDemo/TRTC_SDK/Win32/lib/LiteAvAudioHook.dll new file mode 100644 index 0000000..1e4d4c9 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/LiteAvAudioHook.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/LiteAvAudioHookService.dll b/ClientDemo/TRTC_SDK/Win32/lib/LiteAvAudioHookService.dll new file mode 100644 index 0000000..8e0a1e7 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/LiteAvAudioHookService.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/ManageLiteAV.dll b/ClientDemo/TRTC_SDK/Win32/lib/ManageLiteAV.dll new file mode 100644 index 0000000..4c6a660 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/ManageLiteAV.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/ManageLiteAV.xml b/ClientDemo/TRTC_SDK/Win32/lib/ManageLiteAV.xml new file mode 100644 index 0000000..4f90390 --- /dev/null +++ b/ClientDemo/TRTC_SDK/Win32/lib/ManageLiteAV.xml @@ -0,0 +1,9182 @@ + + + + "ManageLiteAV" + + + + \brief 自定义音频采集接口,startPreview的srcType = TXE_VIDEO_SRC_USER_DATA时通过此接口传入PCM音频格式数据 + + \param frame.data - PCM缓冲 + \param frame.length - PCM缓冲长度 + \param frame.sampleRate - 音频采样率,建议48K, + \param frame.channel - 音频声道数,目前只支持 1或2声道。 + \param frame.audioFormat - 音频数据格式,目前只支持LiteAVAudioFrameFormatPCM格式。 + \param frame.timestamp - 音频帧采集的时间戳。 + \note 量化位数,目前值支持16byte格式。 + + + + \brief 自定义视频采集接口,startPreview的srcType = TXE_VIDEO_SRC_USER_DATA时通过此接口传入I420格式的视频数据 + + \param frame.data - 视频缓冲,目前值支持紧凑内存的I420数据 + \param frame.lenth - 视频缓冲长度 + \param frame.width - 视频图像长 + \param frame.width - 视频图像宽 + \param frame.videoFormat - 视频格式,目前只支持LiteAVVideoPixelFormat_I420格式。 + \param frame.timestamp - 视频帧采集的时间戳。 + + + + \brief 显示仪表盘(状态统计和事件消息浮层view),方便调试 + + \param showType 0: 不显示 1: 显示精简版 2: 显示全量版 + + + +\brief:设置是否就近选路 +\param:enable - true表示启用,false表示禁用,SDK 默认为true +\return:无 + + + +\brief:设置视频暂停 + + + +\brief:设置视频帧率 +\param:fps - 视频帧率,默认值为15,重启后生效 +\return:无 + + + +\brief:配合 setAutoAdjustStrategy 使用,当 AutoAdjust 策略指定为 TXE_AUTO_ADJUST_NONE 时,如下的两个函数调用均视为无效 +\param:videoBitrateMin - 允许 SDK 输出的最小视频码率,比如 640x360 分辨率下这个值适合设置为 300kbps +\param:videoBitrateMax - 允许 SDK 输出的最大视频码率, 比如 640x360 分辨率下这个值适合设置为 1000kbps +\return:无 + + + +\brief:设置流控策略,即是否允许 SDK 根据当前网络情况调整视频码率,以避免网络上传速度不足导致的画面卡顿 +\param:strategy - 参考 TXLiveTypeDef.h 中定义的 TXEAutoAdjustStrategy 枚举值 +\return:无 + + + +\brief:设置视频码率,注意,不是分辨率越高画面越清晰,是码率越高画面越清晰 +\param:bitrate - 视频码率,单位 kbps, 比如 640x360 分辨率需要配合 800kbps 的视频码率 +\return:无 + + + +\brief:设置推流画面的镜像效果 +\param:mirror - true表示画面左右反转,false表示保持原样 +\return:无 + + + +\brief:设置预览渲染的镜像效果 +\param:mirror - true表示画面左右反转,false表示保持原样 +\return:无 + + + +\brief:设置美颜和美白效果 +\param:beautyStyle - 参考 TXLiveTypeDef.h 中定义的 TXEBeautyStyle 枚举值 +\param:beautyLevel - 美颜级别取值范围 1 ~ 9; 0 表示关闭,1 ~ 9值越大,效果越明显 +\param:whitenessLevel - 美白级别取值范围 1 ~ 9; 0 表示关闭,1 ~ 9值越大,效果越明显 +\return:无 + + + + * \brief:设置视频分辨率 + * \param:resolution - 视频分辨率,参考 TXLiveTypeDef.h 中定义的 TXEVideoResolution 枚举值 + * \return:无 + + + +\brief:推流的画面质量预设选项 +\param:paramType - 预设类型,参考 TXLiveTypeDef.h 中定义的 TXEVideoQualityParamPreset 枚举值 +\param:ratio - 预设画面比例,参考 TXLiveTypeDef.h 中定义的 TXEVideoResolution 枚举值 +\return:无 +\startPush前生效。 + + + +\brief:设置图像的顺时针旋转角度 +\param:rotation - 参考 TXLiveTypeDef.h 中定义的 TXEVideoRotationType 枚举值 +\return:无 + + + +\brief:设置图像的渲染(填充)模式 +\param:mode - 参考 TXLiveTypeDef.h 中定义的 TXERenderMode 枚举值 +\return:无 + + + +\brief:静音接口 +\param:mute - 是否静音 +\return:无 + + + +\brief:切换摄像头,支持在推流中动态切换 +\param:cameraIndex : 摄像头需要,取值返回: 0 ~ (摄像头个数 - 1) +\return:无 + + + + * \brief:停止推流,注意推流 url 有排他性,也就是一个推流 Url 同时只能有一个推流端向上推流 + * \param:无 + * \return:无 + * \attention: 若通过 startPreview 接口开启了预览,在调用这个接口前,请先调用 stopPreview 接口 + + + +\brief:启动推流 (在 startPush 之前需要先 startPreview 启动摄像头预览,否则推送出去的数据流里只有音频) +\param:url - 一个合法的推流地址,腾讯云的推流 URL 都要求带有 txSecret 和 txTime 防盗链签名,如果您发现推流推不上去,请检查这两个签名是否合法。 +\return:成功 or 失败,内存分配、资源申请失败等原因可能会导致返回失败 + + + +\brief:推流的图像截图到本地 +\param:filePath - 存储路径 +\param: length - 路径字符长度 +\return:0成功,非0失败:-1:失败,-2路径非法,-3文件存在,-4未推流 + + + + \brief 【屏幕共享】选择要分享的目标窗口或目标区域,支持如下四种情况: + + >>> 共享整个屏幕 : sourceInfoList 中type为Screen的source,captureRect 设为 { 0, 0, 0, 0 } + >>> 共享指定区域 : sourceInfoList 中type为Screen的source,captureRect 设为非 NULL,比如 { 100, 100, 300, 300 } + >>> 共享整个窗口 : sourceInfoList 中type为Window的source,captureRect 设为 { 0, 0, 0, 0 } + >>> 共享窗口区域 : sourceInfoList 中type为Window的source,captureRect 设为非 NULL,比如 { 100, 100, 300, 300 } + + \note: 您可以在屏幕分享的过程中掉用该函数来切换目标窗口或者调整目标区域 + + \param source - 指定分享源 + \param captureRect - 指定捕获的区域 + \param captureMouse - 指定是否捕获鼠标指针 + \param highlightWindow - 指定是否高亮正在共享的窗口以及当捕获图像被遮挡时高亮遮挡窗口提示用户移走遮挡 + + + + + \brief 【屏幕共享】枚举可共享的窗口列表, + + \param thumbSize - 指定要获取的窗口缩略图大小,缩略图可用于绘制在窗口选择界面上 + \param iconSize - 指定要获取的窗口图标大小 + + \return 列表通过返回值 ILiteAVScreenCaptureSourceList 返回 + \note 如果delete ILiteAVScreenCaptureSourceList*指针会编译错误,SDK维护ILiteAVScreenCaptureSourceList对象的生命周期。 + + + +\brief:关闭视频源预览 +\return 无 + + + +\brief:重设摄像头预览窗口 +\param:rendHwnd - 承载预览画面的 HWND,目前 SDK 内部会向 rendHwnd (整个窗口)上绘制图像的 +\return 无 + + + +\brief:启动视频源预览 +\param:srcType - 参考 TXLiveTypeDef.h 中定义的 TXEVideoCaptureSrcType 枚举值 +\param:rendHwnd - 承载预览画面的 HWND,目前 SDK 内部会向 rendHwnd (整个窗口)上绘制图像的 +\param:dataFormat - srcType = TXE_VIDEO_SRC_USER_DATA时生效,指定传入的参数 +\return: 成功 or 失败 + + + +\brief:关闭音频采集 + + + +\brief:启动音频采集 +\param:srcType - 音频数据源类型 + + + +\brief:设置音频前处理开关 +\param:channels - 参考 TXLiveTypeDef.h 中定义的 TXEAudioChannels 枚举值,SDK 内部默认选择 TXE_AUDIO_CHANNELS_1 单声道 + + + +\brief:设置音频前处理开关 +\param:preprocessType - 参考 TXLiveTypeDef.h 中定义的 TXEAudioPreprocessType。 +\note : 默认开启AEC、AGC、NS,如需关闭回声消除预处理enableAudioPreprocess(TXE_AUDIO_PREPROCESS_AEC, false)。 + + + +@brief 设置系统声音采集的音量。 +@param [in] value 设置目标音量,取值范围[0,100]. + + + +@brief 关闭系统声音采集。 + + + +@brief 打开系统声音采集。 +@details 采集系统声音。 +@param [in] szPlayerPath 播放器地址;如果用户此参数填空或不填,表示采集系统中的所有声音; + 如果填入exe程序(如:酷狗、QQ音乐)所在路径,将会启动此程序,并只采集此程序的声音; + + + +\brief:关闭麦克风测试 + + + +\brief:开启麦克风测试 + + + +\brief: 获取 SDK 采集音量 + + + + \brief:设置 SDK 采集音量。 + + \return volume 音量大小,取值[0, 65535],默认值为65535 + + + +\brief:查询已选择麦克风的能量值,指示音量的大小 +\return:能量值,范围是[0, 65535] + + + +\brief:设置已选择麦克风的音量 +\param:volume - 设置的音量大小,范围是[0, 65535] + + + +\brief:查询已选择麦克风的音量 +\return:音量值,范围是[0, 65535] + + + +\brief:选择指定的麦克风作为录音设备,不调用该接口时,默认选择索引为0的麦克风 +\param:index - 麦克风设备的索引,要求index值小于 micDeviceCount 接口的返回值 + + + +\brief:设置回调 TXLivePusher 的回调代理,监听推流事件 +\param:callback - ITXLivePusherCallback 类型的代理指针 +\param:pUserData - 一般情况下传 NULL 就可以了,透传用户数据到 ITXLivePusherCallback 的回调函数 +\return 无 + + + +\brief 析构ITXLivePusher对象 + + + + \brief 用于动态加载dll时,导出ITXLivePusher C++对象。 + + \return TXLivePusher对象指针,注意:delete ITXLivePusher*会编译错误,需要调用destroyTXLivePusher释放。 + + + + +显示仪表盘(状态统计和事件消息浮层view),方便调试 +0: 不显示 1: 显示精简版 2: 显示全量版 + + + +设置是否就近选路 +true表示启用,false表示禁用,SDK 默认为true + + + +设置视频暂停 + + + + +设置视频帧率 + + 视频帧率,默认值为15,重启后生效 + + + +配合 setAutoAdjustStrategy 使用,当 AutoAdjust 策略指定为 TXE_AUTO_ADJUST_NONE 时,该函数调用均视为无效 + + 允许 SDK 输出的最小视频码率, 比如 640x360 分辨率下这个值适合设置为 1000kbps + + + +配合 setAutoAdjustStrategy 使用,当 AutoAdjust 策略指定为 TXE_AUTO_ADJUST_NONE 时,该函数调用均视为无效 + + 允许 SDK 输出的最小视频码率,比如 640x360 分辨率下这个值适合设置为 300kbps + + + +设置流控策略,即是否允许 SDK 根据当前网络情况调整视频码率,以避免网络上传速度不足导致的画面卡顿 + + 参考 TXLiveTypeDef.h 中定义的 TXEAutoAdjustStrategy 枚举值 + + + +设置视频码率,注意,不是分辨率越高画面越清晰,是码率越高画面越清晰 + + 视频码率,单位 kbps, 比如 640x360 分辨率需要配合 800kbps 的视频码率 + + + +设置推流画面的镜像效果 + + true表示画面左右反转,false表示保持原样 + + + +设置预览渲染的镜像效果 + + true表示画面左右反转,false表示保持原样 + + + +设置美颜和美白效果 + + 参考 TXLiveTypeDef.h 中定义的 TXEBeautyStyle 枚举值 + 美颜级别取值范围 1 ~ 9; 0 表示关闭,1 ~ 9值越大,效果越明显 + 美白级别取值范围 1 ~ 9; 0 表示关闭,1 ~ 9值越大,效果越明显 + + + +设置视频分辨率 + + 视频分辨率,参考 TXLiveTypeDef.h 中定义的 TXEVideoResolution 枚举值 + + + +推流的画面质量预设选项 + + 预设类型,参考 TXLiveTypeDef.h 中定义的 TXEVideoQualityParamPreset 枚举值 + + + +设置图像的顺时针旋转角度 + + 参考 TXLiveTypeDef.h 中定义的 TXEVideoRotation 枚举值 + + + +设置图像的渲染(填充)模式 + + 参考 TXLiveTypeDef.h 中定义的 TXERenderMode 枚举值 + + + +静音接口 + + 是否静音 + + + +切换摄像头,支持在推流中动态切换 + + 摄像头需要,取值返回: 0 ~ (摄像头个数 - 1) + +指定要开启哪个摄像头的预览,如果只有一个摄像头,则设置为 0 ,否则,需要先用 enumCameras 获取 cameraIndex +cameraIndex == 0 表示打开当前可用的第一个摄像头 +cameraIndex == 1 表示打开当前可用的第二个摄像头 +... ... +cameraIndex == -1 表示打开当前可用的全部摄像头,但是预览的是第一个,通过 switchCamera 来切换摄像头 +Windows 下开启一个 USB 摄像头需要很长的电路和驱动启动时间(一般需要 1 - 3 秒),所以,如果您要实现较好的切换效果 +推荐的做法是:switchCamera 时指定 cameraIndex 为 - 1 来打开全部摄像头 ,后续用 switchCamera 实现瞬间切换摄像头 + + + + +停止推流,注意推流 url 有排他性,也就是一个推流 Url 同时只能有一个推流端向上推流 +若通过 startPreview 接口开启了预览,在调用这个接口前,请先调用 stopPreview 接口 + + + + +启动推流 (在 startPush 之前需要先 startPreview 启动摄像头预览,否则推送出去的数据流里只有音频) + + 合法的推流地址,腾讯云的推流 URL 都要求带有 txSecret 和 txTime 防盗链签名,如果您发现推流推不上去,请检查这两个签名是否合法 + 成功 or 失败,内存分配、资源申请失败等原因可能会导致返回失败 + + + +推流的图像截图到本地 + + 存储路径 + 0成功,非0失败:-1:失败,-2路径非法,-3文件存在,-4未推流 + + + +屏幕区域捕抓参数设置接口,startPreview(srcType = TXE_VIDEO_SRC_SDK_SCREEN..)前调用,默认捕抓整个主屏幕 + + +指定捕抓窗口,如果captureHwnd不为NULL时,捕抓整个captureHwnd窗口大小,此时captureRect设置会失效, +如果captureHwnd为NULL时,则captureRect有效,捕抓主屏幕指定的区域:captureRect + + 被捕抓窗口区域的坐标x,以左上角为准 + 被捕抓窗口区域的坐标y,以左上角为准 + 被捕抓窗口区域的宽度 + 被捕抓窗口区域的高度 + + + +枚举当前的可以捕抓的窗口,如果桌面同时存在多个窗口,那么此函数获取可采集的窗口句柄 + + 当前可捕抓的窗口列表,每一个都分别表示窗口句柄和窗口名称的键值对 + + + +关闭摄像头预览,stopPush 之前调用此函数并不会停止推流,会导致 SDK 只推送音频数据 + + + + +重设摄像头预览区域,当您指定的 HWND 的窗口尺寸发生变化时,可以通过这个函数重新调整视频渲染区域 + + 承载预览画面的 HWND + + + +启动视频源预览 + + 参考 TXLiveTypeDef.h 中定义的 TXEVideoCaptureSrcType 枚举值 + 承载预览画面的 HWND,rendHwnd = null时无需预览视频 + srcType指定为TXE_VIDEO_SRC_USER_DATA时生效,指定传入视频数据的格式 + 成功 or 失败,摄像头被占用可能会导致 camera 打开失败 + + + +关闭音频采集 + + + + +启动音频采集,SDK内部采用48K采样率,单声道,16位宽,实现很低延迟的实时音频通话的效果 + + 音频数据源类型 + + + +设置音频声道数 + + 参考 TXLiveTypeDef.h 中定义的 TXEAudioChannels 枚举值,SDK 内部默认选择 TXE_AUDIO_CHANNELS_1 单声道 + + + +设置系统声音前处理模式 +默认开启AEC、AGC、NS,如需要关闭回声消除enableAudioPreprocess(TXE_AUDIO_PRETREATMENT_AEC, false); + + 参考 TXLiveTypeDef.h 中定义的 TXEAudioPreprocessType + + + +设置系统声音采集的音量(暂时不支持64位) + + 设置目标音量,取值范围[0,100] + + + +关闭系统声音采集(暂时不支持64位) + + + + +打开系统声音采集(暂时不支持64位) + + 播放器地址;如果用户此参数填空或不填,表示采集系统中的所有声音; +如果填入exe程序(如:酷狗、QQ音乐)所在路径, 将会启动此程序,并只采集此程序的声音; + + + +关闭麦克风测试 + + + + +打开麦克风测试 + + + + +查询已选择麦克风的能量值,指示音量的大小 + + 能量值,范围是[0, 65535] + + + +设置已选择麦克风的音量 + + 设置的音量大小,范围是[0, 65535] + + + +查询已选择麦克风的音量 + + 音量值,范围是[0, 65535] + + + +选择指定的麦克风作为录音设备,不调用该接口时,默认选择索引为0的麦克风 + + 麦克风设备的索引,要求index值小于 micDevices 接口的返回值的数组大小 + + + +枚举当前可用的麦克风,如果一台Windows同时安装了多个麦克风,那么此函数获取可用的麦克风数量和名称 + + 当前可用的麦克风列表,查询得到的字符编码格式是UTF-8 + + + +枚举当前可用的摄像头,如果一台Windows同时安装了多个摄像头,那么此函数获取可用的摄像头数量和名称 + + 当前可用的摄像头列表 + + + +设置回调 TXLivePusher 的回调代理,监听推流事件、以及获取音视频数据 + + ITXLivePusherListener 类型的接口类 + 一般情况下传 NULL 就可以了,透传用户数据到 ITXLivePusherCallback 的回调函数 + + + +析构函数,C#代码中要求显示调用Dispose函数,来触发托管C++类析构函数 + + + + +关闭minidump生成功能 + + + + +开启minidump生成功能,发生崩溃时,自动生成minidump转储文件,用于分析崩溃原因 + + + +\brief:获取 SDK 要播放的音频数据,如果您需要自己播放声音,只需要返回 true 即可接管声音的播放,建议不要在回调函数做耗时操作 +\param:pcm - 音频裸数据buffer +\param:length - buffer 的长度,单位是字节 +\param:sampleRate- 音频采样率,可预期的值有: 8000、16000、32000、44100、48000 +\param:channel - 声道数:单声道 或者 双声道, SDK 默认是走单声道的 +\param:timestamp - 当前这帧音频buffer的时间戳 +\param:pUserData - 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 NULL + + + +\brief:获取 SDK 要播放的视频数据,如果您需要自己渲染视频画面,只需要返回 true 即可接管画面的渲染,建议不要在回调函数做耗时操作 +\param:data - 视频数据 buffer +\param:length - buffer 的长度,单位是字节,对于i420而言, length = width * height * 3 / 2 +\param:width - 画面的宽度,单位 pixel +\param:height - 画面的高度,单位 pixel +\param:format - 视频格式,参考 TXLiveTypeDef.h 中定义的 TXEOutputVideoFormat 枚举值 +\param:pUserData - 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 NULL + + + +\brief:获取 SDK 所采集的音频数据 +\param:pcm - SDK采集的音频裸数据buffer +\param:length - buffer 的长度,单位是字节 +\param:sampleRate- 音频采样率,可预期的值有: 8000、16000、32000、44100、48000 +\param:channel - 声道数:单声道 或者 双声道, SDK 默认是走单声道的 +\param:timestamp - 当前这帧音频buffer的时间戳 +\param:pUserData - 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 NULL +\return:无 + + + +\brief:获取 SDK 所采集的视频数据 +\param:yuv420 - i420 格式的 YUV 视频数据 buffer +\param:length - buffer 的长度,单位是字节,对于i420而言, length = width * height * 3 / 2 +\param:width - 画面的宽度,单位 pixel +\param:height - 画面的高度,单位 pixel +\param:pUserData - 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 NULL +\return:无 + + + + * \brief:设置播放选项 + * + * 缓冲区时长是较为常用的设置项,播放缓冲区的作用是为了抵抗网络波动导致的音视频卡顿。 + * 缓冲区时长越大,视频播放的卡顿率越低,观众跟主播之间的时延也就越高。 + * 缓冲区时长越小,视频播放的卡顿率越高,观众跟主播之间的时延也就越低。 + * + * \note 缓冲区时长不等于观众跟主播之间的时延,一般而言,时延要比缓冲区时长大1-2秒,这取决于 CDN 的质量。 + * 如果主播采用的是 OBS 等直播软件,那么时延还会更高一些,因为 OBS 本身会有1秒以上的推流时延。 + * + * \param:jsonParam - 属性信息,UTF-8编码。 + * + *
+    *    1. AutoAdjustCacheTime | bool  | 设置是否自动调整缓存时间, 默认值:true。
+    *        - true:启用自动调整,SDK 将根据网络状况在一个范围内调整缓冲区时长,网络越好,缓冲越短,时延越小,调整范围为:[MinAutoAdjustCacheTime - MaxAutoAdjustCacheTime]。
+    *        - false:关闭自动调整,SDK 将固定使用默认的播放缓冲区时长,也就是 “CacheTime” 所设置的值。
+    *    
+    *    2. CacheTime | float | 默认的播放缓存时长,单位秒,取值需要大于0.2,默认值:5。
+    *    
+    *    3. MaxAutoAdjustCacheTime | float | 播放器最大缓冲时间,单位秒,取值需要大于0.2,默认值:5,含义:播放器的最大播放延迟大约为 5+1=6 秒(CDN会引入约1秒延迟)。
+    *
+    *    4. MinAutoAdjustCacheTime | float | 播放器最小缓冲时间,单位秒,取值需要大于0.2,默认值:1,含义:播放器的最小播放延迟大约为 1+1=2 秒(CDN会引入约1秒延迟)。
+    *
+    *    5. VideoBlockThreshold | int | 播放器视频卡顿报警阈值,单位毫秒,默认值为800毫秒,含义:视频卡顿超过 800 毫秒,ITXLivePlayerCallback 会通知 PLAY_WARNING_VIDEO_PLAY_LAG。
+    *
+    *    6. ConnectRetryCount | int | 拉流网络断开重连次数,默认值为3。
+    *
+    *    7. ConnectRetryInterval | int | 拉流网络断开重连时间间隔,单位秒,默认值为3。
+    *
+	* 示例:
+	*    setLivePlayAttribute("{\"AutoAdjustCacheTime\":true, \"MinAutoAdjustCacheTime\": 2.0, \"MaxAutoAdjustCacheTime\": 5.0}");
+	* 含义:
+	*    设置播放缓冲区根据网络自动调整,调整范围为2-5秒,观众与主播之间的延迟约为3-6秒(如果主播使用 OBS 推流则为4-7秒),网络越差,延迟越大。
+    * 
+ +\brief:截图当前拉流的图像到本地, +\param:filePath - 存储路径,UTF-8编码。 +\param: length - 路径大小 +\return:0成功,非0失败 +\errorRet: -1:失败,-2路径非法,-3文件存在,-4未拉流 + + + +\brief:是否开启消息通道, 默认值为 false +\param:enableMessage - true:开启,false:关闭 + + + + +\brief:设置视频编码格式,默认格式是TXE_OUTPUT_VIDEO_WITHOUT_OUTPUT +\param:format - 视频编码格式,参考 TXLiveTypeDef.h 中定义的 TXEOutputVideoFormat 枚举值 +\return:无 + + + +\brief:设置渲染的镜像效果 +\param:mirror - true表示画面左右反转,false表示保持原样 +\return:无 + + + +\brief:设置图像的顺时针旋转角度 +\param:rotation - 参考 TXLiveTypeDef.h 中定义的 TXEVideoRotationType 枚举值 +\return:无 + + + +\brief:设置图像的渲染(填充)模式 +\param:mode - 参考 TXLiveTypeDef.h 中定义的 TXERenderMode 枚举值 +\return:无 + + + +\brief:静音接口 +\param:mute - 是否静音 +\return:无 + + + +\brief:是否正在播放 + + + +\brief:恢复播放 + + + +\brief:暂停播放 + + + +\brief:停止播放 + + + + * \brief:开始播放,请在 startPlay 之前 setRenderFrame + * \param:url - 视频播放 URL + * \param:type - 播放类型,参考 TXLiveTypeDef.h 中定义的 TXEPlayType 枚举值 + * \return:无 + + + +\brief:关闭图像渲染 + + + +\brief:重设图像渲染窗口 +\param:rendHwnd - 承载预览画面的 HWND,目前 SDK 内部会向 rendHwnd (整个窗口)上绘制图像的 +\return:无 + + + +\brief:设置视频图像渲染 +\param:rendHwnd - 承载预览画面的 HWND,目前 SDK 内部会向 rendHwnd (整个窗口)上绘制图像的 +\return:无 + + + +\brief: 获取 SDK 采集音量 + + + +\brief: 设置 SDK 采集音量。 +@param volume 音量大小,取值[0, 65535],默认值为65535 + + + +\brief:查询已选择扬声器的能量值,指示音量的大小 +\return:能量值,范围是[0, 65535] + + + +\brief:设置SDK播放的音量,注意设置的不是系统扬声器的音量大小 +\param:volume - 设置的音量大小,范围是[0, 65535] + + + +\brief:查询SDK播放的音量,注意查询得到不是系统扬声器的音量大小 +\return:音量值,范围是[0, 65535] + + + +\brief:选择指定的扬声器作为音频播放的设备,不调用该接口时,默认选择索引为0的扬声器 +\param:index - 扬声器设备的索引,要求index值小于 speakerDeviceCount 接口的返回值 + + + +\brief:设置回调 TXLivePlayer 的回调代理,监听播放事件 +\param:callback - ITXLivePlayerCallback 类型的代理指针 +\param:pUserData - 透传用户数据到 ITXLivePusherCallback 的回调函数,一般情况下传 NULL 就可以了 +\return 无 + + + +\brief 析构ITXLivePlayer对象 + + + + \brief 用于动态加载dll时,导出TXLivePlayer C++对象。 + + \return TXLivePlayer对象指针,注意:delete ITXLivePlayer*会编译错误,需要调用destroyTXLivePlayer释放。 + + + +\brief:设置播放类型 + + + +\brief:设置美颜风格 + + + +\brief:设置输出的视频格式 + + + + \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 推流的画面质量预设选项 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + + - 1.2.0 版本开始引入推流画质接口 setVideoQualityParamPreset 用于傻瓜化的选择推流画质效果。 + - TXLivePush::setVideoQualityParamPreset 内部通过预先配置不同的视频参数调整到对应的质量 + - 目前支持的几种画质选项如下: + + (1)标清 - 采用 640 * 360 级别分辨率,码率会在 400kbps - 800kbps 之间自适应,如果主播的网络条件不理想, + 直播的画质会偏模糊,但总体卡顿率不会太高。 + Android平台下这一档我们会选择采用软编码,软编码虽然更加耗电,但在运动画面的表现要优于硬编码。 + + (2)高清 - 采用 960 * 540 级别分辨率,码率会锁定在 1200kbps,如果主播的网络条件不理想,直播画质不会有变化, + 但这段时间内会出现频繁的卡顿和跳帧。 两个平台下,这一档我们都会采用硬编码。 + + (3)超清 - 采用 1280 * 720 级别分辨率,码率会锁定在 1500kbps,对主播的上行带宽要求比较高,适合观看端是大屏的业务场景。 + + (4)大主播 - 顾名思义,连麦中大主播使用,因为是观众的主画面,追求清晰一些的效果,所以分辨率会优先选择 960 * 540。 + + (5)小主播 - 顾名思义,连麦中小主播使用,因为是小画面,画面追求流畅,分辨率采用 480 * 320, 码率 350kbps 固定。 + + (6)实时音视频通话 - 时延低,小画面,画面追求流畅,分辨率采用 480 * 320, 码率 350kbps 固定。 + + (7)静态画质场景 - 画面变动小,能保证非常低的码率下,视频相对清晰,如截屏正在播放的ppt,1080p,400kb左右码率。 + 【特别说明】 + 1. 使用 setVideoQualityParamPreset 之后,依然可以使用setVideoBitRate、setVideoFPS、setAutoAdjustStrategy等设置自定义画质,以最后一次的设置为准。 + +\brief:SDK推流画质预设选项 + + + +\brief:目前SDK支持的流控策略 + + + +\brief:目前SDK支持的画面顺时针旋转角度 + + + +\brief:目前SDK支持的画面渲染模式,两种模式均会严格保持画面的原始宽高比 + + + +\brief:推流视频分辨率 + + + +\brief:推流视频比例 + + + +\brief:视频数据源类型 + + + +\brief:音频前处理 TXEAudioPreprocessType + + + +\brief:音频数据源类型 + + + +\brief:音频声道数 + + + +\brief SDK在不再需要用到该数据源的时候会调用该方法以通知数据源停止工作 + + + +\brief SDK在成功请求到视频位后会调用该方法以通知数据源开始工作 + + + +以下定义仅用于兼容原有接口,具体定义参见 TRTCTypeDef.h 文件 + + + +@name SDK 导出基础功能接口 +@{ + \brief 获取 SDK 版本号 + + \return 返回 UTF-8 编码的版本号。 + + + + +设置视频编码格式,默认格式是TXE_OUTPUT_VIDEO_WITHOUT_OUTPUT + + 视频编码格式,参考 TXLiveTypeDef.h 中定义的 TXEOutputVideoFormat 枚举值 + + + +设置渲染的镜像效果 + + true表示画面左右反转,false表示保持原样 + + + +设置图像的顺时针旋转角度 + + 参考 TXLiveTypeDef.h 中定义的 TXEVideoRotation 枚举值 + + + +设置图像的渲染(填充)模式 + + 参考 TXLiveTypeDef.h 中定义的 TXERenderMode 枚举值 + + + +静音接口 + + 是否静音 + + + +是否正在播放 + + + + +恢复播放 + + + + +暂停播放 + + + + +停止播放 + + + + +开始播放,请在 startPlay 之前 setRenderFrame + + 视频播放 URL + 播放类型,参考 TXLiveTypeDef.h 中定义的 TXEPlayType 枚举值 + + + +关闭图像渲染 + + + + +重设图像渲染区域,当您指定的 HWND 的窗口尺寸发生变化时,可以通过这个函数重新调整视频渲染区域 + + 承载视频画面的 HWND + + + +挂接视频图像渲染 + + 承载视频画面的 HWND + + + +查询已选择扬声器的能量值,指示音量的大小 + + 设置的音量大小,范围是[0, 65535] + 能量值,范围是[0, 65535] + + + +设置SDK播放的音量,注意设置的不是系统扬声器的音量大小 + + 设置的音量大小,范围是[0, 65535] + + + +查询SDK播放的音量,注意查询得到不是系统扬声器的音量大小 + + 音量值,范围是[0, 65535] + + + +选择指定的扬声器作为音频播放的设备,不调用该接口时,默认选择索引为0的扬声器 + + 扬声器设备的索引,要求index值小于 speakerDeviceCount 接口的返回值 + + + +枚举当前可用的扬声器,如果一台Windows同时安装了多个扬声器,那么此函数获取可用的扬声器数量和名称 + + 当前可用的扬声器列表,查询得到的字符编码格式是UTF-8 + + + +设置回调 TXLivePlayer 的回调代理,监听播放事件、以及获取音视频数据 + + TXLivePlayer 类型的接口类 + 一般情况下传 NULL 就可以了,透传用户数据到 ITXLivePusherCallback 的回调函数 + + + +析构函数,C#代码中要求显示调用Dispose函数,来触发托管C++类析构函数 + + + + +TXLivePusher的推流事件通知 + + 事件ID, 见 TXLiveSDKEventDef.h 中的事件定义 - PushEvent + 事件详情是一个 key-value 字典 + 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 0 + + + +TXCSharpLivePlayer的播放事件通知 + + 事件ID, 见 TXLiveSDKEventDef.h 中的事件定义 - PlayEvent + 事件详情是一个 key-value 字典 + 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 0 + + + +播放事件列表 + + + + +RTMP服务器主动断开 + + + + +RTMP服务器握手失败 + + + + +RTMP服务器连接失败 + + + + +RTMP -DNS解析失败 + + + + +当前流硬解第一个I帧失败,SDK自动切软解 + + + + +当前视频帧不连续,可能丢帧 + + + + +硬解启动失败,采用软解 + + + + +当前视频播放出现卡顿(用户直观感受) + + + + +网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀 + + + + +网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃) + + + + +当前音频帧解码失败 + + + + +当前视频帧解码失败 + + + + +获取加速拉流地址失败 + + + + +网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放 + + + + +视频分辨率改变 + + + + +解码器启动 + + + + +视频播放loading + + + + +视频播放结束 + + + + +视频播放进度 + + + + +视频播放开始 + + + + +渲染首个视频数据包(IDR) + + + + +已经连接服务器,开始拉流 + + + + +已经连接服务器 + + + + +推流事件列表 + + + + +超过30s没有数据发送,主动断开连接 + + + + +RTMP服务器主动断开,请检查推流地址的合法性或防盗链有效期 + + + + +RTMP服务器握手失败 + + + + +RTMP服务器连接失败 + + + + +RTMP -DNS解析失败 + + + + +视频编码码率异常,警告 + + + + +视频编码码率异常,警告 + + + + +视频编码失败,非致命错,内部会重启编码器 + + + + +硬编码启动失败,采用软编码 + + + + +网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃) + + + + +网络状况不佳:上行带宽太小,上传数据受阻 + + + + +摄像头正在被占用中,可尝试打开其他摄像头(PC版SDK专用) + + + + +网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启推流 + + + + +不支持的音频采样率 + + + + +不支持的视频分辨率 + + + + +音频编码失败 + + + + +视频编码失败 + + + + +打开麦克风失败 + + + + +打开摄像头失败 + + + + +关闭摄像头完成(PC版SDK专用) + + + + +摄像头设备重新可用(PC版SDK专用) + + + + +摄像头设备已被移出(PC版SDK专用) + + + + +编码器启动 + + + + +首帧画面采集完成 + + + + +推流动态调整码率 + + + + +推流动态调整分辨率 + + + + +打开摄像头成功 + + + + +已经与服务器握手完毕,开始推流 + + + + +已经连接推流服务器 + + + + +编解码队列DROPCNT + + + + +编解码缓冲大小 + + + + +缓冲区大小,缓冲区越大,说明当前上行带宽不足以消费掉已经生产的视频数据 + + + + +网络抖动情况,抖动越大,网络越不稳定 + + + + +当前的发送速度 + + + + +当前视频I帧间隔 ,也就是视频编码器每个I帧之间的间隔,单位S + + + + +当前视频帧率,也就是视频编码器每条生产了多少帧画面 + + + + +当前音频编码器输出的比特率,也就是编码器每秒生产了多少音频数据,单位 KBPS + + + + +当前视频编码器输出的比特率,也就是编码器每秒生产了多少视频数据,单位 KBPS + + + + +设备总CPU占用 + + + + +cpu使用率 + + + + +拉流相关数据 + + + + +推流相关数据 + + + + +回调状态定义 ,目前提供视频速度、音频速度、帧率、视频缓冲、音频缓冲、视频大小、服务器地址信息 +状态键名定义 + + + + +设置播放类型 + + + + +RTMP直播加速播放 + + + + +RTMP直播 + + + + +设置美颜风格 + + + + +朦胧 + + + + +自然 + + + + +光滑 + + + + +设置输出的视频格式 + + + + +RBGA格式 + + + + +yuv420格式 + + + + +不输出数据 + + + + +推流的画面质量预设选项 +- 1.2.0 版本开始引入推流画质接口 setVideoQualityParamPreset 用于傻瓜化的选择推流画质效果。 +- TXLivePush::setVideoQualityParamPreset 内部通过预先配置不同的视频参数调整到对应的质量 +- 目前支持的几种画质选项如下: + +(1)标清 - 采用 640 * 360 级别分辨率,码率会在 400kbps - 800kbps 之间自适应,如果主播的网络条件不理想, + 直播的画质会偏模糊,但总体卡顿率不会太高。 + Android平台下这一档我们会选择采用软编码,软编码虽然更加耗电,但在运动画面的表现要优于硬编码。 + +(2)高清 - 采用 960 * 540 级别分辨率,码率会锁定在 1200kbps,如果主播的网络条件不理想,直播画质不会有变化, + 但这段时间内会出现频繁的卡顿和跳帧。 两个平台下,这一档我们都会采用硬编码。 + +(3)超清 - 采用 1280 * 720 级别分辨率,码率会锁定在 1500kbps,对主播的上行带宽要求比较高,适合观看端是大屏的业务场景。 + +(4)大主播 - 顾名思义,连麦中大主播使用,因为是观众的主画面,追求清晰一些的效果,所以分辨率会优先选择 960 * 540。 + +(5)小主播 - 顾名思义,连麦中小主播使用,因为是小画面,画面追求流畅,分辨率采用 480 * 320, 码率 350kbps 固定。 + +(6)实时音视频通话 - 时延低,小画面,画面追求流畅,分辨率采用 480 * 320, 码率 350kbps 固定。 + +(7)静态画质场景 - 画面变动小,能保证非常低的码率下,视频相对清晰,如截屏正在播放的ppt,1080p,400kb左右码率。 + + +使用 setVideoQualityParamPreset 之后,依然可以使用setVideoBitRate、setVideoFPS、setAutoAdjustStrategy等设置自定义画质,以最后一次的设置为准。 + + + + +目前SDK支持的流控策略 + + + + +适用于实时音视频通话的流控策略,也就是 VIDEO_QUALITY_REALTIME_VIDEOCHAT 所使用流控策略,该策略敏感度比较高,网络稍有风吹草动就会进行自适应调整 + + + + +适用于普通直播推流的流控策略,是对 LIVEPUSH_STRATEGY 的升级版本,差别是该模式下 SDK 会根据当前码率自动调整出适合的分辨率 + + + + +适用于普通直播推流的流控策略,该策略敏感度比较低,会缓慢适应带宽变化,有利于在带宽波动时保持画面的清晰度 + + + + +无流控,恒定使用 setVideoBitRate 指定的视频码率 + + + + +画面顺时针旋转角度 + + + + +顺时针旋转270度,最终图像的宽度和高度互换 + + + + +顺时针旋转180度,最终图像颠倒 + + + + +顺时针旋转90度,最终图像的宽度和高度互换 + + + + +保持原图像的角度 + + + + +目前SDK支持的画面渲染模式,两种模式均会严格保持画面的原始宽高比 + + + + +填充,此模式下画面无黑边,但是会裁剪掉一部分超出渲染区域的部分,裁剪模式为居中裁剪 + + + + +适应,此模式下会显示整个画面的全部内容,但可能有黑边的存在 + + + + +推流视频分辨率,普屏 4:3和宽屏16:9两种分类 + + + + +视频数据源类型 + + + + +音频前处理选项 + + + + +音频数据源类型 + + + + +音频声道数 + + + +@} + + + +停止扬声器测试 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + + + +开启扬声器测试 +回调接口 onTestSpeakerVolume 获取测试数据该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 音频文件的绝对路径,路径字符串使用 UTF-8 +编码格式,支持文件格式:WAV、MP3 + + + +停止麦克风测试 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + + + +开启麦克风测试 +回调接口 onTestMicVolume 获取测试数据该方法测试麦克风是否能正常工作,volume 的取值范围为0 - 100。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 反馈音量提示的时间间隔(ms),建议设置到大于 200 毫秒 + + + +停止摄像头测试 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + + + +开始进行摄像头测试 + +会触发 onFirstVideoFrame 回调接口 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + +在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + + 承载预览画面的窗口句柄 + + + +设置系统当前扬声器设备音量 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 该接口的功能是调节系统播放音量,如果用户直接调节 WIN 系统设置的播放音量时,该接口的设置结果会被用户的操作所覆盖。 + 设置的扬声器音量,范围0 - 100 + + + +获取系统当前扬声器设备音量 + + 查询的是系统硬件音量大小。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 扬声器音量,范围0 - 100 + + + +设置要使用的扬声器 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 从 getSpeakerDevicesList 中得到的设备 ID + + + +获取当前的扬声器设备 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + +获取扬声器设备列表 + + +示例代码: + +ITRTCDeviceCollection pDevice = m_pCloud.getSpeakerDevicesList(); +for (int i = 0; i < pDevice.getCount(); i++) +{ + string name = pDevice.getDeviceName(i)); +} +pDevice.release(); + + +SDK 维护 ITRTCDeviceCollection 对象的生命周期。 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 扬声器管理器对象 ITRTCDeviceCollection + + + +设置系统当前麦克风设备的音量 + + 该接口的功能是调节系统采集音量,如果用户直接调节 WIN 系统设置的采集音量时,该接口的设置结果会被用户的操作所覆盖。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 麦克风音量值,范围[0 - 100] + + + +获取系统当前麦克风设备音量 + + 查询的是系统硬件音量大小。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 音量值,范围是[0 - 100] + + + +设置要使用的麦克风 + +选择指定的麦克风作为录音设备,不调用该接口时,默认选择索引为0的麦克风 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 从 getMicDevicesList 中得到的设备 ID + + + +获取当前选择的麦克风 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + +获取麦克风设备列表 + + +示例代码: + +ITRTCDeviceCollection pDevice = m_pCloud.getMicDevicesList(); +for (int i = 0; i < pDevice.getCount(); i++) +{ + string name = pDevice.getDeviceName(i)); +} +pDevice.release(); +pDevice = null; + + +SDK 维护 ITRTCDeviceCollection 对象的生命周期。 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 麦克风管理器对象 ITRTCDeviceCollection + + + +获取当前使用的摄像头 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + +设置要使用的摄像头 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 从 getCameraDevicesList 中得到的设备 ID + + + +获取摄像头设备列表 + + +示例代码: + +ITRTCDeviceCollection pDevice = m_pCloud.getCameraDevicesList(); +for (int i = 0; i < pDevice.getCount(); i++) +{ + string name = pDevice.getDeviceName(i)); +} +pDevice.release(); +pDevice = null; + + +SDK 维护 ITRTCDeviceCollection 对象的生命周期。 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 摄像头管理器对象 ITRTCDeviceCollection + + + +开启本地音频的采集和上行 + +该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。SDK +并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。 + v8.0 版本弃用,请使用 startLocalAudio(TRTCAudioQuality) 接口 + +TRTC SDK 并不会默认打开本地的麦克风采集。 + + + + +设置音频质量 + +主播端的音质越高,观众端的听感越好,但传输所依赖的带宽也就越高,在带宽有限的场景下也更容易出现卡顿。SDK +并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。TRTCCloudDef#TRTCAudioQualitySpeech}, +流畅:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。TRTCCloudDef#TRTCAudioQualityDefault},默认:采样率:48k;单声道;音频裸码率:50kbps;SDK +默认的音频质量,如无特殊需求推荐选择之。TRTCCloudDef#TRTCAudioQualityMusic},高音质:采样率:48k;双声道 + +全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。 + v8.0 版本弃用,请使用 startLocalAudio(TRTCAudioQuality) 接口 + +该方法需要在 startLocalAudio 之前进行设置,否则不会生效。 + + + + +设定观看方优先选择的视频质量 + +低端设备推荐优先选择低清晰度的小画面。如果对方没有开启双路视频模式,则此操作无效。 + v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + 默认观看大画面还是小画面,默认为 TRTCVideoStreamTypeBig + + + +设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的顺时针旋转角度 + + - setRemoteViewRotation() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的旋转角度。 + - setRemoteSubStreamViewRotation() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的旋转角度。 + v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + 用户的 ID + 支持90、180、270旋转角度 + + + +设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的显示模式 + + - setRemoteViewFillMode() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的显示模式。 + - setRemoteSubStreamViewFillMode() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的显示模式。 + v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + 用户的 ID + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + +停止显示远端用户的辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)。 + + v8.0 版本弃用,请使用 stopRemoteView(userId,streamType) 接口 + 对方的用户标识 + + + +开始显示远端用户的辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享) + + - startRemoteView() 用于显示主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)。 + - startRemoteSubStreamView() 用于显示辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)。 + v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + 请在 onUserSubStreamAvailable 回调后再调用这个接口。 + 对方的用户标识 + 渲染画面的 HWND + + + +设置本地摄像头预览画面的镜像模式 + + v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + 镜像模式,默认值:false(非镜像模式) + + + +设置远端图像的顺时针旋转角度 + + v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + 用户 ID + 支持 TRTCVideoRotation90 、 TRTCVideoRotation180 以及 +TRTCVideoRotation270 旋转角度,默认值:TRTCVideoRotation0 + + + +设置本地图像的顺时针旋转角度 + + v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + 支持 TRTCVideoRotation90 、 TRTCVideoRotation180 以及 TRTCVideoRotation270 旋转角度,默认值:TRTCVideoRotation0 + + + +设置远端图像的渲染模式 + + v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + 用户 ID + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + +设置本地图像的渲染模式 + + v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + +停止显示远端视频画面,同时不再拉取远端用户的视频数据流 + +调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。 + v8.0 版本弃用,请使用 stopRemoteView(userId,streamType) 接口 + 对方的用户标识 + + + +开始显示远端视频画面 + + v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + 对方的用户标识 + 承载预览画面的窗口句柄 + + + +设置屏幕共享参数 + + v7.9 版本弃用,请使用 selectScreenCaptureTarget(TRTCScreenCaptureSourceInfo,RECT,TRTCScreenCaptureProperty) 接口 + 指定分享源 + 指定捕获的区域 + 指定是否捕获鼠标指针 + 指定是否高亮正在共享的窗口,以及当捕获图像被遮挡时高亮遮挡窗口提示用户移走遮挡 + + + +恢复音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager resumePlayMusic 接口 + 音效 Id + + + +暂停音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + 音效 Id + + + +设置所有音效的音量 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / setMusicPlayoutVolume 接口 + 该操作会覆盖通过 setAudioEffectVolume 指定的单独音效音量。 + 音量大小,取值范围为0 - 100;默认值:100 + + + +停止所有音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager stopPlayMusic 接口 + + + +停止音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager stopPlayMusic 接口 + 音效 ID + + + +设置音效音量 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / setMusicPlayoutVolume 接口 + 会覆盖通过 setAllAudioEffectsVolume 指定的整体音效音量。 + 音效 ID + 音量大小,取值范围为0 - 100;默认值:100 + + + +播放音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager startPlayMusic 接口 + 每个音效都需要您指定具体的 ID,您可以通过该 ID 对音效的开始、停止、音量等进行设置。 + 支持的文件格式:aac, mp3。 + 若您想同时播放多个音效,请分配不同的 ID 进行播放。因为使用同一个 ID 播放不同音效,SDK 将会停止上一个 ID 对应的音效播放,再启动新的音效播放。 + 音效 + + + +设置背景音乐远端播放音量的大小 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐在远端播放时的音量大小。 + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +设置背景音乐本地播放音量的大小 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPlayoutVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐在本地播放时的音量大小。 + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +设置背景音乐播放音量的大小 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / setMusicPlayoutVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐播放音量的大小, + 该接口会同时控制远端播放音量的大小和本地播放音量的大小, + 因此调用该接口后,setBGMPlayoutVolume和setBGMPublishVolume设置的音量值会被覆盖 + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +设置 BGM 播放进度 + + v7.3 版本弃用,请使用 TXAudioEffectManager seekMusicToPosInMS 接口 + 单位毫秒 + + + +获取音乐文件总时长,单位毫秒 + + v7.3 版本弃用,请使用 TXAudioEffectManager getMusicDurationInMS 接口 + 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长 + 成功返回时长,失败返回-1 + + + +继续播放背景音乐 + + v7.3 版本弃用,请使用 TXAudioEffectManager resumePlayMusic 接口 + + + +暂停播放背景音乐 + + v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + + + +停止播放背景音乐 + + v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + + + +启动播放背景音乐 + + v7.3 版本弃用,请使用 TXAudioEffectManager startPlayMusic 接口,支持并发播放多个 BGM + 音乐文件路径,支持的文件格式:aac, mp3。 + + + +启动屏幕分享 + + 从 v7.2 版本开始废弃 + 使用 startScreenCapture(HWND rendHwnd, TRTCVideoStreamType type, TRTCVideoEncParam* params) 接口替代。 + + +@} +@name 弃用接口函数 +@{ + +设置麦克风的音量大小 +从 v6.9 版本开始废弃使用 setAudioCaptureVolume 接口替代。 + + +12.8 调用实验性 API 接口 + + +该接口用于调用一些实验性功能 + + 接口及参数描述的 JSON 字符串 + + + +12.7 显示仪表盘 + + +仪表盘是状态统计和事件消息浮层 view,方便调试。 + + 0:不显示;1:显示精简版;2:显示全量版,默认为不显示 + + + +12.6 设置日志回调 + + 日志回调 + + + +12.5 设置日志保存路径 + + +日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/Tencent/liteav/log,即 %appdata%/Tencent/liteav/log 下,如需修改,必须在所有方法前调用。 + + 存储日志的文件夹,例如 "D:\\Log",UTF-8 编码 + + + +12.4 启用或禁用 Log 的本地压缩 + +开启压缩后,Log 存储体积明显减小,但需要腾讯云提供的 Python 脚本解压后才能阅读。禁用压缩后,Log 采用明文存储,可以直接用记事本打开阅读,但占用空间较大。 + 指定是否启用,默认为禁止状态 + + + +12.3 启用或禁用控制台日志打印 + + 指定是否启用,默认为禁止状态 + + + +12.2 设置 Log 输出级别 + + level 参见 TRTCLogLevel,默认值:TRTCLogLevelNone + + +@} +@name LOG 相关接口函数 +@{ + +12.1 获取 SDK 版本信息 +UTF-8 编码的版本号。 + + +11.2 停止网络测速 + + + +@} +@name 网络测试 +@{ + +11.1 开始进行网络测速(视频通话期间请勿测试,以免影响通话质量) + +测速结果将会用于优化 SDK 接下来的服务器选择策略,因此推荐您在用户首次通话前先进行一次测速,这将有助于我们选择最佳的服务器。同时,如果测试结果非常不理想,您可以通过醒目的 UI 提示用户选择更好的网络。 +测速本身会消耗一定的流量,所以也会产生少量额外的流量费用。 +应用标识用户标识用户签名 + + +10.2 将小数据量的自定义数据嵌入视频帧中 + +跟 sendCustomCmdMsg 的原理不同,sendSEIMsg 是将数据直接塞入视频数据头中。因此,即使视频帧被旁路到了直播 CDN 上, +这些数据也会一直存在。但是由于要把数据嵌入视频帧中,所以数据本身不能太大,推荐几个字节就好。 +最常见的用法是把自定义的时间戳(timstamp)用 sendSEIMsg 嵌入视频帧中,这种方案的最大好处就是可以实现消息和画面的完美对齐。 + +本接口有以下限制: + -数据在接口调用完后不会被即时发送出去,而是从下一帧视频帧开始带在视频帧中发送。 -发送消息到房间内所有用户,每秒最多能发送30条消息(与 sendCustomCmdMsg 共享限制)。 -每个包最大为1KB,若发送大量数据,会导致视频码率增大,可能导致视频画质下降甚至卡顿(与 sendCustomCmdMsg 共享限制)。 -每个客户端每秒最多能发送总计8KB数据(与 sendCustomCmdMsg 共享限制)。 -若指定多次发送(repeatCount > 1),则数据会被带在后续的连续 repeatCount 个视频帧中发送出去,同样会导致视频码率增大。 -如果 repeatCount > 1,多次发送,接收消息 onRecvSEIMsg 回调也可能会收到多次相同的消息,需要去重。 + 待发送的数据,最大支持1kb(1000字节)的数据大小 + 待发送的数据大小 + 发送数据次数 + true:消息已通过限制,等待后续视频帧发送;false:消息被限制发送 + + +@} +@name 自定义消息发送 +@{ + +10.1 发送自定义消息给房间内所有用户 + +该接口可以借助音视频数据通道向当前房间里的其他用户广播您自定义的数据,但因为复用了音视频数据通道, +请务必严格控制自定义消息的发送频率和消息体的大小,否则会影响音视频数据的质量控制逻辑,造成不确定性的问题。 + +本接口有以下限制: + -发送消息到房间内所有用户(暂时不支持 Web/小程序端),每秒最多能发送30条消息。 -每个包最大为1KB,超过则很有可能会被中间路由器或者服务器丢弃。 -每个客户端每秒最多能发送总计8KB数据。 -将 reliable 和 ordered 同时设置为 true 或 false,暂不支持交叉设置。 -强烈建议不同类型的消息使用不同的 cmdID,这样可以在要求有序的情况下减小消息时延。消息 ID,取值范围为1 - 10待发送的消息,最大支持1KB(1000字节)的数据大小待发送的数据大小是否可靠发送,可靠发送的代价是会引入一定的延时,因为接收端要暂存一段时间的数据来等待重传是否要求有序,即是否要求接收端接收的数据顺序和发送端发送的顺序一致,这会带来一定的接收延时,因为在接收端需要暂存并排序这些消息true:消息已经发出;false:消息发送失败 + + +9.7 设置音频数据回调 +设置此方法,SDK 内部会把声音模块的数据(PCM 格式)回调出来,包括:-onCapturedAudioFrame:本机麦克风采集到的音频数据-onPlayAudioFrame:混音前的每一路远程用户的音频数据-onMixedPlayAudioFrame:各路音频数据混合后送入扬声器播放的音频数据 + 声音帧数据(PCM 格式)的回调,callback = nullptr 则停止回调数据 + 0:成功;<0:错误 + + + +9.6 设置远端视频自定义渲染 + +此方法同 setLocalVideoRenderDelegate,区别在于一个是本地画面的渲染回调, 一个是远程画面的渲染回调。 + +设置此方法,SDK 内部会把远端的数据解码后回调出来,SDK 跳过 HWND 渲染逻辑 +调用 setRemoteVideoRenderCallback(userId, TRTCVideoPixelFormat_Unknown, TRTCVideoBufferType_Unknown, nullptr) 停止回调。 + 用户标识 + 指定回调的像素格式 + 指定视频数据结构类型 + 自定义渲染回调 + 0:成功;<0:错误 + + + +9.5 设置本地视频自定义渲染 + + +设置此方法,SDK 内部会把采集到的数据回调出来,SDK 跳过 HWND 渲染逻辑 +调用 setLocalVideoRenderCallback(TRTCVideoPixelFormat_Unknown, TRTCVideoBufferType_Unknown, nullptr) 停止回调 + 指定回调的像素格式 + 指定视频数据结构类型 + 自定义渲染回调 + 0:成功;<0:错误 + + + +10.4 向 SDK 投送自己采集的音频数据 +TRTCAudioFrame 推荐如下填写方式(其他字段不需要填写):-audioFormat:仅支持 LiteAVAudioFrameFormatPCM。-data:音频帧 buffer。-length:音频帧数据长度,推荐每帧20ms采样数。【PCM格式、48000采样率、单声道的帧长度:48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。-sampleRate:采样率,仅支持48000。-channel:频道数量(如果是立体声,数据是交叉的),单声道:1; 双声道:2。-timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。 + +可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomAudioData 的调用间隔,否则会导致声音断断续续。 + + 音频帧,仅支持 LiteAVAudioFrameFormatPCM 格式。目前只支持单声道,仅支持48K采样率,LiteAVAudioFrameFormatPCM 格式。 + + + +9.3 启用音频自定义采集模式 + +开启该模式后,SDK 停止运行原有的音频采集流程,只保留编码和发送能力。您需要用 sendCustomAudioData() 不断地向 SDK 塞入自己采集的音频数据。 + 是否启用,默认值:false + + + +9.2 向 SDK 投送自己采集的视频数据 + +TRTCVideoFrame 推荐如下填写方式(其他字段不需要填写):-pixelFormat:仅支持 LiteAVVideoPixelFormat_I420。-bufferType:仅支持 LiteAVVideoBufferType_Buffer。-data:视频帧 buffer。-length:视频帧数据长度,I420 格式下,其值等于:width × height × 3 / 2。-width:视频图像长度。-height:视频图像宽度。-timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。 + +- SDK 内部有帧率控制逻辑,目标帧率以您在 setVideoEncoderParam 中设置的为准,太快会自动丢帧,太慢则会自动补帧。 +- 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomVideoData 的调用间隔,否则会导致视频帧率不稳定。 + 视频数据,支持 I420 格式数据。 + + +@} +@name 自定义采集和渲染 +@{ + +9.1 启用视频自定义采集模式 + +开启该模式后,SDK 不在运行原有的视频采集流程,只保留编码和发送能力。您需要用 sendCustomVideoData() 不断地向 SDK 塞入自己采集的视频画面。是否启用,默认值:false + + +8.11 将所有窗口从屏幕分享的排除列表中移除 + + + + +8.10 将指定窗口从屏幕分享的排除列表中移除 + + 不希望分享出去的窗口 + + + +8.9 将指定窗口加入屏幕分享的排除列表中,加入排除列表中的窗口不会被分享出去 + +支持启动屏幕分享前设置过滤窗口,也支持屏幕分享过程中动态添加过滤窗口。 + 不希望分享出去的窗口 + + + +8.8 设置屏幕分享的混音音量大小 + + 这个数值越高,屏幕分享音量的占比就越高,麦克风音量占比就越小,所以不推荐设置得太大,否则麦克风的声音就被压制了。 + 设置的混音音量大小,范围0 - 100 + + + +8.7 设置屏幕分享的编码器参数 + + - setVideoEncoderParam() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的编码参数。 + - setSubStreamEncoderParam() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的编码参数。 + 该设置决定远端用户看到的画面质量,同时也是云端录制出的视频文件的画面质量。 + 即使使用主路传输屏幕分享的数据(在调用 startScreenCapture 时设置 type=TRTCVideoStreamTypeBig),依然要使用此接口更新屏幕分享的编码参数。 + 辅流编码参数,详情请参考 TRTCCloudDef.h 中的 TRTCVideoEncParam 定义 + + + +8.6 设置屏幕共享参数,该方法在屏幕共享过程中也可以调用 + +如果您期望在屏幕分享的过程中,切换想要分享的窗口,可以再次调用这个函数而不需要重新开启屏幕分享。支持如下四种情况:-共享整个屏幕:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为{ 0, 0, 0, 0 }-共享指定区域:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为非 NULL,例如{ 100, 100, 300, 300 }-共享整个窗口:sourceInfoList 中 type 为 Window 的 source,captureRect 设为{ 0, 0, 0, 0 }-共享窗口区域:sourceInfoList 中 type 为 Window 的 source,captureRect 设为非 NULL,例如{ 100, 100, 300, 300 } + 指定分享源 + 指定捕获的区域 + 指定屏幕分享目标的属性,包括捕获鼠标,高亮捕获窗口等,详情参考 TRTCScreenCaptureProperty 定义 + + + +8.5 枚举可分享的屏幕窗口,建议在 startScreenCapture 之前调用 + +如果您要给您的 App 增加屏幕分享功能,一般需要先显示一个窗口选择界面,这样用户可以选择希望分享的窗口。通过如下函数,您可以获得可分享窗口的 ID、类型、窗口名称以及缩略图。拿到这些信息后,您就可以实现一个窗口选择界面,当然,您也可以使用我们在 Demo 源码中已经实现好的一个界面。 + +返回的列表中包括屏幕和应用窗口,屏幕会在列表的前面几个元素中。 +SDK 维护 ITRTCScreenCaptureSourceList 对象的生命周期。 + 指定要获取的窗口缩略图大小,缩略图可用于绘制在窗口选择界面上 + 指定要获取的窗口图标大小 + 窗口列表包括屏幕 + + + +8.4 恢复屏幕分享 + + + + +8.3 暂停屏幕分享 + + + + +8.2 停止屏幕采集 + + + +@} +@name 屏幕分享相关接口函数 +@{ + +8.1 启动屏幕分享 + +一个用户同时最多只能上传一条主路(TRTCVideoStreamTypeBig)画面和一条辅路(TRTCVideoStreamTypeSub)画面, +默认情况下,屏幕分享使用辅路画面,如果使用主路画面,建议您提前停止摄像头采集(stopLocalPreview)避免相互冲突。 +承载预览画面的 HWND,可以设置为 nullptr,表示不显示屏幕分享的预览效果。屏幕分享使用的线路,可以设置为主路(TRTCVideoStreamTypeBig)或者辅路(TRTCVideoStreamTypeSub),默认使用辅路。屏幕分享的画面编码参数,可以设置为 nullptr,表示让 SDK 选择最佳的编码参数(分辨率、码率等)。 + + +7.4 设置系统声音采集的音量。 + + 音量大小,取值范围为0 - 100。 + + + +7.3 关闭系统声音采集。 + + + + +7.2 打开系统声音采集 + + 开启后可以采集整个操作系统的播放声音(path 为空)或某一个播放器(path 不为空)的声音, + 并将其混入到当前麦克风采集的声音中一起发送到云端。 + + - path 为空,代表采集整个操作系统的声音。 + path 填写 exe 程序(如 QQ音乐)所在的路径,将会启动此程序并只采集此程序的声音。 + + + +@} +@name 音乐特效和人声特效 +@{ + +7.1 获取音效管理类 ITXAudioEffectManager +该模块是整个 SDK 的音效管理模块,支持如下功能:- 耳机耳返:麦克风捕捉的声音实时通过耳机播放。- 混响效果:KTV、小房间、大会堂、低沉、洪亮...- 变声特效:萝莉、大叔、重金属、外国人...- 背景音乐:支持在线音乐和本地音乐,支持变速、变调等特效、支持原生和伴奏并播放和循环播放。- 短音效:鼓掌声、欢笑声等简短的音效文件,对于小于10秒的文件,请将 isShortFile 参数设置为 YES。 + + +6.2 设置水印 + +水印的位置是通过 xOffset, yOffset, fWidthRatio 来指定的。-xOffset:水印的坐标,取值范围为0 - 1的浮点数。-yOffset:水印的坐标,取值范围为0 - 1的浮点数。-fWidthRatio:水印的大小比例,取值范围为0 - 1的浮点数。 + +只支持主路视频流 + + 要设置水印的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub) + 水印图片源数据(传 NULL 表示去掉水印) + 水印图片源数据类型(传 NULL 时忽略该参数) + 水印图片像素宽度(源数据为文件路径时忽略该参数) + 水印图片像素高度(源数据为文件路径时忽略该参数) + 水印显示的左上角 x 轴偏移 + 水印显示的左上角 y 轴偏移 + 水印显示的宽度占画面宽度比例(水印按该参数等比例缩放显示) + + +@} +@name 美颜特效和图像水印 +@{ + +6.1 设置美颜、美白、红润效果级别 + +SDK 内部集成了两套风格不同的磨皮算法,一套我们取名叫“光滑”,适用于美女秀场,效果比较明显。另一套我们取名“自然”,磨皮算法更多地保留了面部细节,主观感受上会更加自然。美颜风格,光滑或者自然,光滑风格磨皮更加明显,适合娱乐场景。美颜级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显美白级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显红润级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显,该参数暂未生效 + +@} +@name 设备相关接口函数 +@{ + +5.1 获取设备管理模块 +ITXDeviceManager 设备管理类 + + +4.12 停止录音 +如果调用 exitRoom 时还在录音,录音会自动停止。 + + + +4.11 开始录音 + +该方法调用后,SDK 会将通话过程中的所有音频(包括本地音频,远端音频,BGM等)录制到一个文件里。无论是否进房,调用该接口都生效。如果调用 exitRoom 时还在录音,录音会自动停止。 + 录音参数,请参考 TRTCAudioRecordingParams + 0:成功;-1:录音已开始;-2:文件或目录创建失败;-3:后缀指定的音频格式不支持 + + + +4.10 启用或关闭音量大小提示 + +开启此功能后,SDK 会在 onUserVoiceVolume() 中反馈对每一路声音音量大小值的评估。我们在 Demo 中有一个音量大小的提示条,就是基于这个接口实现的。如希望打开此功能,请在 startLocalAudio() 之前调用。 + 设置 onUserVoiceVolume 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms + + + +4.9 获取 SDK 播放音量 + + + + +4.8 设置 SDK 播放音量。 + + +该函数会控制最终交给系统播放的声音音量 +会影响本地录制的音量大小。不会影响耳返的音量。 + 音量大小,取值0 - 100,默认值为100 + + + +4.7 获取 SDK 采集音量 + + + + +4.6 设置 SDK 采集音量 + + 音量大小,取值0 - 100,默认值为100 + + + +4.5 静音/取消静音所有用户的声音 + + true:静音;false:取消静音 + +静音时会停止接收所有用户的远端音频流并停止播放,取消静音时会自动拉取所有用户的远端音频流并进行播放。 + + + + +4.4 静音/取消静音指定的远端用户的声音 + + 用户 ID + true:静音;false:取消静音 + +静音时会停止接收该用户的远端音频流并停止播放,取消静音时会自动拉取该用户的远端音频流并进行播放。 + + + + +4.3 静音/取消静音本地的音频 + +当静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, false) 回调通知。当取消静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, true) 回调通知。与 stopLocalAudio 不同之处在于,muteLocalAudio(true) 并不会停止发送音视频数据,而是继续发送码率极低的静音包。由于 MP4 等视频文件格式,对于音频的连续性是要求很高的,使用 stopLocalAudio 会导致录制出的 MP4 不易播放。因此在对录制质量要求很高的场景中,建议选择 muteLocalAudio,从而录制出兼容性更好的 MP4 文件。 + true:静音;false:取消静音,默认值:false + + + +4.2 关闭本地音频的采集和上行 + +当关闭本地音频的采集和上行,房间里的其它成员会收到 onUserAudioAvailable(false) 回调通知。 + + +@} +@name 音频相关接口函数 +@{ + +4.1 开启本地音频的采集和上行 + +该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。SDK 并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。 +TRTC SDK 并不会默认打开本地的麦克风采集。 +声音质量,参见 TRTCAudioQuality + + +3.18 选定观看指定 userId 的大画面还是小画面 +此功能需要该 userId 通过 enableEncSmallVideoStream 提前开启双路编码模式。如果该 userId 没有开启双路编码模式,则此操作无效。 + 用户 ID + 视频流类型,即选择看大画面还是小画面,默认为 TRTCVideoStreamTypeBig + + + +3.17 开启大小画面双路编码模式 + +如果当前用户是房间中的主要角色(例如主播、老师、主持人等),并且使用 PC 或者 Mac 环境,可以开启该模式。开启该模式后,当前用户会同时输出【高清】和【低清】两路视频流(但只有一路音频流)。对于开启该模式的当前用户,会占用更多的网络带宽,并且会更加消耗 CPU 计算资源。对于同一房间的远程观众而言:- 如果用户的下行网络很好,可以选择观看【高清】画面- 如果用户的下行网络较差,可以选择观看【低清】画面 + 是否开启小画面编码,默认值:false + 小流的视频参数 + + + +3.16 设置远端图像的渲染模式 + + 对应的远端视频流用户ID + 远端图像的视频流类型,详见 TRTCVideoStreamType 定义 + 远端图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义 + + + +3.15 设置编码器输出的画面镜像模式 + +该接口不改变本地摄像头的预览画面,但会改变另一端用户看到的(以及服务器录制的)画面效果。 + 是否开启远端镜像, true:远端画面镜像;false:远端画面非镜像。默认值:false + + + +3.14 设置视频编码输出的画面方向,即设置远端用户观看到的和服务器录制的画面方向 + + 目前支持 TRTCVideoRotation0 和 TRTCVideoRotation180 旋转角度,默认值:TRTCVideoRotation0 + + + +3.13 设置本地图像(主流)的渲染参数 + + 本地图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义 + + + +3.12 设置网络流控相关参数 + +该设置决定了 SDK 在各种网络环境下的调控策略(例如弱网下是“保清晰”还是“保流畅”) + 网络流控参数,详情请参考 TRTCCloudDef.h 中 TRTCNetworkQosParam 的定义 + + + +3.11 设置视频编码器相关参数 + +该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量) + 视频编码参数,详情请参考 TRTCCloudDef.h 中 TRTCVideoEncParam 的定义 + + + +3.10 暂停/恢复接收所有远端视频流 + + 该接口仅暂停/恢复接收所有远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。 + 是否停止接收 + + + +3.9 暂停/恢复接收指定的远端视频流 + +该接口仅暂停/恢复接收指定的远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。 + 对方的用户标识 + 是否暂停接收 + + + +3.8 停止显示所有远端视频画面,同时不再拉取远端用户的视频数据流 + + +如果有屏幕分享的画面在显示,则屏幕分享的画面也会一并被关闭 + + + + +3.7 停止显示远端视频画面,同时不再拉取远端用户的视频数据流 + +调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。 + 指定远端用户的 userId + 指定要停止观看的 userId 的视频流类型 + + + +3.6 更新远端视频渲染的窗口 + + 对方的用户标识 + 要设置预览窗口的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub) + 承载预览画面的控件 + + + +3.5 开始拉取并显示指定用户的远端画面 + +该函数会拉取指定 userid 的视频流显示在您指定的 view 控件上,您可以通过 setLocalViewRenderParams 设置显示模式。- 如果您提前知道房间中某个 userid 正在推流,可以直接调用 startRemoteView 显示该用户的远端画面。- 如果您不知道房间中有哪些用户开启了视频,可以在 enterRoom 后等待来自 SDK 的 onUserVideoAvailable(userId, true) 回调通知。调用 startRemoteView 只是启动拉取,此时画面还需要加载,当加载完毕后 ITRTCCloudCallback 会通过 onFirstVideoFrame(userId) 通知您。 + 指定远端用户的 userId + 指定要观看 userId 的视频流类型: +- 高清大画面:({@link TRTCVideoStreamTypeBig})- 低清大画面:({@link TRTCVideoStreamTypeSmall})- 辅流(屏幕分享):({@link TRTCVideoStreamTypeSub}) + 承载视频画面的控件 + +注意几点规则需要您关注: +1. SDK 支持同时观看某 userid 的大画面和辅路,或者小画面和辅路,但不支持同时观看大画面和小画面。2. 只有当指定的 userid 通过 enableEncSmallVideoStream 开启双路编码后,才能观看该用户的小画面。3. 如果该用户的小画面不存在,则默认切换到大画面。 + + + +3.4 暂停/恢复推送本地的视频数据 + +当暂停推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, false) 回调通知当恢复推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, true) 回调通知 + true:暂停;false:恢复,默认值:false + + + +3.3 停止本地视频采集及预览 + + + + +3.2 更新本地视频预览画面的窗口 + + 承载预览画面的控件 + + +@} +@name 视频相关接口函数 +@{ + +3.1 开启本地视频的预览画面 + +这个接口会启动默认的摄像头,可以通过 setCurrentCameraDevice 接口选用其他摄像头 +当开始渲染首帧摄像头画面时,您会收到 ITRTCCloudCallback 中的 onFirstVideoFrame(null) 回调。承载预览画面的控件 + + +2.5 设置云端的混流转码参数 + + +如果您在实时音视频 [控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启了“启用旁路推流”功能, +房间里的每一路画面都会有一个默认的直播 [CDN 地址](https://cloud.tencent.com/document/product/647/16826)。 +一个直播间中可能有不止一位主播,而且每个主播都有自己的画面和声音,但对于 CDN 观众来说,他们只需要一路直播流, +所以您需要将多路音视频流混成一路标准的直播流,这就需要混流转码。 + +当您调用 setMixTranscodingConfig() 接口时,SDK 会向腾讯云的转码服务器发送一条指令,目的是将房间里的多路音视频流混合为一路, +您可以通过 mixUsers 参数来调整每一路画面的位置,以及是否只混合声音,也可以通过 videoWidth、videoHeight、videoBitrate 等参数控制混合音视频流的编码参数。 +【画面1】=> 解码 ====> \ \ 【画面2】=> 解码 => 画面混合 => 编码 => 【混合后的画面】 / 【画面3】=> 解码 ====> / 【声音1】=> 解码 ====> \ \ 【声音2】=> 解码 => 声音混合 => 编码 => 【混合后的声音 / 【声音3】=> 解码 ====> / 参考文档:[云端混流转码](https://cloud.tencent.com/document/product/647/16827)。 + +关于云端混流的注意事项: +- 云端转码会引入一定的 CDN 观看延时,大概会增加1 - 2秒。 +- 调用该函数的用户,会将连麦中的多路画面混合到自己当前这路画面或者 config 中指定的 streamId 上。 +- 请注意,若您还在房间中且不再需要混流,请务必传入 nullptr 进行取消,因为当您发起混流后,云端混流模块就会开始工作,不及时取消混流可能会引起不必要的计费损失。 +- 请放心,您退房时会自动取消混流状态。 + + 请参考 TRTCCloudDef.h 中关于 TRTCTranscodingConfig 的介绍。如果传入 NULL 取消云端混流转码。 + + + +2.4 停止向非腾讯云地址转推 + + + + +2.3 开始向友商云的直播 CDN 转推 + +该接口跟 startPublishing() 类似,但 startPublishCDNStream() 支持向非腾讯云的直播 CDN 转推。使用 startPublishing() 绑定腾讯云直播 CDN 不收取额外的费用,但使用 startPublishCDNStream() 绑定非腾讯云直播 CDN 需要收取转推费用。 + param param CDN 转推参数,请参考 TRTCTypeDef.h 中关于 TRTCPublishCDNParam 的介绍。 + + + +2.2 停止向腾讯云的直播 CDN 推流 + + + +@} +@name CDN 相关接口函数 +@{ + +2.1 开始向腾讯云的直播 CDN 推流 + +该接口会指定当前用户的音视频流在腾讯云 CDN 所对应的 StreamId,进而可以指定当前用户的 CDN 播放地址。例如:如果我们采用如下代码设置当前用户的主画面 StreamId 为 user_stream_001,那么该用户主画面对应的 CDN 播放地址为:“http://yourdomain/live/user_stream_001.flv”,其中 yourdomain 为您自己备案的播放域名,您可以在直播[控制台](https://console.cloud.tencent.com/live) 配置您的播放域名,腾讯云不提供默认的播放域名。您也可以在设置 enterRoom 的参数 TRTCParams 时指定 streamId, 而且我们更推荐您采用这种方案。 +ITRTCCloud trtcCloud = ITRTCCloud.getTRTCShareInstance(); +trtcCloud.enterRoom(params, TRTCAppScene.TRTCAppSceneLIVE); +trtcCloud.startLocalPreview(Intptr); +trtcCloud.startLocalAudio(); +trtcCloud.startPublishing("user_stream_001", TRTCVideoStreamType.TRTCVideoStreamTypeBig); + +您需要先在实时音视频 [控制台](https://console.cloud.tencent.com/rav/) 中的功能配置页开启“启用旁路推流”才能生效。 +- 若您选择“指定流旁路”,则您可以通过该接口将对应音视频流推送到腾讯云 CDN 且指定为填写的流 ID。 +- 若您选择“全局自动旁路”,则您可以通过该接口调整默认的流 ID。 +自定义流 ID仅支持 TRTCVideoStreamTypeBig 和 TRTCVideoStreamTypeSub。 + + +1.9 切换房间 + +调用该接口后,用户会先退出原来的房间并快速进入 TRTCSwitchRoomConfig 中指定的新房间:相比于直接调用 exitRoom + enterRoom 的方式,switchRoom 接口对主播更加友好,因为 switchRoom 不会停止主播端视频的采集和预览。接口调用结果会通过 ITRTCCloudCallback 中的 onSwitchRoom(errCode, errMsg) 回调通知给您。 + 房间切换参数,请参考 {@link TRTCSwitchRoomConfig} + + + +1.6 设置音视频数据接收模式(需要在进房前设置才能生效) + +为实现进房秒开的绝佳体验,SDK 默认进房后自动接收音视频。即在您进房成功的同时,您将立刻收到远端所有用户的音视频数据。若您没有调用 startRemoteView,视频数据将自动超时取消。若您主要用于语音聊天等没有自动接收视频数据需求的场景,您可以根据实际需求选择接收模式。 + true:自动接收音频数据;false:需要调用 muteRemoteAudio 进行请求或取消。默认值:true + true:自动接收视频数据;false:需要调用 startRemoteView/stopRemoteView 进行请求或取消。默认值:true + 需要在进房前设置才能生效。 + + + +1.5 关闭跨房连麦 + +跨房通话的退出结果会通过 ITRTCCloudCallback 中的 onDisconnectOtherRoom 回调通知给您。 + + + +1.4 请求跨房通话(主播 PK) + +TRTC 中两个不同音视频房间中的主播,可以通过“跨房通话”功能拉通连麦通话功能。使用此功能时, +两个主播无需退出各自原来的直播间即可进行“连麦 PK”。 + +例如:当房间“001”中的主播 A 通过 connectOtherRoom() 跟房间“002”中的主播 B 拉通跨房通话后, +房间“001”中的用户都会收到主播 B 的 onUserEnter(B) 回调和 onUserVideoAvailable(B, true) 回调。 +房间“002”中的用户都会收到主播 A 的 onUserEnter(A) 回调和 onUserVideoAvailable(A, true) 回调。 +简言之,跨房通话的本质,就是把两个不同房间中的主播相互分享,让每个房间里的观众都能看到两个主播。 房间 001 房间 002 ------------- ------------ 跨房通话前: | 主播 A | | 主播 B | | 观众 U V W | | 观众 X Y Z | ------------- ------------ 房间 001 房间 002 ------------- ------------ 跨房通话后: | 主播 A B | | 主播 B A | | 观众 U V W | | 观众 X Y Z | ------------- ------------ 跨房通话的参数考虑到后续扩展字段的兼容性问题,暂时采用了 JSON 格式的参数,要求至少包含两个字段:- roomId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 roomId 应指定为“002”。- userId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 userId 应指定为 B 的 userId。跨房通话的请求结果会通过 TRTCCloudCallback 中的 onConnectOtherRoom() 回调通知给您。 此处用到 json 库来格式化json字符串 dynamic jsonObj = new JObject(); jsonObj["roomId"] = 002; jsonObj["userId"] = "userB"; string params = JsonConvert.SerializeObject(jsonObj); trtc.connectOtherRoom(params); + JSON 字符串连麦参数,roomId 代表目标房间号,userId 代表目标用户 ID。 + + + +1.3 切换角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom) + +在直播场景下,一个用户可能需要在“观众”和“主播”之间来回切换。您可以在进房前通过 TRTCParams 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。 + 目标角色,默认为主播: +- {@link TRTCRoleAnchor} 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。 +- {@link TRTCRoleAudience} 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。 + + + + +1.2 离开房间 + +调用 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。待资源释放完毕,SDK 会通过 TRTCCloudCallback 中的 onExitRoom() 回调通知您。如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。 + + + +移除事件回调 + + 事件回调 + + +@} +@name 设置 TRTCCloudCallback 回调 +@{ + +设置回调接口 ITRTCCloudCallback +您可以通过 ITRTCCloudCallback 获得来自 SDK 的各种状态通知,详见 ITRTCCloudCallback.h 中的定义事件回调 + + +释放 ITRTCCloud 单例对象。 + + + +@name 创建与销毁 ITRTCCloud 单例 +@{ + +获取 ITRTCCloud 单例对象。 +返回 ITRTCCloud 单例对象 + + +析构函数,C# 代码中要求显示调用 Dispose 函数,来触发托管 C++ 类析构函数。 + + + +@defgroup ITRTCCloud_csharp ITRTCCloud +腾讯云视频通话功能的主要接口类 +@{ + +Module: ITRTCCloud @ TXLiteAVSDK + +Function: 腾讯云视频通话功能的主要接口类 +创建/使用/销毁 ITRTCCloud 对象的示例代码: + +ITRTCCloud trtcCloud = ITRTCCloud.getTRTCShareInstance(); +if (trtcCloud != null) +{ + string version = trtcCloud->getSDKVersion(); +} + +程序退出或者后续程序流程不需要使用 TRTCCloud 对象时,释放单例对象 ITRTCCloud + +ITRTCCloud.destroyTRTCShareInstance(); +trtcCloud = null; + + + +2.13 获取景音乐文件的总时长(单位:毫秒) + + 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长。 + 成功返回时长,失败返回-1 + + + +2.12 设置背景音乐的播放进度(单位:毫秒) +每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。 + + +请尽量避免频繁地调用该接口,因为该接口可能会再次读写音乐文件,耗时稍高。 +当配合进度条使用时,请在进度条拖动完毕的回调中调用,而避免在拖动过程中实时调用。 + + 音乐 ID + 单位: 毫秒 + + + +2.11 获取背景音乐当前的播放进度(单位:毫秒) + + 音乐 ID + 成功返回当前播放时间,单位:毫秒,失败返回-1 + + + +2.10 调整背景音乐的变速效果 + + 音乐 ID + 速度,默认值是1.0f,范围是:[0.5 ~ 2] 之间的浮点数; + + + +2.9 调整背景音乐的音调高低 + + 音乐 ID + 音调,默认值是0.0f,范围是:[-1 ~ 1] 之间的浮点数; + + + +2.8 设置全局背景音乐的本地和远端音量的大小 + + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +2.7 设置背景音乐的本地音量大小,即主播可以通过此接口设置主播自己本地的背景音乐的音量大小。 + + 音乐 ID + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +2.6 设置背景音乐的远端音量大小,即主播可以通过此接口设置远端观众能听到的背景音乐的音量大小。 + + 音乐 ID + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +2.5 恢复播放背景音乐 + + 音乐 ID + + + +2.4 暂停播放背景音乐 + + 音乐 ID + + + +2.3 停止播放背景音乐 + + 音乐 ID + + + +2.2 开始播放背景音乐 +每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。 + + +若您想同时播放多个音乐,请分配不同的 ID 进行播放。 +如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。 + + 音乐参数 + + +@} +@name 背景音乐特效函数 +@{ + +2.1 设置背景音乐的播放进度回调接口 +音乐 ID具体参考 ITXMusicPlayObserver 中定义接口 + + +1.2 设置麦克风采集人声的音量 + + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + +@name 人声相关特效函数 +@{ + +设置人声的混响效果(KTV、小房间、大会堂、低沉、洪亮...) + + + +背景音乐已播放完毕 + + + + +背景音乐的播放进度 + + + + +背景音乐开始播放 + + + + +磁性 + + + + +洪亮 + + + + +低沉 + + + + +大会堂 + + + + +小房间 + + + + +KTV + + + + +关闭混响 + + + + +【字段含义】音乐结束播放时间点,单位毫秒,0表示播放至文件结尾。 + + + + +【字段含义】音乐开始播放时间点,单位毫秒 + + + + +【字段含义】播放的是否为短音乐文件 +【推荐取值】YES:需要重复播放的短音乐文件;NO:正常的音乐文件。默认值:NO + + + + +【字段含义】是否将音乐传到远端 +【推荐取值】YES:音乐在本地播放的同时,会上行至云端,因此远端用户也能听到该音乐;NO:音乐不会上行至云端,因此只能在本地听到该音乐。默认值:NO + + + + +【字段含义】音乐循环播放的次数 +【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音乐一次;1表示播放音乐两次;以此类推 + + + + +【字段含义】音乐文件的绝对路径 + + + + +【字段含义】音乐 ID +【特殊说明】SDK 允许播放多路音乐,因此需要音乐 ID 进行标记,用于控制音乐的开始、停止、音量等 + + + +@defgroup ITXAudioEffectManager_csharp ITXAudioEffectManager +腾讯云视频通话功能音乐和人声设置接口 +@{ + + + +14.1 有日志打印时的回调 + + 日志内容 + 日志等级 参见 TRTCLogLevel + 暂无具体意义,目前为固定值 TXLiteAVSDK + + + +日志相关回调 + + + + +13.3 各路音频数据混合后送入喇叭播放的音频数据 + + +- 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 +- 此接口回调出的音频数据支持修改。- 此接口回调出的音频时间帧长固定为0.02s。 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。 以SDK默认的音频播放格式48000采样率、双声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 2 × 16bit = 30720bit = 3840字节】。- 此接口回调出的音频数据是各路音频播放数据的混合,不包含耳返的音频数据。 + 音频数据 + + + +13.2 混音前的每一路远程用户的音频数据(例如您要对某一路的语音进行文字转换,必须要使用这里的原始数据,而不是混音之后的数据) + + +- 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 +- 此接口回调出的音频数据是只读的,不支持修改。 + 音频数据 + 用户标识 + + + +13.1 本地麦克风采集到的音频数据回调 + + +- 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 +- 此接口回调出的音频数据支持修改。- 此接口回调出的音频时间帧长固定为0.02s。 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。 以SDK默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。- 此接口回调出的音频数据包含背景音、音效、混响等前处理效果。 + 音频数据 + + + +声音数据帧的自定义处理回调(只读) + + +回调函数是在 SDK 内部线程同步抛出来的,请不要做耗时操作。 +提示:请按需定义相关函数实现,减少不必要的性能损耗。 + + + +12.1 自定义视频渲染回调 + +可以通过 setLocalVideoRenderCallback 和 setRemoteVideoRenderCallback 接口设置自定义渲染回调 + 用户标识 + 流类型:即摄像头还是屏幕分享 + 视频帧数据 + + + +视频数据帧的自定义处理回调 + + + + +10.6 废弃接口:播放背景音乐结束 + + 该接口已被废弃,不推荐使用 + 错误码 + + + +10.5 废弃接口:播放背景音乐的进度 + + 该接口已被废弃,不推荐使用 + 已播放时间 + 总时间 + + + +10.4 废弃接口:开始播放背景音乐 + + 该接口已被废弃,不推荐使用 + 错误码 + + + +10.3 废弃接口:播放音效结束回调 + + 该接口已被废弃,不推荐使用 + 音效id + 0表示播放正常结束;其他表示异常结束 + + + +10.2 废弃接口:有用户(主播)离开当前房间 + +该回调接口可以被看作是 onRemoteUserLeaveRoom 的废弃版本,不推荐使用。请使用 +onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。 + 该接口已被废弃,不推荐使用 + 用户标识 + 离开原因 + + +@} +@name 弃用接口回调 +@{ + +10.1 废弃接口:有主播加入当前房间 + +该回调接口可以被看作是 onRemoteUserEnterRoom 的废弃版本,不推荐使用。请使用 +onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。该接口已被废弃,不推荐使用用户标识 + + +9.5 当屏幕分享停止时,SDK 会通过此回调通知 + + 停止原因,0:表示用户主动停止;1:表示屏幕分享窗口被关闭 + + + +9.4 当屏幕分享恢复时,SDK 会通过此回调通知 + + 停止原因,0:表示用户主动恢复,1:表示屏幕分享参数设置完毕后自动恢复;2:表示屏幕分享窗口从最小化被恢复;3:表示屏幕分享窗口从隐藏被恢复 + + + +9.3 当屏幕分享暂停时,SDK 会通过此回调通知 + + 停止原因,0:表示用户主动暂停;1:表示设置屏幕分享参数导致的暂停;2:表示屏幕分享窗口被最小化导致的暂停;3:表示屏幕分享窗口被隐藏导致的暂停 + + + +9.2 当屏幕分享开始时,SDK 会通过此回调通知 + + + +@} +@name 屏幕分享回调 +@{ + +9.1 当屏幕分享窗口被遮挡无法正常捕获时,SDK 会通过此回调通知,可在此回调里通知用户移开遮挡窗口 + + + +8.5 设置云端的混流转码参数的回调,对应于 TRTCCloud 中的 setMixTranscodingConfig() 接口 + +对应于 TRTCCloud 中的 setMixTranscodingConfig() 接口 + 0表示成功,其余值表示失败 + 具体错误原因 + + + +8.4 停止旁路推流到 CDN 完成的回调 + +对应于 TRTCCloud 中的 stopPublishCDNStream() 接口 + 错误码,参考 TXLiteAVCode.h + 错误详细信息 + + + +8.3 启动旁路推流到 CDN 完成的回调 + +对应于 TRTCCloud 的 startPublishCDNStream() 接口 + +Start 回调如果成功,只能说明转推请求已经成功告知给腾讯云,如果目标 CDN 有异常,还是有可能会转推失败。 + + 错误码,参考 TXLiteAVCode.h + 错误详细信息 + + + +8.2 停止向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 stopPublishing() 接口 + + 0表示成功,其余值表示失败 + 具体错误原因 + + +@} +@name CDN 旁路转推回调 +@{ + +8.1 开始向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 startPublishing() 接口 +0表示成功,其余值表示失败具体错误原因 + + +7.3 收到 SEI 消息的回调 + +当房间中的某个用户使用 sendSEIMsg 发送数据时,房间中的其它用户可以通过 onRecvSEIMsg 接口接收数据。 + 用户标识 + 数据 + 数据大小 + + + +7.2 自定义消息丢失回调 + +TRTC 所使用的传输通道为 UDP 通道,所以即使设置了 reliable,也做不到100%不丢失,只是丢消息概率极低,能满足常规可靠性要求。在过去的一段时间内(通常为5s),自定义消息在传输途中丢失的消息数量的统计,SDK 都会通过此回调通知出来。 + +只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调 + + 用户标识 + 命令 ID + 错误码,当前版本为-1 + 丢失的消息数量 + + +@} +@name 自定义消息的接收回调 +@{ + +7.1 收到自定义消息回调 + +当房间中的某个用户使用 sendCustomCmdMsg 发送自定义消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 接口接收消息用户标识命令 ID消息序号消息数据消息数据大小 + + +6.8 当前音频播放设备音量变化通知 + + 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭 + 音量值,取值范围0 - 100 + 当前音频播放设备是否被静音,true:静音;false:取消静音 + + + +6.7 当前音频采集设备音量变化通知 + + 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭 + 音量值,取值范围0 - 100 + 当前采集音频设备是否被静音,true:静音;false:取消静音 + + + +6.6 扬声器测试音量回调 + +扬声器测试接口 startSpeakerDeviceTest 会触发这个回调 + 音量值,取值范围0 - 100 + + + +6.5 麦克风测试音量回调 + +麦克风测试接口 startMicDeviceTest 会触发这个回调 + 音量值,取值范围0 - 100 + + + +6.4 本地设备通断回调 + + 设备 ID + 设备类型 + 事件类型 + + + +6.3 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量 + +您可以通过调用 TRTCCloud 中的 enableAudioVolumeEvaluation 接口来开关这个回调。需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调;如果没有人说话,则 userVolumes 为空,totalVolume 为0。 + +userId 为 null 时表示自己的音量,userVolumes 内仅包含正在说话(音量不为0)的用户音量信息。 + + 所有正在说话的房间成员的音量,取值范围0 - 100。 + 房间成员数量 + 所有远端成员的总音量, 取值范围0 - 100。 + + + +6.2 麦克风准备就绪 + + + +@} +@name 硬件设备事件回调 +@{ + +6.1 摄像头准备就绪 + + + +5.4 服务器测速的回调,SDK 对多个服务器 IP 做测速,每个 IP 的测速结果通过这个回调通知 + + 当前完成的测速结果 + 已完成测速的服务器数量 + 需要测速的服务器总数量 + + + +5.3 SDK 跟服务器的连接恢复 + + + + +5.2 SDK 尝试重新连接到服务器 + + + +@} +@name 服务器事件回调 +@{ + +5.1 SDK 跟服务器的连接断开 + + + +4.2 技术指标统计回调 + +如果您是熟悉音视频领域相关术语,可以通过这个回调获取 SDK 的所有技术指标。如果您是首次开发音视频相关项目,可以只关注 onNetworkQuality 回调。 + +每2秒回调一次 + + 统计数据,包括本地和远程的 + + +@} +@name 统计和质量回调 +@{ + +4.1 网络质量:该回调每2秒触发一次,统计当前网络的上行和下行质量 + +userId == null 代表自己当前的视频质量 +上行网络质量下行网络质量的数组下行网络质量的数组大小 + + +3.9 首帧本地音频数据已经被送出 + +SDK 会在 enterRoom() 并 startLocalAudio() 成功后开始麦克风采集,并将采集到的声音进行编码。当 SDK 成功向云端送出第一帧音频数据后,会抛出这个回调事件。 + + + +3.8 首帧本地视频数据已经被送出 + +SDK 会在 enterRoom() 并 startLocalPreview() 成功后开始摄像头采集,并将采集到的画面进行编码。当 SDK 成功向云端送出第一帧视频数据后,会抛出这个回调事件。 + 视频流类型,大画面还是小画面或辅流画面(屏幕分享) + + + +3.7 开始播放远程用户的首帧音频(本地声音暂不通知) + + 远程用户 ID + + + +3.6 开始渲染本地或远程用户的首帧画面 + +如果 userId 为 null,代表开始渲染本地采集的摄像头画面,需要您先调用 startLocalPreview 触发。如果 userId 不为 null,代表开始渲染远程用户的首帧画面,需要您先调用 startRemoteView 触发。 + +只有当您调用 startLocalPreview()、startRemoteView() 或 startRemoteSubStreamView() 之后,才会触发该回调。 + + 本地或远程用户 ID,如果 userId == null 代表本地,userId != null 代表远程。 + 视频流类型:摄像头或屏幕分享。 + 画面宽度 + 画面高度 + + + +3.5 用户是否开启音频上行 + + 用户标识 + 声音是否开启 + + + +3.4 用户是否开启屏幕分享 + + 用户标识 + 屏幕分享是否开启 + + + +3.3 用户是否开启摄像头视频 + +当您收到 onUserVideoAvailable(userId, YES) 通知时,代表该路画面已经有可用的视频数据帧到达。之后,您需要调用 startRemoteView(userId) 接口加载该用户的远程画面。再之后,您还会收到名为 onFirstVideoFrame(userId) 的首帧画面渲染回调。 +当您收到了 onUserVideoAvailable(userId, NO) 通知时,代表该路远程画面已经被关闭,这可能是 +由于该用户调用了 muteLocalVideo() 或 stopLocalPreview() 所致。 + + 用户标识 + 画面是否开启 + + + +3.2 有用户离开当前房间 + +与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景下,该通知的行为会有差别:- 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户的离开都会触发该通知。- 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):只有主播离开房间时才会触发该通知,观众离开房间不会触发该通知。 + 用户标识 + 离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。 + + +@} +@name 成员事件回调 +@{ + +3.1 有用户加入当前房间 + +出于性能方面的考虑,在两种不同的应用场景下,该通知的行为会有差别:- 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户进入房间都会触发该通知。- 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):该场景不限制观众的数量,如果任何用户进出都抛出回调会引起很大的性能损耗,所以该场景下只有主播进入房间时才会触发该通知,观众进入房间不会触发该通知。 +注意 onRemoteUserEnterRoom 和 onRemoteUserLeaveRoom 只适用于维护当前房间里的“成员列表”,如果需要显示远程画面,建议使用监听 onUserVideoAvailable() 事件回调。 +用户标识 + + +2.6 切换房间 (switchRoom) 的结果回调 + + + + +2.5 结束跨房通话(主播 PK)的结果回调 + + 错误码,ERR_NULL 代表切换成功,其他请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。 + 错误信息 + + + +2.4 请求跨房通话(主播 PK)的结果回调 + +调用 TRTCCloud 中的 connectOtherRoom() 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。 +调用者会收到 onConnectOtherRoom() 回调来获知跨房通话是否成功, +如果成功,两个房间中的所有用户都会收到 PK 主播的 onUserVideoAvailable() 回调。 + + 要 PK 的目标主播 userId。 + 错误码,ERR_NULL 代表切换成功,其他请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。 + 错误信息 + + + +2.3 切换角色结果回调 + +调用 TRTCCloud 中的 switchRole() 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程, +待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调。 + + 错误码,ERR_NULL 代表切换成功,其他请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。 + 错误信息 + + + +2.2 离开房间的事件回调 + +调用 TRTCCloud 中的 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。 +待资源释放完毕之后,SDK 会通过 onExitRoom() 回调通知到您。 + +如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来之后再执行相关操作。 +否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。 + + 离开房间原因,0:主动调用 exitRoom 退房;1:被服务器踢出当前房间;2:当前房间整个被解散。 + + +@} +@name 房间事件回调 +@{ + +2.1 已加入房间的回调 + +调用 TRTCCloud 中的 enterRoom() 接口执行进房操作后,会收到来自 SDK 的 onEnterRoom(result) 回调:- 如果加入成功,result 会是一个正数(result > 0),代表加入房间的时间消耗,单位是毫秒(ms)。- 如果加入失败,result 会是一个负数(result < 0),代表进房失败的错误码。进房失败的错误码含义请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。 +在 Ver6.6 之前的版本,只有进房成功会抛出 onEnterRoom(result) 回调,进房失败由 onError() 回调抛出。 +在 Ver6.6 及之后改为:进房成功返回正的 result,进房失败返回负的 result,同时进房失败也会有 onError() 回调抛出。result > 0 时为进房耗时(ms),result < 0 时为进房错误码。 + + +1.2 警告回调:用于告知您一些非严重性问题,例如出现了卡顿或者可恢复的解码失败。 + + 错误码 + 警告信息 + 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题 + + +@name 错误事件和警告事件 +@{ + +1.1 错误回调,SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。 +错误码错误信息 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题 + +@defgroup ITRTCCloudCallback_csharp ITRTCCloudCallback +腾讯云视频通话功能的回调接口类 +@{ + +腾讯云视频通话功能的回调接口类 + + + +数组 remoteStatisticsArray 的大小 + + + + +远端成员的音视频统计信息,可能有主画面、小画面以及辅路画面等多路的情况,因此是一个数组 + + + + +数组 localStatisticsArray 的大小 + + + + +本地的音视频统计信息,可能有主画面、小画面以及辅路画面等多路的情况,因此是一个数组 + + + + +总发送字节总数(包含信令和音视频) + + + + +总接收字节数(包含信令和音视频) + + + + +延迟(毫秒),指 SDK 到腾讯云服务器的一次网络往返时间,该值越小越好。 +一般低于50ms的 rtt 相对理想,而高于100ms的 rtt 会引入较大的通话延时。由于数据上下行共享一条网络连接,所以 local 和 remote 的 rtt 相同。 + + + +当前系统的 CPU 使用率(%) + + + + +当前 App 的 CPU 使用率(%) + + + + +S -> C 下行丢包率(%), +该值越小越好,例如,丢包率为0表示网络很好, +丢包率为30@%则意味着 SDK 向服务器发送的数据包中会有30@%丢失在下行传输中。 + + + + +C -> S 上行丢包率(%), + +该值越小越好,例如,丢包率为0表示网络很好, +丢包率为30@%则意味着 SDK 向服务器发送的数据包中会有30@%丢失在上行传输中。 + + + + +统计数据 + + + + +流类型(大画面 | 小画面 | 辅路画面) + + + + +音频码率(Kbps) + + + + +音频采样率(Hz) + + + + +视频码率(Kbps) + + + + +接收帧率(fps) + + + + +视频高度 + + + + +视频宽度 + + + + +该线路的总丢包率(%) + +这个值越小越好,例如,丢包率为0表示网络很好。丢包率是该线路的 userId 从上行到服务器再到下行的总丢包率。如果 downLoss 为0,但是 finalLoss 不为0,说明该 userId 上行时出现了无法恢复的丢包。 + + + +用户 ID,指定是哪个用户的视频流 + + + + +远端成员的音视频统计信息 + + + + +流类型(大画面 | 小画面 | 辅路画面) + + + + +音频发送码率(Kbps) + + + + +音频采样率(Hz) + + + + +视频发送码率(Kbps) + + + + +帧率(fps) + + + + +视频高度 + + + + +视频宽度 + + + +@addtogroup TRTCCloudDef_csharp +@{ + +自己本地的音视频统计信息 + + + +视频画面镜像模式,默认值为 TRTCVideoMirrorType_Disable + + + + +视频画面填充模式,默认值为 TRTCVideoFillMode_Fit + + + + +视频画面旋转方向,默认值为 TRTCVideoRotation0 + + + + +6.16 画面渲染参数 + +您可以通过设置此参数来控制画面的旋转、填充、镜像模式 + + + +【字段含义】房间签名 [选填],当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。 +【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。 + + + + +【字段含义】用户签名 [选填],当前 userId 对应的验证签名,相当于登录密码。不填时,SDK 会继续使用旧的 userSig, + 但用户必须保证旧的 userSig 仍在有效期内,否则会造成进房失败等后果。 +【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。 + + + + +【字段含义】字符串房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。 + + + + +【字段含义】数字房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【推荐取值】取值范围:1 - 4294967294。 +【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。 + + + + +6.15 切换房间参数 + + + + +【字段含义】音效音量 +【推荐取值】取值范围为0 - 100;默认值:100 + + + + +【字段含义】音效是否上行 +【推荐取值】YES:音效在本地播放的同时,会上行至云端,因此远端用户也能听到该音效;NO:音效不会上行 + + + + +【字段含义】循环播放次数 +【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音效一次;1表示播放音效两次;以此类推 + + + + +【字段含义】音效路径 + + + + +【字段含义】音效 ID +【特别说明】SDK 允许播放多路音效,因此需要音效 ID 进行标记,用于控制音效的开始、停止、音量等 + + + + +6.14 音效播放 + + + + +【字段含义】文件路径(必填),录音文件的保存路径。该路径需要用户自行指定,请确保路径存在且可写。 +【特别说明】该路径需精确到文件名及格式后缀,格式后缀决定录音文件的格式,目前支持的格式有 PCM、WAV 和 AAC。 + 例如,指定路径为 path/to/audio.aac,则会生成一个 AAC 格式的文件。 + 请指定一个有读写权限的合法路径,否则录音文件无法生成。 + + + + +6.13 录音参数 + +请正确填写参数,确保录音文件顺利生成。 + + + +旁路转推的 URL + + + + +腾讯云直播 bizid,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取 + + + + +腾讯云 AppID,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取 + + + + +6.12 CDN 旁路推流参数 + + + + +【字段含义】 数组 mixUsersArray 的大小 + + + + +【字段含义】每一路子画面的位置信息 + + + + +【字段含义】最终转码后的音频声道数 +【推荐取值】默认值:1。取值范围为 [1,2] 中的整型。 + + + +【字段含义】最终转码后的音频码率。 +【推荐取值】默认值:64kbps,取值范围是 [32,192]。 + + + +【字段含义】最终转码后的音频采样率。 +【推荐取值】默认值:48000Hz。支持12000HZ、16000HZ、22050HZ、24000HZ、32000HZ、44100HZ、48000HZ。 + + + +【字段含义】混流背景颜色,格式为 0xRRGGBB。 +【推荐取值】默认值:0x000000,黑色。 + + + +【字段含义】最终转码后的视频分辨率的关键帧间隔(又称为 GOP),单位秒 +【推荐取值】默认值:2,单位为秒,取值范围是 [1,8]。 + + + +【字段含义】最终转码后的视频分辨率的帧率(FPS) +【推荐取值】默认值:15fps,取值范围是 (0,30]。 + + + +【字段含义】最终转码后的视频分辨率的码率(kbps) +【推荐取值】如果填0,后台会根据videoWidth和videoHeight来估算码率,您也可以参考枚举定义TRTCVideoResolution_640_480的注释。 + + + +【字段含义】最终转码后的视频分辨率的高度(px) +【推荐取值】推荐值:640px ,如果你是纯音频推流,请将 width × height 设为 0px × 0px,否则混流后会携带一条画布背景的视频流。 + + + +【字段含义】最终转码后的视频分辨率的宽度(px) +【推荐取值】推荐值:360px ,如果你是纯音频推流,请将 width × height 设为 0px × 0px,否则混流后会携带一条画布背景的视频流。 + + + +【字段含义】腾讯云直播 bizid +【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】后,在“直播信息”中获取 + + + +【字段含义】腾讯云直播 AppID +【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】后,在“直播信息”中获取 + + + +【字段含义】转码 config 模式 + + + + +6.11 云端混流(转码)配置 + +包括最终编码质量和各路画面的摆放位置 + + + +6.10 混流参数配置模式 + +目前暂仅支持手动配置这一种模式,即需要指定 TRTCTranscodingConfig 的全部参数。 + + + + 屏幕分享模式,适用于在线教育场景等以屏幕分享为主的应用场景,仅支持 Windows 和 Mac 两个平台的 SDK。 + SDK 会先根据您(通过 videoWidth 和 videoHeight 参数)设置的目标分辨率构建一张画布, + 当老师未开启屏幕分享时,SDK 会将摄像头画面等比例拉伸绘制到该画布上;当老师开启屏幕分享之后,SDK 会将屏幕分享画面绘制到同样的画布上。 + 这样操作的目的是为了确保混流模块的输出分辨率一致,避免课程回放和网页观看的花屏问题(网页播放器不支持可变分辨率)。 + 由于教学模式下的视频内容以屏幕分享为主,因此同时传输摄像头画面和屏幕分享画面是非常浪费带宽的。 + 推荐的做法是直接将摄像头画面通过 setLocalVideoRenderCallback 接口自定义绘制到当前屏幕上。 + 在该模式下,您无需设置 TRTCTranscodingConfig 中的 mixUsers 参数,SDK 不会混合学生的画面,以免干扰屏幕分享的效果。 + 您可以将 TRTCTranscodingConfig 中的 width × height 设为 0px × 0px,SDK 会自动根据用户当前屏幕的宽高比计算出一个合适的分辨率: + - 如果老师当前屏幕宽度 <= 1920px,SDK 会使用老师当前屏幕的实际分辨率。 + - 如果老师当前屏幕宽度 > 1920px,SDK 会根据当前屏幕宽高比,选择 1920x1080(16:9)、1920x1200(16:10)、1920x1440(4:3) 三种分辨率中的一种。 + + + + + 预排版模式,通过占位符提前对各路画面进行排布 + 此模式下,您依然需要设置 mixUsers 参数,但可以将 userId 设置为占位符,可选的占位符有: + - "$PLACE_HOLDER_REMOTE$" : 指代远程用户的画面,可以设置多个。 + - "$PLACE_HOLDER_LOCAL_MAIN$" : 指代本地摄像头画面,只允许设置一个。 + - "$PLACE_HOLDER_LOCAL_SUB$" : 指代本地屏幕分享画面,只允许设置一个。 + 但是您可以不需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调进行实时调整, + 只需要在进房成功后调用一次 setMixTranscodingConfig() 即可,之后 SDK 会自动将真实的 userId 补位到您设置的占位符上。 + + + + + 纯音频模式,适用于语音通话(AudioCall)和语音聊天室(VoiceChatRoom)等纯音频场景。 + 只需要在进房后通过 setMixTranscodingConfig() 接口设置一次,之后 SDK 就会自动把房间内所有上麦用户的声音混流到当前用户的直播流上。 + 此模式下,您无需设置 TRTCTranscodingConfig 中的 mixUsers 参数,只需设置 audioSampleRate、audioBitrate 和 audioChannels 等参数。 + + + + + 全手动模式,灵活性最高,可以自由组合出各种混流方案,但易用性最差。 + 此模式下,您需要填写 TRTCTranscodingConfig 中的所有参数,并需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调, + 以便根据当前房间中各个上麦用户的音视频状态不断地调整 mixUsers 参数,否则会导致混流失败。 + + + + +非法值 + + + + +参与混合的是主路画面(TRTCVideoStreamTypeBig)或屏幕分享(TRTCVideoStreamTypeSub)画面 + + + + +是否纯音频 + + + + +图层层次(1 - 15)不可重复 + + + + +图层位置坐标以及大小,左上角为坐标原点(0,0) (绝对像素值) + + + + +参与混流的 roomId,跨房流传入的实际 roomId,当前房间流传入 roomId = NULL + + + + +参与混流的 userId + + + + +6.9 云端混流中每一路子画面的位置信息 + +TRTCMixUser 用于指定每一路(即每一个 userId)视频画面的具体摆放位置 + + + +下坐标点 + + + + +右坐标点 + + + + +上坐标点 + + + + +左坐标点 + + + + +记录矩形的四个点坐标 +为了兼容 c++ 使用的 RECT 类型 + + + +延迟(毫秒),指当前设备到腾讯云服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms + + + + +下行丢包率,范围是0 - 1.0,例如,0.2表示每从服务器收取10个数据包可能会在中途丢失2个。 + + + + +上行丢包率,范围是0 - 1.0,例如,0.3表示每向服务器发送10个数据包可能会在中途丢失3个。 + + + + +网络质量,内部通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分便越高 + + + + +服务器 IP 地址 + + + + +6.8 网络测速结果 + +您可以在用户进入房间前通过 TRTCCloud 的 startSpeedTest 接口进行测速 (注意:请不要在通话中调用), +测速结果会每2 - 3秒钟返回一次,每次返回一个 IP 地址的测试结果。 + + +- quality 是内部通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分便越高。 +- upLostRate 是指上行丢包率。例如,0.3表示每向服务器发送10个数据包可能会在中途丢失3个。- downLostRate 是指下行丢包率。例如,0.2表示每从服务器收取10个数据包可能会在中途丢失2个。- rtt 是指当前设备到腾讯云服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms。 + + + +时间戳,单位ms + + + + +声道数 + + + + +采样率 + + + + +音频数据的长度 + + + + +音频数据 + + + + +音频帧的格式 + + + + +6.7 音频帧数据 + + + + +画面旋转角度 + + + + +时间戳,单位ms + + + + +画面的高度 + + + + +画面的宽度 + + + + +视频数据的长度,单位是字节,对于i420而言, length = width * height * 3 / 2,对于BGRA32而言, length = width * height * 4 + + + + +视频纹理ID,字段bufferType是LiteAVVideoBufferType_Texture时生效 + + + + +视频数据,字段bufferType是LiteAVVideoBufferType_Buffer时生效 + + + + +视频数据结构类型 + + + + +视频帧的格式 + + + + +6.6 视频帧数据 + + + + +说话者的音量, 取值范围0 - 100 + + + + +说话者的 userId,字符编码格式为 UTF-8 + + + + +6.5 音量大小 + +表示语音音量的评估大小,通过这个数值,您可以在 UI 界面上用图标表征 userId 是否有在说话。 + + + +视频质量 + + + + +用户标识 + + + + +6.4 视频质量 + +表示视频质量的好坏,通过这个数值,您可以在 UI 界面上用图标表征 userId 的通话线路质量 + + + +【字段含义】视频分辨率(云端控制 - 客户端控制) +【推荐取值】云端控制【特别说明】 - Server 模式(默认):云端控制模式,若无特殊原因,请直接使用该模式 - Client 模式:客户端控制模式,用于 SDK 开发内部调试,客户请勿使用 + + + +【字段含义】弱网下是“保清晰”或“保流畅” +【特别说明】 - 弱网下保流畅:在遭遇弱网环境时,画面会变得模糊,且出现较多马赛克,但可以保持流畅不卡顿 - 弱网下保清晰:在遭遇弱网环境时,画面会尽可能保持清晰,但可能容易出现卡顿 + + + +6.3 网络流控相关参数 + +网络流控相关参数,该设置决定了SDK在各种网络环境下的调控方向(例如弱网下是“保清晰”或“保流畅”) + + + +【字段含义】是否允许调整分辨率 +【推荐取值】 - 手机直播建议选择 NO。 - 视频通话模式,若更关注流畅性,建议选择 YES,此时若遇到带宽有限的弱网,SDK 会自动降低分辨率以保障更好的流畅度(仅针对 TRTCVideoStreamTypeBig 生效)。 - 默认值:NO。【特别说明】若有录制需求,选择 YES 时,请确保通话过程中,调整分辨率不会影响您的录制效果。 + + + +【字段含义】最低视频码率,SDK 会在网络不佳的情况下主动降低视频码率,最低会降至 minVideoBitrate 所设定的数值。 +【推荐取值】 - 如果您追求“允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 60%; - 如果您追求“允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为 200kbps; - 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK 的自适应调节能力; - 默认值:0,此时最低码率由 SDK 根据分辨率情况,自动设置合适的数值。【特别说明】 - 当您把分辨率设置的比较高时,minVideoBitrate 不适合设置的太低,否则会出现画面模糊和大范围的马赛克宏块。 比如把分辨率设置为 720p,把码率设置为 200kbps,那么编码出的画面将会出现大范围区域性马赛克。 + + + +【字段含义】目标视频码率,SDK 会按照目标码率进行编码,只有在网络不佳的情况下才会主动降低视频码率。 +【推荐取值】请参考本 TRTCVideoResolution 在各档位注释的最佳码率,也可以在此基础上适当调高。 比如 TRTCVideoResolution_1280_720 对应 1200kbps 的目标码率,您也可以设置为 1500kbps 用来获得更好的清晰度观感。【特别说明】SDK 会努力按照 videoBitrate 指定的码率进行编码,只有在网络不佳的情况下才会主动降低视频码率,最低会降至 minVideoBitrate 所设定的数值。 如果您追求“允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 60%; 如果您追求“允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为 200kbps; 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK 的自适应调节能力。 + + + +【字段含义】视频采集帧率 +【推荐取值】15fps 或 20fps。5fps以下,卡顿感明显。10fps以下,会有轻微卡顿感。20fps以上,则过于浪费(电影的帧率为24fps)。【特别说明】很多 Android 手机的前置摄像头并不支持15fps以上的采集帧率,部分过于突出美颜功能的 Android 手机前置摄像头的采集帧率可能低于10fps。 + + + +【字段含义】分辨率模式(横屏分辨率 - 竖屏分辨率) +【推荐取值】手机直播建议选择 Portrait,Window 和 Mac 建议选择 Landscape。【特别说明】如果 videoResolution 指定分辨率 640 × 360,resMode 指定模式为 Portrait,则最终编码出的分辨率为360 × 640。 + + + +【字段含义】 视频分辨率 +【推荐取值】 - 视频通话建议选择360 × 640及以下分辨率,resMode 选择 Portrait。 - 手机直播建议选择540 × 960,resMode 选择 Portrait。 - Window 和 iMac 建议选择640 × 360 及以上分辨率,resMode 选择 Landscape。【特别说明】 TRTCVideoResolution 默认只有横屏模式的分辨率,例如640 × 360。 如需使用竖屏分辨率,请指定 resMode 为 Portrait,例如640 × 360结合 Portrait 则为360 × 640。 + + + +6.2 视频编码参数 + +该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量)。 + + + +【字段含义】业务数据 [非必填],部分高级特性才需要使用该字段。 +【推荐取值】不建议使用 + + + +【字段含义】房间签名 [非必填],当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。 +【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。 + + + +【字段含义】设置云端录制完成后的回调消息中的 "userdefinerecordid" 字段内容,便于您更方便的识别录制回调。 +【推荐取值】限制长度为64字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。【参考文档】[云端录制](https://cloud.tencent.com/document/product/647/16823)。 + + + +【字段含义】绑定腾讯云直播 CDN 流 ID[非必填],设置之后,您就可以在腾讯云直播 CDN 上通过标准直播方案(FLV或HLS)播放该用户的音视频流。 +【推荐取值】限制长度为64字节,可以不填写,一种推荐的方案是使用 “sdkappid_roomid_userid_main” 作为 streamid,这样比较好辨认且不会在您的多个应用中发生冲突。【特殊说明】要使用腾讯云直播 CDN,您需要先在[控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启“启用旁路推流”开关。【参考文档】[CDN 旁路直播](https://cloud.tencent.com/document/product/647/16826)。 + + + +【字段含义】直播场景下的角色,仅适用于直播场景(TRTCAppSceneLIVE),视频通话场景下指定无效。 +【推荐取值】默认值:主播(TRTCRoleAnchor) + + + +【字段含义】房间号码 [必填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【推荐取值】您可以自定义设置该参数值,但不可重复。如果您的用户帐号 ID (userId)为数字类型,可直接使用创建者的用户 ID 作为 roomId。 + + + +【字段含义】用户签名 [必填],当前 userId 对应的验证签名,相当于登录密码。 +【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。 + + + +【字段含义】用户标识 [必填],当前用户的 userId,相当于用户名,使用 UTF-8 编码。 +【推荐取值】如果一个用户在您的帐号系统中的 ID 为“abc”,则 userId 即可设置为“abc”。 + + + +【字段含义】应用标识 [必填],腾讯视频云基于 sdkAppId 进行计费统计。 +在 [实时音视频控制台](https://console.cloud.tencent.com/rav/) 创建应用后可在帐号信息页面中得到该 ID。 + + + +6.1 进房相关参数 + +只有该参数填写正确,才能顺利调用 enterRoom 进入 roomId 所指定的音视频房间。 + + + +遍历完窗口列表后,调用release释放资源。 + + + + 窗口信息 + + + 窗口个数 + + + +5.6 屏幕窗口列表 + + + + +指定高亮边框的宽度,传入0时采用默认描边宽度,默认宽度为 5,最大值为 50 + + + + +指定高亮边框颜色,RGB格式,传入0时采用默认颜色,默认颜色为 #8CBF26 + + + + +是否开启高性能模式(只会在分享屏幕时会生效),开启后屏幕采集性能最佳,但无法过滤远端的高亮边框,默认为 true + + + + +是否高亮正在共享的窗口,默认为 true + + + + +是否采集目标内容时顺带采集鼠标,默认为 true + + + + +5.5 屏幕采集属性 + + + + +高 + + + + +宽 + + + + +5.4 记录 buffer 的长宽 +为了兼容 c++ 使用的 SIZE 类型 + + + +图标内容 + + + + +缩略图内容 + + + + +采集源名称,UTF8编码 + + + + +采集源ID;对于窗口,该字段指示窗口句柄;对于屏幕,该字段指示屏幕ID + + + + +采集源类型 + + + + +5.3 屏幕采集信息 + + + + +图高 + + + + +图宽 + + + + +图缓存大小 + + + + +图内容 + + + + +5.2 图缓存 + + + + +5.1 屏幕分享目标信息 + +您可以通过 getScreenCaptureSources() 枚举可共享的窗口列表,列表通过 ITRTCScreenCaptureSourceList 返回 + + + +该分享目标是整个Windows桌面 + + + + +该分享目标是某一个Windows窗口 + + + + +4.3 水印图片的源类型 + + + + +RGBA32格式内存块 + + + + +BGRA32格式内存块 + + + + +图片文件路径,支持 BMP、GIF、JPEG、PNG、TIFF、Exif、WMF 和 EMF 文件格式 + + + + +4.2 设备操作 + + + + +设备已启用 + + + + +移除设备 + + + + +添加设备 + + + + +4.1 Log 级别 + + + + +不输出任何 SDK Log + + + + +只输出 FATAL 级别的 Log + + + + +只输出ERROR 和 FATAL 级别的 Log + + + + +只输出 WARNING,ERROR 和 FATAL 级别的 Log + + + + +输出 INFO,WARNING,ERROR 和 FATAL 级别的 Log + + + + +输出 DEBUG,INFO,WARNING,ERROR 和 FATAL 级别的 Log + + + + +输出所有级别的 Log + + + + +3.2 声音音质 + + +音频音质用来衡量声音的保真程度,TRTCAudioQualitySpeech 适用于通话场景,TRTCAudioQualityMusic 适用于高音质音乐场景。 + + + + +高音质:采样率:48k;双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。 + + + + +默认音质:采样率:48k;单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。 + + + + +流畅音质:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。 + + + + +3.1 音频帧的格式 + + + + +PCM,每个采样点占16bit数据量。 + + + + +2.4 画质偏好 + +指当 TRTC SDK 在遇到弱网络环境时,您期望“保清晰”或“保流畅”:- Smooth:弱网下保流畅。即在遭遇弱网环境时首先确保声音的流畅和优先发送,画面会变得模糊且会有较多马赛克,但可以保持流畅不卡顿。- Clear:弱网下保清晰。即在遭遇弱网环境时,画面会尽可能保持清晰,但可能会更容易出现卡顿。 + + + +弱网下保清晰 + + + + +弱网下保流畅 + + + + +2.3 流控模式 + +TRTC SDK 内部需要时刻根据网络情况调整内部的编解码器和网络模块,以便能够对网络的变化做出反应。为了支持快速算法升级,SDK 内部设置了两种不同的流控模式:- ModeServer: 云端控制,默认模式,推荐选择。- ModeClient: 本地控制,用于 SDK 开发内部调试,客户请勿使用。 + +推荐您使用云端控制,这样每当我们升级 Qos 算法时,您无需升级 SDK 即可体验更好的效果。 + + + + +云端控制 (默认) + + + + +客户端控制(用于 SDK 开发内部调试,客户请勿使用) + + + + +2.2 角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom) + +在直播场景中,多数用户仅为观众,个别用户是主播,这种角色区分有利于 TRTC 进行更好的定向优化。- Anchor:主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。- Audience:观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。 + + + +观众 + + + + +主播 + + + + +2.1 应用场景 + +TRTC 可用于视频会议和在线直播等多种应用场景,针对不同的应用场景,TRTC SDK 的内部会进行不同的优化配置:- TRTCAppSceneVideoCall :视频通话场景,适合[1对1视频通话]、[300人视频会议]、[在线问诊]、[视频聊天]、[远程面试]等。- TRTCAppSceneLIVE :视频互动直播,适合[视频低延时直播]、[十万人互动课堂]、[视频直播 PK]、[视频相亲房]、[互动课堂]、[远程培训]、[超大型会议]等。- TRTCAppSceneAudioCall :语音通话场景,适合[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等。- TRTCAppSceneVoiceChatRoom:语音互动直播,适合:[语音低延时直播]、[语音直播连麦]、[语聊房]、[K 歌房]、[FM 电台]等。 + + + +语音互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。 +适合:[语音低延时直播]、[语音直播连麦]、[语聊房]、[K 歌房]、[FM 电台]等。注意:此场景下,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。 + + + +语音通话场景,支持 48kHz,支持双声道。单个房间最多支持300人同时在线,最高支持50人同时发言。 +适合:[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等。 + + + +视频互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。 +适合:[视频低延时直播]、[十万人互动课堂]、[视频直播 PK]、[视频相亲房]、[互动课堂]、[远程培训]、[超大型会议]等。注意:此场景下,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。 + + + +视频通话场景,支持720P、1080P高清画质,单个房间最多支持300人同时在线,最高支持50人同时发言。 +适合:[1对1视频通话]、[300人视频会议]、[在线问诊]、[视频聊天]、[远程面试]等。 + + + +1.10 画面渲染镜像类型 + +TRTC 的画面镜像提供下列设置模式 + + + +所有画面均不镜像 + + + + +所有画面均镜像 + + + + +1.9 视频数据包装格式 + + + + +纹理类型 + + + + +二进制Buffer类型 + + + + +未知类型 + + + + +1.8 视频像素格式 + +TRTC SDK 提供针对视频的自定义采集和自定义渲染功能,在自定义采集功能中,您可以用下列枚举值描述您采集的视频像素格式。在自定义渲染功能中,您可以指定您期望 SDK 回调的视频像素格式。 + + + +BGRA32 + + + + +OpenGL 2D 纹理 + + + + +I420 + + + + +未知类型 + + + + +1.7 美颜(磨皮)算法 + +TRTC SDK 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案。 + + + +自然,磨皮算法更多地保留了面部细节,主观感受上会更加自然。 + + + + +光滑,适用于美女秀场,效果比较明显。 + + + + +1.6 视频画面旋转方向 + +TRTC SDK 提供了对本地和远程画面的旋转角度设置 API,下列的旋转角度都是指顺时针方向的。 + + + +顺时针旋转270度 + + + + +顺时针旋转180度 + + + + +顺时针旋转90度 + + + + +顺时针旋转0度 + + + + +1.5 视频画面填充模式 + +如果画面的显示分辨率不等于画面的原始分辨率,就需要您设置画面的填充模式:- TRTCVideoFillMode_Fill,超出显示视窗的视频部分将被裁剪,画面显示可能不完整。- TRTCVideoFillMode_Fit,图像长边填满屏幕,短边区域会被填充黑色,但画面的内容肯定是完整的。 + + + +图像长边填满屏幕,短边区域会被填充黑色 + + + + +图像铺满屏幕,超出显示视窗的视频部分将被裁剪 + + + + +1.4 画质级别 + +TRTC SDK 对画质定义了六种不同的级别,Excellent 表示最好,Down 表示不可用。 + + + +不可用 + + + + +很差 + + + + +差 + + + + +一般 + + + + +好 + + + + +最好 + + + + +未定义 + + + + +1.3 视频流类型 + +TRTC 内部有三种不同的音视频流,分别为:-主画面:最常用的一条线路,一般用来传输摄像头的视频数据。-小画面:跟主画面的内容相同,但是分辨率和码率更低。-辅流画面:一般用于屏幕分享或远程播片(例如老师播放视频给学生观看)。 + +- 如果主播的上行网络和性能比较好,则可以同时送出大小两路画面。 +- SDK 不支持单独开启小画面,小画面必须依附于主画面而存在。 + + + +辅流(屏幕分享) + + + + +小画面视频流 + + + + +主画面视频流 + + + + +1.2 视频分辨率模式 + +- 横屏分辨率:TRTCVideoResolution_640_360 + TRTCVideoResolutionModeLandscape = 640 × 360- 竖屏分辨率:TRTCVideoResolution_640_360 + TRTCVideoResolutionModePortrait = 360 × 640 + + + +竖屏分辨率 + + + + +横屏分辨率 + + + +@defgroup TRTCCloudDef_csharp 关键类型定义 +腾讯云视频通话功能的关键类型定义 +@{ + +1.1 视频分辨率 + +此处仅定义横屏分辨率,如需使用竖屏分辨率(例如360 × 640),需要同时指定 TRTCVideoResolutionMode 为 Portrait。 + + + +屏幕分享 - 建议码率2000kbps + + + + +摄像头采集 - 建议码率1200kbps +屏幕分享 - 建议码率 低清:1000kbps 高清:1600kbps + + + +建议码率850kbps + + + + +建议码率550kbps + + + + +建议码率350kbps + + + + +建议码率250kbps + + + + +建议码率200kbps + + + + +建议码率150kbps + + + + +建议码率1000kbps + + + + +建议码率600kbps + + + + +建议码率400kbps + + + + +建议码率300kbps + + + + +建议码率250kbps + + + + +建议码率200kbps + + + + +建议码率150kbps + + + + +建议码率100kbps + + + + +建议码率350kbps + + + + +建议码率200kbps + + + + +建议码率100kbps + + + + +建议码率80kbps + + + + +停止扬声器测试 + + 0:操作成功 负数:失败 + + + +开始扬声器测试 +该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。 + 声音文件的路径 + 0:操作成功 负数:失败 + + + +结束麦克风测试 + + 0:操作成功 负数:失败 + + + +开始麦克风测试 + + 音量回调间隔 + 0:操作成功 负数:失败 + + + +结束摄像头测试 + + 0:操作成功 负数:失败 + + + +开始摄像头测试 + + 预览控件所在的父控件 + 0:操作成功 负数:失败 + 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + + + +查询当前设备是否静音 + + 设备类型,根据设备类型获取当前设备状态。详见TRTCDeviceType定义。 + true : 当前设备已静音;false : 当前设备未静音 + type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker + + + +设置当前设备是否静音 + + 设备类型,根据设备类型设置当前设备状态。详见TRTCDeviceType定义。 + 是否静音/禁画 + 0:操作成功 负数:失败 + type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker + + + +获取当前设备的音量 + + 设备类型,根据设备类型获取当前设备音量。详见TRTCDeviceType定义。 + type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker + + + +设置当前设备的音量 + + 设备类型,根据设备类型获取当前设备音量。详见TRTCDeviceType定义。 + 音量大小 + 0:操作成功 负数:失败 + type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker + + + +获取当前使用的设备 + + 设备类型,根据设备类型获取当前设备信息。详见 TRTCDeviceType 定义 + ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + +指定当前设备 + + 设备类型,根据设备类型指定当前设备。详见 TRTCDeviceType 定义。 + 从 getDevicesList 中得到的设备 ID + 0:操作成功 负数:失败 + +type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker、TRTCDeviceTypeCamera + + + + +获取设备列表 + + 设备类型,指定需要获取哪种设备的列表。详见TRTCDeviceType定义。 + +- 如果 delete ITXDeviceCollection* 指针会编译错误,SDK 维护 ITXDeviceCollection 对象的生命周期。 +- type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker、TRTCDeviceTypeCamera + + + + +获取完设备信息后,调用release释放资源。 + + + + 设备PID,字符编码格式是UTF-8 + + + 设备名称,字符编码格式是UTF-8 + + + +设备Item信息 +【获取SDK当前使用设备信息 ITRTCDeviceInfo】您可以通过 setCurrentCameraDevice()/getCurrentMicDevice()/getCurrentSpeakerDevice +获取当前使用设备。 + + + +遍历完设备后,调用release释放资源。 + + + + 设备PID,字符编码格式是UTF-8 + + + 设备名称,字符编码格式是UTF-8 + + + 设备个数 + + + +设备列表 +【获取SDK设备信息接口 ITRTCDeviceCollection】您可以通过 getMicDevicesList()/getSpeakerDevicesList()/getMicDevicesList +枚举硬件设备列表,列表通过 ITRTCDeviceCollection 返回 + + +@defgroup ITXDeviceManager_csharp ITXDeviceManager +腾讯云视频通话功能的设备管理接口类 +@{ + +设备类型 + + + +摄像头 + + + + +扬声器 + + + + +麦克风 + + + + +未知设备 + + + + 12.8 调用实验性 API 接口 + + @note 该接口用于调用一些实验性功能 + @param jsonStr 接口及参数描述的 JSON 字符串 + + + + 12.7 显示仪表盘 + + 仪表盘是状态统计和事件消息浮层 view,方便调试。 + + @param showType 0:不显示;1:显示精简版;2:显示全量版,默认为不显示 + + + + 12.6 设置日志回调 + + @param callback 日志回调 + + + + 12.5 设置日志保存路径 + + @note 日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/Tencent/liteav/log,即 %appdata%/Tencent/liteav/log 下,如需修改,必须在所有方法前调用。 + @param path 存储日志的文件夹,例如 "D:\\Log",UTF-8 编码 + + + + 12.4 启用或禁用 Log 的本地压缩 + + 开启压缩后,Log 存储体积明显减小,但需要腾讯云提供的 Python 脚本解压后才能阅读。 + 禁用压缩后,Log 采用明文存储,可以直接用记事本打开阅读,但占用空间较大。 + + @param enabled 指定是否启用,默认为禁止状态 + + + + 12.3 启用或禁用控制台日志打印 + + @param enabled 指定是否启用,默认为禁止状态 + + + + 12.2 设置 Log 输出级别 + + @param level 参见 TRTCLogLevel,默认值:TRTCLogLevelNone + + + +@} +@name LOG 相关接口函数 +@{ + 12.1 获取 SDK 版本信息 + + @return UTF-8 编码的版本号。 + + + +11.2 停止网络测速 + + + +@} +@name 设备和网络测试 +@{ + 11.1 开始进行网络测速(视频通话期间请勿测试,以免影响通话质量) + + 测速结果将会用于优化 SDK 接下来的服务器选择策略,因此推荐您在用户首次通话前先进行一次测速,这将有助于我们选择最佳的服务器。 + 同时,如果测试结果非常不理想,您可以通过醒目的 UI 提示用户选择更好的网络。 + + @note 测速本身会消耗一定的流量,所以也会产生少量额外的流量费用。 + + @param sdkAppId 应用标识 + @param userId 用户标识 + @param userSig 用户签名 + + + + 10.2 将小数据量的自定义数据嵌入视频帧中 + + 跟 sendCustomCmdMsg 的原理不同,sendSEIMsg 是将数据直接塞入视频数据头中。因此,即使视频帧被旁路到了直播 CDN 上, + 这些数据也会一直存在。但是由于要把数据嵌入视频帧中,所以数据本身不能太大,推荐几个字节就好。 + + 最常见的用法是把自定义的时间戳(timstamp)用 sendSEIMsg 嵌入视频帧中,这种方案的最大好处就是可以实现消息和画面的完美对齐。 + + @param data 待发送的数据,最大支持1kb(1000字节)的数据大小 + @param dataSize 待发送的数据大小 + @param repeatCount 发送数据次数 + @return true:消息已通过限制,等待后续视频帧发送;false:消息被限制发送 + + @note 本接口有以下限制: + - 数据在接口调用完后不会被即时发送出去,而是从下一帧视频帧开始带在视频帧中发送。 + - 发送消息到房间内所有用户,每秒最多能发送30条消息(与 sendCustomCmdMsg 共享限制)。 + - 每个包最大为1KB,若发送大量数据,会导致视频码率增大,可能导致视频画质下降甚至卡顿(与 sendCustomCmdMsg 共享限制)。 + - 每个客户端每秒最多能发送总计8KB数据(与 sendCustomCmdMsg 共享限制)。 + - 若指定多次发送(repeatCount>1),则数据会被带在后续的连续 repeatCount 个视频帧中发送出去,同样会导致视频码率增大。 + - 如果 repeatCount>1,多次发送,接收消息 onRecvSEIMsg 回调也可能会收到多次相同的消息,需要去重。 + + + +@} +@name 自定义消息发送 +@{ + 10.1 发送自定义消息给房间内所有用户 + + 该接口可以借助音视频数据通道向当前房间里的其他用户广播您自定义的数据,但因为复用了音视频数据通道, + 请务必严格控制自定义消息的发送频率和消息体的大小,否则会影响音视频数据的质量控制逻辑,造成不确定性的问题。 + + @param cmdId 消息 ID,取值范围为1 - 10 + @param data 待发送的消息,最大支持1KB(1000字节)的数据大小 + @param dataSize 待发送的数据大小 + @param reliable 是否可靠发送,可靠发送的代价是会引入一定的延时,因为接收端要暂存一段时间的数据来等待重传 + @param ordered 是否要求有序,即是否要求接收端接收的数据顺序和发送端发送的顺序一致,这会带来一定的接收延时,因为在接收端需要暂存并排序这些消息 + @return true:消息已经发出;false:消息发送失败 + + @note 本接口有以下限制: + - 发送消息到房间内所有用户(暂时不支持 Web/小程序端),每秒最多能发送30条消息。 + - 每个包最大为1KB,超过则很有可能会被中间路由器或者服务器丢弃。 + - 每个客户端每秒最多能发送总计8KB数据。 + - 将 reliable 和 ordered 同时设置为 true 或 false,暂不支持交叉设置。 + - 强烈建议不同类型的消息使用不同的 cmdID,这样可以在要求有序的情况下减小消息时延。 + + + + 9.4 向 SDK 投送自己采集的音频数据 + + TRTCAudioFrame 推荐如下填写方式(其他字段不需要填写): + - audioFormat:仅支持 TRTCAudioFrameFormatPCM。 + - data:音频帧 buffer。 + - length:音频帧数据长度,推荐每帧20ms采样数。【PCM格式、48000采样率、单声道的帧长度:48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。 + - sampleRate:采样率,仅支持48000。 + - channel:频道数量(如果是立体声,数据是交叉的),单声道:1; 双声道:2。 + - timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。 + + 参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。 + + @param frame 音频帧,仅支持 TRTCAudioFrameFormatPCM 格式。目前只支持单声道,仅支持48K采样率,TRTCAudioFrameFormatPCM 格式。 + @note 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomAudioData 的调用间隔,否则会导致声音断断续续。 + + + + 9.3 启用音频自定义采集模式 + 开启该模式后,SDK 停止运行原有的音频采集流程,只保留编码和发送能力。 + 您需要用 sendCustomAudioData() 不断地向 SDK 塞入自己采集的音频数据。 + + @param enable 是否启用,默认值:false + + + + 9.2 向 SDK 投送自己采集的视频数据 + + TRTCVideoFrame 推荐如下填写方式(其他字段不需要填写): + - pixelFormat: Windows、Android平台仅支持 TRTCVideoPixelFormat_I420,iOS、Mac平台支持TRTCVideoPixelFormat_I420和TRTCVideoPixelFormat_BGRA32 + - bufferType:仅支持 TRTCVideoBufferType_Buffer。 + - data:视频帧 buffer。 + - length:视频帧数据长度,I420 格式下,其值等于:width × height × 3 / 2。 + - width:视频图像长度。 + - height:视频图像宽度。 + - timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。 + + 参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。 + + @param frame 视频数据,支持 I420 格式数据。 + @note - SDK 内部有帧率控制逻辑,目标帧率以您在 setVideoEncoderParam 中设置的为准,太快会自动丢帧,太慢则会自动补帧。 + - 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomVideoData 的调用间隔,否则会导致视频帧率不稳定。 + - iOS、Mac平台目前仅支持传入TRTCVideoPixelFormat_I420或TRTCVideoPixelFormat_BGRA32格式的视频帧 + - Windows、Android平台目前仅支持传入TRTCVideoPixelFormat_I420格式的视频帧 + + + +@} +@name 自定义采集和渲染 +@{ + 9.1 启用视频自定义采集模式 + + 开启该模式后,SDK 不在运行原有的视频采集流程,只保留编码和发送能力。 + 您需要用 sendCustomVideoData() 不断地向 SDK 塞入自己采集的视频画面。 + + @param enable 是否启用,默认值:false + + + +8.11 将所有窗口从屏幕分享的排除列表中移除 + + + + 8.10 将指定窗口从屏幕分享的排除列表中移除 + + @param window 不希望分享出去的窗口 + + + + 8.9 将指定窗口加入屏幕分享的排除列表中,加入排除列表中的窗口不会被分享出去 + + 支持启动屏幕分享前设置过滤窗口,也支持屏幕分享过程中动态添加过滤窗口。 + + @param window 不希望分享出去的窗口 + + + +8.8 设置屏幕分享的混音音量大小 + + 这个数值越高,屏幕分享音量的占比就越高,麦克风音量占比就越小,所以不推荐设置得太大,否则麦克风的声音就被压制了。 + + @param volume 设置的混音音量大小,范围0 - 100 + + + + 8.7 设置屏幕分享的编码器参数 + - setVideoEncoderParam() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的编码参数。 + - setSubStreamEncoderParam() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的编码参数。 + 该设置决定远端用户看到的画面质量,同时也是云端录制出的视频文件的画面质量。 + + @param params 辅流编码参数,详情请参考 TRTCTypeDef.h 中的 TRTCVideoEncParam 定义 + @note 即使使用主路传输屏幕分享的数据(在调用 startScreenCapture 时设置 type=TRTCVideoStreamTypeBig),依然要使用此接口更新屏幕分享的编码参数。 + + + + 8.6 设置屏幕分享参数,该方法在屏幕分享过程中也可以调用 + + 如果您期望在屏幕分享的过程中,切换想要分享的窗口,可以再次调用这个函数而不需要重新开启屏幕分享。 + + 支持如下四种情况: + - 共享整个屏幕:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为 { 0, 0, 0, 0 } + - 共享指定区域:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为非 nullptr,例如 { 100, 100, 300, 300 } + - 共享整个窗口:sourceInfoList 中 type 为 Window 的 source,captureRect 设为 { 0, 0, 0, 0 } + - 共享窗口区域:sourceInfoList 中 type 为 Window 的 source,captureRect 设为非 nullptr,例如 { 100, 100, 300, 300 } + + + @param source 指定分享源 + @param captureRect 指定捕获的区域 + @param property 指定屏幕分享目标的属性,包括捕获鼠标,高亮捕获窗口等,详情参考TRTCScreenCaptureProperty 定义 + @note 设置高亮边框颜色、宽度参数在Mac平台不生效 + + + + + 8.5 枚举可分享的屏幕窗口,建议在 startScreenCapture 之前调用 + + 如果您要给您的 App 增加屏幕分享功能,一般需要先显示一个窗口选择界面,这样用户可以选择希望分享的窗口。 + 通过如下函数,您可以获得可分享窗口的 ID、类型、窗口名称以及缩略图。 + 拿到这些信息后,您就可以实现一个窗口选择界面,当然,您也可以使用我们在 Demo 源码中已经实现好的一个界面。 + + @note 返回的列表中包括屏幕和应用窗口,屏幕会在列表的前面几个元素中。 + @note 如果 delete ITRTCScreenCaptureSourceList*指针会编译错误,SDK 维护 ITRTCScreenCaptureSourceList 对象的生命周期。 + + @param thumbSize 指定要获取的窗口缩略图大小,缩略图可用于绘制在窗口选择界面上 + @param iconSize 指定要获取的窗口图标大小 + + @return 窗口列表包括屏幕 + + + +8.4 恢复屏幕分享 + + + +8.3 暂停屏幕分享 + + + +8.2 停止屏幕采集 + + + +@} +@name 屏幕分享相关接口函数 +@{ + 8.1 启动屏幕分享 + + @param rendView 承载预览画面的控件,可以设置为 nullptr,表示不显示屏幕分享的预览效果。 + @param type 屏幕分享使用的线路,可以设置为主路(TRTCVideoStreamTypeBig)或者辅路(TRTCVideoStreamTypeSub),默认使用辅路。 + @param params 屏幕分享的画面编码参数,可以设置为 nullptr,表示让 SDK 选择最佳的编码参数(分辨率、码率等)。 + + @note 一个用户同时最多只能上传一条主路(TRTCVideoStreamTypeBig)画面和一条辅路(TRTCVideoStreamTypeSub)画面, + 默认情况下,屏幕分享使用辅路画面,如果使用主路画面,建议您提前停止摄像头采集(stopLocalPreview)避免相互冲突。 + + + + 7.3 关闭系统声音采集。 + + 目前仅适用于Windows平台 + + + + + 7.2 打开系统声音采集 + + 开启后可以采集整个操作系统的播放声音(path 为空)或某一个播放器(path 不为空)的声音, + 并将其混入到当前麦克风采集的声音中一起发送到云端。 + + + @param path + - path 为空,代表采集整个操作系统的声音。 + - path 填写 exe 程序(如 QQ音乐)所在的路径,将会启动此程序并只采集此程序的声音。 + + @note 此接口目前仅适用于Windows平台 + + + +@} +@name 音乐特效和人声特效 +@{ + 7.1 获取音效管理类 ITXAudioEffectManager + + 该模块是整个 SDK 的音效管理模块,支持如下功能: + - 耳机耳返:麦克风捕捉的声音实时通过耳机播放。 + - 混响效果:KTV、小房间、大会堂、低沉、洪亮... + - 变声特效:萝莉、大叔、重金属、外国人... + - 背景音乐:支持在线音乐和本地音乐,支持变速、变调等特效、支持原生和伴奏并播放和循环播放。 + - 短音效:鼓掌声、欢笑声等简短的音效文件,对于小于10秒的文件,请将 isShortFile 参数设置为 YES。 + + + + 6.2 设置水印 + + 水印的位置是通过 xOffset, yOffset, fWidthRatio 来指定的。 + - xOffset:水印的坐标,取值范围为0 - 1的浮点数。 + - yOffset:水印的坐标,取值范围为0 - 1的浮点数。 + - fWidthRatio:水印的大小比例,取值范围为0 - 1的浮点数。 + + @param streamType 要设置水印的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub) + @param srcData 水印图片源数据(传 nullptr 表示去掉水印) + @param srcType 水印图片源数据类型(传 nullptr 时忽略该参数) + @param nWidth 水印图片像素宽度(源数据为文件路径时忽略该参数) + @param nHeight 水印图片像素高度(源数据为文件路径时忽略该参数) + @param xOffset 水印显示的左上角 x 轴偏移 + @param yOffset 水印显示的左上角 y 轴偏移 + @param fWidthRatio 水印显示的宽度占画面宽度比例(水印按该参数等比例缩放显示) + @note 只支持主路视频流 + + + +@} +@name 美颜特效和图像水印 +@{ + 6.1 设置美颜、美白、红润效果级别 + + SDK 内部集成了两套风格不同的磨皮算法,一套我们取名叫“光滑”,适用于美女秀场,效果比较明显。 + 另一套我们取名“自然”,磨皮算法更多地保留了面部细节,主观感受上会更加自然。 + + @param style 美颜风格,光滑或者自然,光滑风格磨皮更加明显,适合娱乐场景。 + @param beautyLevel 美颜级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显 + @param whitenessLevel 美白级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显 + @param ruddinessLevel 红润级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显,该参数暂未生效 + + + +@} +@name 设备相关接口函数 +@{ + 5.1 获取设备管理模块 + + @return ITXDeviceManager 设备管理类 + + + + 4.13 停止录音 + + 如果调用 exitRoom 时还在录音,录音会自动停止。 + + + + 4.12 开始录音 + + 该方法调用后, SDK 会将通话过程中的所有音频(包括本地音频,远端音频,BGM等)录制到一个文件里。 + 无论是否进房,调用该接口都生效。 + 如果调用 exitRoom 时还在录音,录音会自动停止。 + + @param audioRecordingParams 录音参数,请参考 TRTCAudioRecordingParams + @return 0:成功;-1:录音已开始;-2:文件或目录创建失败;-3:后缀指定的音频格式不支持 + + + + 4.11 启用或关闭音量大小提示 + + 开启此功能后,SDK 会在 onUserVoiceVolume() 中反馈对每一路声音音量大小值的评估。 + 我们在 Demo 中有一个音量大小的提示条,就是基于这个接口实现的。 + 如希望打开此功能,请在 startLocalAudio() 之前调用。 + + @param interval 设置 onUserVoiceVolume 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms + + + +4.10 获取 SDK 播放音量 + + + +4.8 获取 SDK 采集音量 + + + + 4.7 设置 SDK 采集音量。 + + @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 4.6 设置某个远程用户的播放音量 + + @param userId 远程用户 ID + @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 4.5 静音/取消静音所有用户的声音 + + @param mute true:静音;false:取消静音 + + @note 静音时会停止接收所有用户的远端音频流并停止播放,取消静音时会自动拉取所有用户的远端音频流并进行播放。 + + + + 4.4 静音/取消静音指定的远端用户的声音 + + @param userId 用户 ID + @param mute true:静音;false:取消静音 + + @note 静音时会停止接收该用户的远端音频流并停止播放,取消静音时会自动拉取该用户的远端音频流并进行播放。 + + + + 4.3 静音/取消静音本地的音频 + + 当静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, false) 回调通知。 + 当取消静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, true) 回调通知。 + + 与 stopLocalAudio 不同之处在于,muteLocalAudio(true) 并不会停止发送音视频数据,而是继续发送码率极低的静音包。 + 由于 MP4 等视频文件格式,对于音频的连续性是要求很高的,使用 stopLocalAudio 会导致录制出的 MP4 不易播放。 + 因此在对录制质量要求很高的场景中,建议选择 muteLocalAudio,从而录制出兼容性更好的 MP4 文件。 + + @param mute true:静音;false:取消静音 + + + + 4.2 关闭本地音频的采集和上行 + + 当关闭本地音频的采集和上行,房间里的其它成员会收到 onUserAudioAvailable(false) 回调通知。 + + + +@} +@name 音频相关接口函数 +@{ + 4.1 开启本地音频的采集和上行 + + 该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。 + SDK 并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。 + @param quality 声音质量,参见 TRTCAudioQuality + @note TRTC SDK 并不会默认打开本地的麦克风采集。 + + + + 3.19 选定观看指定 userId 的大画面还是小画面 + + 此功能需要该 userId 通过 enableEncSmallVideoStream 提前开启双路编码模式。 + 如果该 userId 没有开启双路编码模式,则此操作无效。 + + @param userId 用户 ID + @param type 视频流类型,即选择看大画面还是小画面,默认为 TRTCVideoStreamTypeBig + + + + 3.18 开启大小画面双路编码模式 + + 如果当前用户是房间中的主要角色(例如主播、老师、主持人等),并且使用 PC 或者 Mac 环境,可以开启该模式。 + 开启该模式后,当前用户会同时输出【高清】和【低清】两路视频流(但只有一路音频流)。 + 对于开启该模式的当前用户,会占用更多的网络带宽,并且会更加消耗 CPU 计算资源。 + + 对于同一房间的远程观众而言: + - 如果用户的下行网络很好,可以选择观看【高清】画面 + - 如果用户的下行网络较差,可以选择观看【低清】画面 + + @param enable 是否开启小画面编码,默认值:false + @param smallVideoParam 小流的视频参数 + + + + 3.17 设置远端图像的渲染模式 + + @param userId 对应的远端视频流用户ID + @param streamType 远端图像的视频流类型,详见 TRTCVideoStreamType 定义 + @param param 远端图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义 + + + + 3.16 设置编码器输出的画面镜像模式 + + 该接口不改变本地摄像头的预览画面,但会改变另一端用户看到的(以及服务器录制的)画面效果。 + + @param mirror 是否开启远端镜像, true:远端画面镜像;false:远端画面非镜像。默认值:false + + + + 3.15 设置视频编码输出的画面方向,即设置远端用户观看到的和服务器录制的画面方向 + + @param rotation 目前支持 TRTCVideoRotation0 和 TRTCVideoRotation180 旋转角度,默认值:TRTCVideoRotation0 + + + + 3.14 设置本地图像(主流)的渲染参数 + + @param params 本地图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义 + + + + 3.13 设置网络流控相关参数 + + 该设置决定了 SDK 在各种网络环境下的调控策略(例如弱网下是“保清晰”还是“保流畅”) + + @param params 网络流控参数,详情请参考 TRTCTypeDef.h 中的 TRTCNetworkQosParam 定义 + + + + 3.12 设置视频编码器相关参数 + + 该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量) + + @param params 视频编码参数,详情请参考 TRTCTypeDef.h 中的 TRTCVideoEncParam 定义 + + + + 3.11 暂停/恢复接收所有远端视频流 + + 该接口仅暂停/恢复接收所有远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。 + + @param mute 是否暂停接收 + + + + 3.10 暂停/恢复接收指定的远端视频流 + + 该接口仅暂停/恢复接收指定的远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。 + + @param userId 对方的用户标识 + @param mute 是否暂停接收 + + + + 3.9 停止显示所有远端视频画面,同时不再拉取远端用户的视频数据流 + + @note 如果有屏幕分享的画面在显示,则屏幕分享的画面也会一并被关闭。 + + + + 3.8 停止显示远端视频画面,同时不再拉取该远端用户的视频数据流 + + 调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。 + + @param userId 指定远端用户的 userId + @param streamType 指定要停止观看的 userId 的视频流类型: + - 高清大画面:({@link TRTCVideoStreamTypeBig}) + - 低清大画面:({@link TRTCVideoStreamTypeSmall}) + - 辅流(屏幕分享):({@link TRTCVideoStreamTypeSub}) + + + + 3.7 更新远端视频渲染的窗口 + + @param userId 对方的用户标识 + @param streamType 要设置预览窗口的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub) + @param rendView 承载预览画面的控件 + + + + 3.6 开始拉取并显示指定用户的远端画面 + + 该函数会拉取指定 userid 的视频流显示在您指定的 view 控件上,您可以通过 setLocalViewRenderParams 设置显示模式。 + - 如果您提前知道房间中某个 userid 正在推流,可以直接调用 startRemoteView 显示该用户的远端画面。 + - 如果您不知道房间中有哪些用户开启了视频,可以在 enterRoom 后等待来自 SDK 的 onUserVideoAvailable(userId, true) 回调通知。 + 调用 startRemoteView 只是启动拉取,此时画面还需要加载,当加载完毕后 ITRTCCloudCallback 会通过 onFirstVideoFrame(userId) 通知您。 + + @param userId 指定远端用户的 userId + @param streamType 指定要观看 userId 的视频流类型: + - 高清大画面:({@link TRTCVideoStreamTypeBig}) + - 低清大画面:({@link TRTCVideoStreamTypeSmall}) + - 辅流(屏幕分享):({@link TRTCVideoStreamTypeSub}) + @param rendView 承载视频画面的控件 + + @note 注意几点规则需要您关注: + 1. SDK 支持同时观看某 userid 的大画面和辅路,或者小画面和辅路,但不支持同时观看大画面和小画面。 + 2. 只有当指定的 userid 通过 enableEncSmallVideoStream 开启双路编码后,才能观看该用户的小画面。 + 3. 如果该用户的小画面不存在,则默认切换到大画面。 + + + + 3.5 暂停/恢复推送本地的视频数据 + + 当暂停推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, false) 回调通知 + 当恢复推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, true) 回调通知 + + @param mute true:暂停;false:恢复 + + + +3.4 停止本地视频采集及预览 + + + + 3.3 更新本地视频预览画面的窗口 + + @param rendView 承载预览画面的控件 + + + +@} +@name 视频相关接口函数 +@{ + 3.1 开启本地视频的预览画面(Windows、 Mac版本) + + 这个接口会启动默认的摄像头,可以通过 ITXDeviceManager::setCurrentDevice 接口选用其他摄像头 + 当开始渲染首帧摄像头画面时,您会收到 ITRTCCloudCallback 中的 onFirstVideoFrame(nullptr) 回调。 + + @param rendView 承载预览画面的控件 + + + + 2.5 设置云端的混流转码参数 + + 如果您在实时音视频 [控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启了“启动自动旁路直播”功能, + 房间里的每一路画面都会有一个默认的直播 [CDN 地址](https://cloud.tencent.com/document/product/647/16826)。 + + 一个直播间中可能有不止一位主播,而且每个主播都有自己的画面和声音,但对于 CDN 观众来说,他们只需要一路直播流, + 所以您需要将多路音视频流混成一路标准的直播流,这就需要混流转码。 + + 当您调用 setMixTranscodingConfig() 接口时,SDK 会向腾讯云的转码服务器发送一条指令,目的是将房间里的多路音视频流混合为一路, + 您可以通过 mixUsers 参数来调整每一路画面的位置,以及是否只混合声音,也可以通过 videoWidth、videoHeight、videoBitrate 等参数控制混合音视频流的编码参数。 + +
+ 【画面1】=> 解码 ====> 
+                         
+ 【画面2】=> 解码 =>  画面混合 => 编码 => 【混合后的画面】
+                         /
+ 【画面3】=> 解码 ====> /
+
+ 【声音1】=> 解码 ====> 
+                         
+ 【声音2】=> 解码 =>  声音混合 => 编码 => 【混合后的声音】
+                         /
+ 【声音3】=> 解码 ====> /
+ 
+ + 参考文档:[云端混流转码](https://cloud.tencent.com/document/product/647/16827)。 + + @param config 请参考 TRTCTypeDef.h 中关于 TRTCTranscodingConfig 的介绍。如果传入 nullptr 则取消云端混流转码。 + @note 关于云端混流的注意事项: + - 云端转码会引入一定的 CDN 观看延时,大概会增加1 - 2秒。 + - 调用该函数的用户,会将连麦中的多路画面混合到自己当前这路画面或者 config 中指定的 streamId 上。 + - 请注意,若您还在房间中且不再需要混流,请务必传入 nullptr 进行取消,因为当您发起混流后,云端混流模块就会开始工作,不及时取消混流可能会引起不必要的计费损失。 + - 请放心,您退房时会自动取消混流状态。 + +
+ +2.4 停止向非腾讯云地址转推 + + + + 2.3 开始向友商云的直播 CDN 转推 + + 该接口跟 startPublishing() 类似,但 startPublishCDNStream() 支持向非腾讯云的直播 CDN 转推。 + @param param CDN 转推参数,请参考 TRTCTypeDef.h 中关于 TRTCPublishCDNParam 的介绍。 + @note 使用 startPublishing() 绑定腾讯云直播 CDN 不收取额外的费用,但使用 startPublishCDNStream() 绑定非腾讯云直播 CDN 需要收取转推费用。 + + + +2.2 停止向腾讯云的直播 CDN 推流 + + + +@} +@name CDN 相关接口函数 +@{ + 2.1 开始向腾讯云的直播 CDN 推流 + + 该接口会指定当前用户的音视频流在腾讯云 CDN 所对应的 StreamId,进而可以指定当前用户的 CDN 播放地址。 + + 例如:如果我们采用如下代码设置当前用户的主画面 StreamId 为 user_stream_001,那么该用户主画面对应的 CDN 播放地址为: + “http://yourdomain/live/user_stream_001.flv”,其中 yourdomain 为您自己备案的播放域名, + 您可以在直播[控制台](https://console.cloud.tencent.com/live) 配置您的播放域名,腾讯云不提供默认的播放域名。 + +
+  ITRTCCloud *trtcCloud = getTRTCShareInstance();
+  trtcCloud->enterRoom(params, TRTCAppSceneLIVE);
+  trtcCloud->startLocalPreview(TXView);
+  trtcCloud->startLocalAudio(TRTCAudioQuality);
+  trtcCloud->startPublishing("user_stream_001", TRTCVideoStreamTypeBig);
+ 
+ + 您也可以在设置 enterRoom 的参数 TRTCParams 时指定 streamId, 而且我们更推荐您采用这种方案。 + + @param streamId 自定义流 ID。 + @param type 仅支持 TRTCVideoStreamTypeBig 和 TRTCVideoStreamTypeSub。 + @note 您需要先在实时音视频 [控制台](https://console.cloud.tencent.com/rav/) 中的功能配置页开启“启用旁路推流”才能生效。 + - 若您选择“指定流旁路”,则您可以通过该接口将对应音视频流推送到腾讯云 CDN 且指定为填写的流 ID。 + - 若您选择“全局自动旁路”,则您可以通过该接口调整默认的流 ID。 + +
+ + 1.9 切换房间 + + 调用该接口后,用户会先退出原来的房间并快速进入 TRTCSwitchRoomConfig 中指定的新房间: + 相比于直接调用 exitRoom + enterRoom 的方式,switchRoom 接口对主播更加友好,因为 switchRoom + 不会停止主播端视频的采集和预览。 + 接口调用结果会通过 ITRTCCloudCallback 中的 onSwitchRoom(errCode, errMsg) 回调通知给您。 + + @param config 房间切换参数,请参考 {@link TRTCSwitchRoomConfig} + + + + 1.8 销毁子 TRTCCloud 实例 + + @note 此方法目前仅支持Windows平台 + + + + 1.7 创建子 TRTCCloud 实例 + + 子 TRTCCloud 实例用于进入其他房间,观看其他房间主播的音视频流,还可以在不同的房间之间切换推送音视频流。 + + 此接口主要应用于类似超级小班课这种需要进入多个房间推拉流的场景。 + +
+   ITRTCCloud *mainCloud = getTRTCShareInstance();
+   // 1、mainCloud 进房并开始推送音视频流。
+   // 2、创建子 TRTCCloud 实例并进入其他房间。
+   ITRTCCloud *subCloud = mainCloud->createSubCloud();
+   subCloud->enterRoom(params, scene);
+
+   // 3、切换房间推送音视频流。
+   // 3.1、mainCloud 停止推送音视频流。
+   mainCloud->switchRole(TRTCRoleAudience);
+   mainCloud->muteLocalVideo(true);
+   mainCloud->muteLocalAudio(true);
+   // 3.2、subCLoud 推送音视频流。
+   subCloud->switchRole(TRTCRoleAnchor);
+   subCloud->muteLocalVideo(false);
+   subCloud->muteLocalAudio(false);
+
+   // 4、subCLoud 退房。
+   subCloud->exitRoom();
+
+   // 5、销毁 subCLoud。
+   mainCloud->destroySubCloud(subCloud);
+ 
+ + @return 子 TRTCCloud 实例 + @note + - 此方法目前仅支持Windows平台 + - 同一个用户,可以使用同一个 userId 进入多个不同 roomId 的房间。 + - 两台手机不可以同时使用同一个 userId 进入同一个 roomId 的房间。 + - 通过 createSubCloud 接口创建出来的子房间 TRTCCloud 实例有一个能力限制:不能调用子实例中与本地音视频 + 相关的接口(除了 switchRole、muteLocalVideo 和 muteLocalAudio 之外), 设置美颜等接口请使用 + 原 TRTCCloud 实例对象。 + - 同一个用户,同时只能在一个 TRTCCloud 实例中推流,在不同房间同时推流会引发云端的状态混乱,导致各种 bug。 + +
+ + 1.6 设置音视频数据接收模式,需要在进房前设置才能生效 + + 为实现进房秒开的绝佳体验,SDK 默认进房后自动接收音视频。即在您进房成功的同时,您将立刻收到远端所有用户的音视频数据。 + 若您没有调用 startRemoteView,视频数据将自动超时取消。 + 若您主要用于语音聊天等没有自动接收视频数据需求的场景,您可以根据实际需求选择接收模式。 + + @param autoRecvAudio true:自动接收音频数据;false:需要调用 muteRemoteAudio 进行请求或取消。默认值:true + @param autoRecvVideo true:自动接收视频数据;false:需要调用 startRemoteView/stopRemoteView 进行请求或取消。默认值:true + + @note 需要在进房前设置才能生效。 + + + + 1.5 关闭跨房连麦 + + 跨房通话的退出结果会通过 ITRTCCloudCallback 中的 onDisconnectOtherRoom() 回调通知给您。 + + + + 1.4 请求跨房通话(主播 PK) + + TRTC 中两个不同音视频房间中的主播,可以通过“跨房通话”功能拉通连麦通话功能。使用此功能时, + 两个主播无需退出各自原来的直播间即可进行“连麦 PK”。 + + 例如:当房间“001”中的主播 A 通过 connectOtherRoom() 跟房间“002”中的主播 B 拉通跨房通话后, + 房间“001”中的用户都会收到主播 B 的 onUserEnter(B) 回调和 onUserVideoAvailable(B,true) 回调。 + 房间“002”中的用户都会收到主播 A 的 onUserEnter(A) 回调和 onUserVideoAvailable(A,true) 回调。 + + 简言之,跨房通话的本质,就是把两个不同房间中的主播相互分享,让每个房间里的观众都能看到两个主播。 + +
+                 房间 001                     房间 002
+               -------------               ------------
+  跨房通话前:| 主播 A      |             | 主播 B     |
+              | 观众 U V W  |             | 观众 X Y Z |
+               -------------               ------------
+
+                 房间 001                     房间 002
+               -------------               ------------
+  跨房通话后:| 主播 A B    |             | 主播 B A   |
+              | 观众 U V W  |             | 观众 X Y Z |
+               -------------               ------------
+ 
+ + 跨房通话的参数考虑到后续扩展字段的兼容性问题,暂时采用了 JSON 格式的参数,要求至少包含两个字段: + - roomId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 roomId 应指定为“002”。 + - userId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 userId 应指定为 B 的 userId。 + + 跨房通话的请求结果会通过 ITRTCCloudCallback 中的 onConnectOtherRoom() 回调通知给您。 + +
+   //此处用到 jsoncpp 库来格式化 JSON 字符串
+   Json::Value jsonObj;
+   jsonObj["roomId"] = 002;
+   jsonObj["userId"] = "userB";
+   Json::FastWriter writer;
+   std::string params = writer.write(jsonObj);
+   trtc.ConnectOtherRoom(params.c_str());
+ 
+ + @param params JSON 字符串连麦参数,roomId 代表目标房间号,userId 代表目标用户 ID。 + + +
+ + 1.3 切换角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom) + + 在直播场景下,一个用户可能需要在“观众”和“主播”之间来回切换。 + 您可以在进房前通过 TRTCParams 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。 + + @param role 目标角色,默认为主播: + - {@link TRTCRoleAnchor} 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。 + - {@link TRTCRoleAudience} 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。 + + + + 1.2 离开房间 + + 调用 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。 + 待资源释放完毕,SDK 会通过 ITRTCCloudCallback 中的 onExitRoom() 回调通知您。 + + 如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。 + 否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。 + + + + 移除事件回调 + + @param callback 事件回调指针 + + + +@name 设置 ITRTCCloudCallback 回调 +@{ + 设置回调接口 ITRTCCloudCallback + + 您可以通过 ITRTCCloudCallback 获得来自 SDK 的各种状态通知,详见 ITRTCCloudCallback.h 中的定义 + + @param callback 事件回调指针 + + + +@brief 释放 ITRTCCloud 单例对象。 + + + +@defgroup ITRTCCloud_cplusplus ITRTCCloud +腾讯云视频通话功能的主要接口类 +@{ +@name 创建与销毁 ITRTCCloud 单例 +@{ + @brief 用于动态加载 dll 时,获取 ITRTCCloud 对象指针。 + + @return 返回 ITRTCCloud 单例对象的指针,注意:delete ITRTCCloud*会编译错误,需要调用 + destroyTRTCCloud 释放单例指针对象。 + @note 本接口适用于Windows、Mac、iOS平台 + + + + 设置屏幕共享参数 + + @deprecated v7.9 版本弃用,请使用 selectScreenCaptureTarget(TRTCScreenCaptureSourceInfo,RECT,TRTCScreenCaptureProperty) 接口 + @param source 指定分享源 + @param captureRect 指定捕获的区域 + @param captureMouse 指定是否捕获鼠标指针 + @param highlightWindow + 指定是否高亮正在共享的窗口,以及当捕获图像被遮挡时高亮遮挡窗口提示用户移走遮挡 + + + + 恢复音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager resumePlayMusic 接口 + @param effectId 音效 Id + + + + 暂停音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + @param effectId 音效 Id + + + + 设置所有音效的音量 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / + setMusicPlayoutVolume 接口 + @note 该操作会覆盖通过 setAudioEffectVolume 指定的单独音效音量。 + + @param volume 音量大小,取值范围为0 - 100;默认值:100 + + + + 停止所有音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager stopPlayMusic 接口 + + + + 停止音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager stopPlayMusic 接口 + @param effectId 音效 ID + + + + 设置音效音量 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / + setMusicPlayoutVolume 接口 + @note 会覆盖通过 setAllAudioEffectsVolume 指定的整体音效音量。 + + @param effectId 音效 ID + @param volume 音量大小,取值范围为0 - 100;默认值:100 + + + + 播放音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager startPlayMusic 接口 + 每个音效都需要您指定具体的 ID,您可以通过该 ID 对音效的开始、停止、音量等进行设置。 + 支持的文件格式:aac, mp3。 + + @note 若您想同时播放多个音效,请分配不同的 ID 进行播放。因为使用同一个 ID 播放不同音效,SDK + 将会停止上一个 ID 对应的音效播放,再启动新的音效播放。 + + @param effect 音效 + + + + 设置背景音乐远端播放音量的大小 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐在远端播放时的音量大小。 + + @param volume 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + + 设置背景音乐本地播放音量的大小 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPlayoutVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐在本地播放时的音量大小。 + + @param volume 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + + 设置背景音乐播放音量的大小 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / + setMusicPlayoutVolume 接口 播放背景音乐混音时使用,用来控制背景音乐播放音量的大小, + 该接口会同时控制远端播放音量的大小和本地播放音量的大小, + 因此调用该接口后,setBGMPlayoutVolume和setBGMPublishVolume设置的音量值会被覆盖 + + @param volume 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + + 设置 BGM 播放进度 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager seekMusicToPosInMS 接口 + @param pos 单位毫秒 + + + + 获取音乐文件总时长,单位毫秒 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager getMusicDurationInMS 接口 + @param path 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长 + @return 成功返回时长,失败返回-1 + + + + 继续播放背景音乐 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager resumePlayMusic 接口 + + + + 暂停播放背景音乐 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + + + + 停止播放背景音乐 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + + + + 启动播放背景音乐 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager startPlayMusic 接口,支持并发播放多个 + BGM + + @param path 音乐文件路径,支持的文件格式:aac, mp3。 + + + + 启动屏幕分享 + + @deprecated 从 v7.2 版本开始废弃 + @note 使用 startScreenCapture(TXView rendView, TRTCVideoStreamType type, TRTCVideoEncParam* + params) 接口替代。 + + + + 设置麦克风的音量大小 + + @deprecated 从 v6.9 版本开始废弃 + @note 使用 setAudioCaptureVolume 接口替代。 + + + +停止扬声器测试 +@deprecated v8.0 版本弃用,请使用 ITXDeviceManager::stopSpeakerDeviceTest 接口 + + + + 开启扬声器测试 + + 回调接口 onTestSpeakerVolume 获取测试数据 + + 该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::startSpeakerDeviceTest 接口 + @param testAudioFilePath 音频文件的绝对路径,路径字符串使用 UTF-8 + 编码格式,支持文件格式:WAV、MP3 + + + +停止麦克风测试 +@deprecated v8.0 版本弃用,请使用 ITXDeviceManager::stopMicDeviceTest 接口 + + + + 开启麦克风测试 + + 回调接口 onTestMicVolume 获取测试数据 + + 该方法测试麦克风是否能正常工作,volume 的取值范围为0 - 100。 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::startMicDeviceTest 接口 + @param interval 反馈音量提示的时间间隔(ms),建议设置到大于 200 毫秒 + + + +停止摄像头测试 +@deprecated v8.0 版本弃用,请使用 ITXDeviceManager::stopCameraDeviceTest 接口 + + + + 开始进行摄像头测试 + + 会触发 onFirstVideoFrame 回调接口 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::startCameraDeviceTest 接口 + @note 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + @param callback 摄像头预览自定义渲染画面回调 + + + + 开始进行摄像头测试 + + 会触发 onFirstVideoFrame 回调接口 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::startCameraDeviceTest 接口 + @note 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + @param rendView 承载预览画面的 HWND + + + + 获取系统当前扬声器设备是否静音 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDeviceMute 接口 + @note 查询的是系统硬件静音状态 + + @return 静音状态 + + + + 设置系统当前扬声器设备的是否静音 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDeviceMute 接口 + @note 该接口的功能是设置系统扬声器静音,如果用户直接设置 WIN + 系统设置的扬声器静音时,该接口的设置结果会被用户的操作所覆盖。 + + @param mute 设置为 true 时,则设置扬声器设备静音 + + + + 设置系统当前扬声器设备音量 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDeviceVolume 接口 + @note 该接口的功能是调节系统播放音量,如果用户直接调节 WIN + 系统设置的播放音量时,该接口的设置结果会被用户的操作所覆盖。 + + @param volume 设置的扬声器音量,范围0 - 100 + + + + 获取系统当前扬声器设备音量 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDeviceVolume 接口 + @note 查询的是系统硬件音量大小。 + + @return 扬声器音量,范围0 - 100 + + + + 设置要使用的扬声器 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDevice 接口 + @param speakerId 从 getSpeakerDevicesList 中得到的设备 ID + + + + 获取当前的扬声器设备 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDevice 接口 + @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + + 获取系统当前麦克风设备是否静音 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDeviceMute 接口 + @note 查询的是系统硬件静音状态 + + @return 静音状态 + + + + 设置系统当前麦克风设备的是否静音 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDeviceMute 接口 + @note 该接口的功能是设置系统麦克风静音,如果用户直接设置 WIN + 系统设置的麦克风静音时,该接口的设置结果会被用户的操作所覆盖。 + + @param mute 设置为 true 时,则设置麦克风设备静音 + + + + 设置系统当前麦克风设备的音量 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDeviceVolume 接口 + @note 该接口的功能是调节系统采集音量,如果用户直接调节 WIN + 系统设置的采集音量时,该接口的设置结果会被用户的操作所覆盖。 + + @param volume 麦克风音量值,范围0 - 100 + + + + 获取系统当前麦克风设备音量 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDeviceVolume 接口 + @note 查询的是系统硬件音量大小。 + + @return 音量值,范围是0 - 100 + + + + 设置要使用的麦克风 + + 选择指定的麦克风作为录音设备,不调用该接口时,默认选择索引为0的麦克风 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDevice 接口 + @param micId 从 getMicDevicesList 中得到的设备 ID + + + + 获取当前选择的麦克风 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDevice 接口 + @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + + 获取当前使用的摄像头 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDevice 接口 + @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + + 设置要使用的摄像头 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDevice 接口 + @param deviceId 从 getCameraDevicesList 中得到的设备 ID + + + + 设定观看方优先选择的视频质量 + + 低端设备推荐优先选择低清晰度的小画面。 + 如果对方没有开启双路视频模式,则此操作无效。 + + @deprecated v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + @param type 默认观看大画面还是小画面,默认为 TRTCVideoStreamTypeBig + + + + 设置音频质量 + + 主播端的音质越高,观众端的听感越好,但传输所依赖的带宽也就越高,在带宽有限的场景下也更容易出现卡顿。 + + - {@link TRTCCloudDef#TRTCAudioQualitySpeech}, + 流畅:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。 + - {@link + TRTCCloudDef#TRTCAudioQualityDefault},默认:采样率:48k;单声道;音频裸码率:50kbps;SDK + 默认的音频质量,如无特殊需求推荐选择之。 + - {@link TRTCCloudDef#TRTCAudioQualityMusic},高音质:采样率:48k;双声道 + + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。 + @deprecated v8.0 版本弃用,请使用 startLocalAudio(TRTCAudioQuality) 接口 + @note 该方法需要在 startLocalAudio 之前进行设置,否则不会生效。 + + + + 设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的顺时针旋转角度 + - setRemoteViewRotation() + 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的旋转角度。 + - setRemoteSubStreamViewRotation() + 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的旋转角度。 + + @deprecated v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + @param userId 用户 ID + @param rotation 支持90、180、270旋转角度 + + + + 设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的显示模式 + - setRemoteViewFillMode() + 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的显示模式。 + - setRemoteSubStreamViewFillMode() + 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的显示模式。 + + @deprecated v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + @param userId 用户的 ID + @param mode + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + +停止显示远端用户的辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)。 +@deprecated v8.0 版本弃用,请使用 stopRemoteView(userId,streamType) 接口 +@param userId 对方的用户标识 + + + + 开始显示远端用户的辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享) + + - startRemoteView() 用于显示主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)。 + - startRemoteSubStreamView() 用于显示辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)。 + + @deprecated v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + @param userId 对方的用户标识 + @param rendView 渲染画面的 TXView + @note 请在 onUserSubStreamAvailable 回调后再调用这个接口。 + + + + 设置远端图像的顺时针旋转角度 + + @deprecated v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + @param userId 用户 ID + @param rotation 支持 TRTCVideoRotation90 、 TRTCVideoRotation180 以及 TRTCVideoRotation270 + 旋转角度,默认值:TRTCVideoRotation0 + + + + 设置远端图像的渲染模式 + + @deprecated v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + @param userId 用户 ID + @param mode + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + + 设置本地摄像头预览画面的镜像模式 + + @deprecated v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + @param mirror 镜像模式,默认值:false(非镜像模式) + + + + 设置本地图像的顺时针旋转角度 + + @deprecated v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + @param rotation 支持 TRTCVideoRotation90 、 TRTCVideoRotation180 以及 TRTCVideoRotation270 + 旋转角度,默认值:TRTCVideoRotation0 + + + + 设置本地图像的填充模式 + + @deprecated v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + @param mode + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + + 停止显示远端视频画面,同时不再拉取该远端用户的视频数据流 + + 调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。 + + @deprecated v8.0 版本弃用,请使用 stopRemoteView(userId,streamType) 接口 + @param userId 对方的用户标识 + + + + 开始显示远端视频画面 + + 在收到 SDK 的 onUserVideoAvailable(userId, true) 通知时,可以获知该远程用户开启了视频, + 此后调用 startRemoteView(userId) 接口加载该用户的远程画面时,可以用 loading + 动画优化加载过程中的等待体验。 待该用户的首帧画面开始显示时,您会收到 + onFirstVideoFrame(userId) 事件回调。 + + @deprecated v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + @param userId 对方的用户标识 + @param rendView 承载预览画面的窗口句柄 + + + +@name 弃用接口函数 +@{ + 开启本地音频的采集和上行 + + 该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。 + SDK + 并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。 + + @deprecated v8.0 版本弃用,请使用 startLocalAudio(TRTCAudioQuality) 接口 + @note TRTC SDK 并不会默认打开本地的麦克风采集。 + + + +@defgroup IDeprecatedTRTCCloud_cplusplus IDeprecatedTRTCCloud +腾讯云视频通话的 Windows C++ 专有废弃接口 +@{ + + + 2.13 获取景音乐文件的总时长(单位:毫秒) + + @param path 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长。 + @return 成功返回时长,失败返回-1 + + + + 2.12 设置背景音乐的播放进度(单位:毫秒) + + @note 请尽量避免频繁地调用该接口,因为该接口可能会再次读写音乐文件,耗时稍高。 + 当配合进度条使用时,请在进度条拖动完毕的回调中调用,而避免在拖动过程中实时调用。 + + @param id 音乐 ID + @param pts 单位: 毫秒 + + + + 2.11 获取背景音乐当前的播放进度(单位:毫秒) + + @param id 音乐 ID + @return 成功返回当前播放时间,单位:毫秒,失败返回-1 + + + + 2.10 调整背景音乐的变速效果 + + @param id 音乐 ID + @param speedRate 速度,默认值是1.0f,范围是:[0.5 ~ 2] 之间的浮点数; + + + + 2.9 调整背景音乐的音调高低 + + @param id 音乐 ID + @param pitch 音调,默认值是0.0f,范围是:[-1 ~ 1] 之间的浮点数; + + + + 2.8 设置全局背景音乐的本地和远端音量的大小 + + @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 2.7 设置背景音乐的本地音量大小,即主播可以通过此接口设置主播自己本地的背景音乐的音量大小。 + + @param id 音乐 ID + @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 2.6 设置背景音乐的远端音量大小,即主播可以通过此接口设置远端观众能听到的背景音乐的音量大小。 + + @param id 音乐 ID + @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 2.5 恢复播放背景音乐 + + @param id 音乐 ID + + + + 2.4 暂停播放背景音乐 + + @param id 音乐 ID + + + + 2.3 停止播放背景音乐 + + @param id 音乐 ID + + + + 2.2 开始播放背景音乐 + + 每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。 + + @note 若您想同时播放多个音乐,请分配不同的 ID 进行播放。 + 如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。 + @param musicParam 音乐参数 + + + +@} +@name 背景音乐特效函数 +@{ + 2.1 设置背景音乐的播放进度回调接口 + + @param musicId 音乐 ID + @param observer 具体参考 ITXMusicPlayObserver 中定义接口 + + + + 1.2 设置麦克风采集人声的音量 + + @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + +@name 人声相关特效函数 +@{ +1.1 设置人声的混响效果(KTV、小房间、大会堂、低沉、洪亮...) + + + +【字段含义】音乐结束播放时间点,单位毫秒,0表示播放至文件结尾。 + + +【字段含义】音乐开始播放时间点,单位毫秒 + + +【字段含义】播放的是否为短音乐文件 +【推荐取值】YES:需要重复播放的短音乐文件;NO:正常的音乐文件。默认值:NO + + +【字段含义】是否将音乐传到远端 +【推荐取值】YES:音乐在本地播放的同时,会上行至云端,因此远端用户也能听到该音乐;NO:音乐不会上行至云端,因此只能在本地听到该音乐。默认值:NO + + +【字段含义】音乐循环播放的次数 +【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音乐一次;1表示播放音乐两次;以此类推 + + +【字段含义】音乐文件的绝对路径 + + +【字段含义】音乐 ID +【特殊说明】SDK 允许播放多路音乐,因此需要音乐 ID 进行标记,用于控制音乐的开始、停止、音量等 + + +背景音乐已播放完毕 + + +背景音乐的播放进度 + + +背景音乐开始播放 + + +@defgroup ITXAudioEffectManager_cplusplus ITXAudioEffectManager +腾讯云视频通话功能音乐和人声设置接口 +@{ + + + 13.1 有日志打印时的回调 + + @param log 日志内容 + @param level 日志等级 参见 TRTCLogLevel + @param module 暂无具体意义,目前为固定值 TXLiteAVSDK + + + +日志相关回调 + + + * 12.4 各路音频数据混合后送入喇叭播放的音频数据 + * + * @param frame 音频数据 + * @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 + * @note - 此接口回调出的音频数据支持修改。 + * @note - 此接口回调出的音频时间帧长固定为0.02s。 + 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。 + 以SDK默认的音频播放格式48000采样率、双声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 2 × 16bit = 30720bit = 3840字节】。 + * @note - 此接口回调出的音频数据是各路音频播放数据的混合,不包含耳返的音频数据。 + + + + 12.3 混音前的每一路远程用户的音频数据(例如您要对某一路的语音进行文字转换,必须要使用这里的原始数据,而不是混音之后的数据) + + @param frame 音频数据 + @param userId 用户标识 + @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 + - 此接口回调出的音频数据是只读的,不支持修改。 + + + + * 12.1 本地麦克风采集到的音频数据回调 + * + * @param frame 音频数据 + * @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 + * @note - 此接口回调出的音频数据支持修改。 + * @note - 此接口回调出的音频时间帧长固定为0.02s。 + 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。 + 以SDK默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。 + * @note - 此接口回调出的音频数据包含背景音、音效、混响等前处理效果。 + + + +音频数据回调 + + + 11.1 自定义视频渲染回调 + + 可以通过 setLocalVideoRenderCallback 和 setRemoteVideoRenderCallback 接口设置自定义渲染回调 + + @param userId 用户标识 + @param streamType 流类型:即摄像头还是屏幕分享 + @param frame 视频帧数据 + + @note - 在iOS和Mac平台上回调的视频帧为TRTCVideoBufferType_Buffer类型 + + + +自定义视频渲染回调 + + + 10.6 废弃接口:播放背景音乐结束 + + @param errCode 错误码 + + + + 10.5 废弃接口:播放背景音乐的进度 + + @param progressMS 已播放时间 + @param durationMS 总时间 + + + + 10.4 废弃接口:开始播放背景音乐 + + @param errCode 错误码 + + + + 10.3 废弃接口:播放音效结束回调 + + @param effectId 音效id + @param code 0表示播放正常结束;其他表示异常结束 + + + + 10.2 废弃接口:有主播离开当前房间 + + 该回调接口可以被看作是 onRemoteUserLeaveRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserLeaveRoom 进行替代。 + + @note 该接口已被废弃,不推荐使用 + + @param userId 用户标识 + @param reason 离开原因。 + + + +@} +@name Windows 专有废弃方法 +@{ + 10.1 废弃接口:有主播加入当前房间 + + 该回调接口可以被看作是 onRemoteUserEnterRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。 + + @note 该接口已被废弃,不推荐使用 + + @param userId 用户标识 + + + + 9.5 当屏幕分享停止时,SDK 会通过此回调通知 + + @param reason 停止原因,0:表示用户主动停止;1:表示屏幕分享窗口被关闭 + + + + 9.4 当屏幕分享恢复时,SDK 会通过此回调通知 + + @param reason 停止原因,0:表示用户主动恢复,1:表示屏幕分享参数设置完毕后自动恢复;2:表示屏幕分享窗口从最小化被恢复;3:表示屏幕分享窗口从隐藏被恢复 + + + + 9.3 当屏幕分享暂停时,SDK 会通过此回调通知 + + @param reason 停止原因,0:表示用户主动暂停;1:表示设置屏幕分享参数导致的暂停;2:表示屏幕分享窗口被最小化导致的暂停;3:表示屏幕分享窗口被隐藏导致的暂停 + + + +9.2 当屏幕分享开始时,SDK 会通过此回调通知 + + + +@} +@name 屏幕分享回调 +@{ +9.1 当屏幕分享窗口被遮挡无法正常捕获时,SDK 会通过此回调通知,可在此回调里通知用户移开遮挡窗口 +目前只支持Windows平台 + + + + 8.5 设置云端的混流转码参数的回调,对应于 TRTCCloud 中的 setMixTranscodingConfig() 接口 + + @param errCode 0表示成功,其余值表示失败 + @param errMsg 具体错误原因 + + + + 8.4 停止旁路推流到 CDN 完成的回调 + + 对应于 TRTCCloud 中的 stopPublishCDNStream() 接口 + + + + + 8.3 启动旁路推流到 CDN 完成的回调 + + 对应于 TRTCCloud 中的 startPublishCDNStream() 接口 + + @note Start 回调如果成功,只能说明转推请求已经成功告知给腾讯云,如果目标 CDN 有异常,还是有可能会转推失败。 + + + + 8.2 停止向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 stopPublishing() 接口 + + @param err 0表示成功,其余值表示失败 + @param errMsg 具体错误原因 + + + +@} +@name CDN 旁路转推回调 +@{ + 8.1 开始向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 startPublishing() 接口 + + @param err 0表示成功,其余值表示失败 + @param errMsg 具体错误原因 + + + + 7.3 收到 SEI 消息的回调 + + 当房间中的某个用户使用 sendSEIMsg 发送数据时,房间中的其它用户可以通过 onRecvSEIMsg 接口接收数据。 + + @param userId 用户标识 + @param message 数据 + @param messageSize 数据大小 + + + + 7.2 自定义消息丢失回调 + + 实时音视频使用 UDP 通道,即使设置了可靠传输(reliable)也无法确保100@%不丢失,只是丢消息概率极低,能满足常规可靠性要求。 + 在发送端设置了可靠传输(reliable)后,SDK 都会通过此回调通知过去时间段内(通常为5s)传输途中丢失的自定义消息数量统计信息。 + + @note 只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调 + @param userId 用户标识 + @param cmdID 命令 ID + @param errCode 错误码 + @param missed 丢失的消息数量 + + + +@} +@name 自定义消息的接收回调 +@{ + 7.1 收到自定义消息回调 + + 当房间中的某个用户使用 sendCustomCmdMsg 发送自定义消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 接口接收消息 + + @param userId 用户标识 + @param cmdID 命令 ID + @param seq 消息序号 + @param message 消息数据 + @param messageSize 消息数据大小 + + + + 6.8 当前音频播放设备音量变化通知 + + @note 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭 + + @param volume 音量值,取值范围0 - 100 + @param muted 当前音频播放设备是否被静音,true:静音;false:取消静音 + + + + 6.7 当前音频采集设备音量变化通知 + + @note 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭 + + @param volume 音量值,取值范围0 - 100 + @param muted 当前采集音频设备是否被静音,true:静音;false:取消静音 + + + + 6.6 扬声器测试音量回调 + + 扬声器测试接口 startSpeakerDeviceTest 会触发这个回调 + + @param volume 音量值,取值范围0 - 100 + + + + 6.5 麦克风测试音量回调 + + 麦克风测试接口 startMicDeviceTest 会触发这个回调 + + @param volume 音量值,取值范围0 - 100 + + + + 6.4 本地设备通断回调 + + @param deviceId 设备 ID + @param type 设备类型 + @param state 事件类型 + + + + 6.3 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量 + + 您可以通过调用 TRTCCloud 中的 enableAudioVolumeEvaluation 接口来开关这个回调或者设置它的触发间隔。 + 需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调, + 如果没有人说话,则 userVolumes 为空,totalVolume 为0。 + + @param userVolumes 所有正在说话的房间成员的音量,取值范围0 - 100。 + @param userVolumesCount 房间成员数量 + @param totalVolume 所有远端成员的总音量, 取值范围0 - 100。 + @note userId 为 null 时表示自己的音量,userVolumes 内仅包含正在说话(音量不为0)的用户音量信息。 + + + +6.2 麦克风准备就绪 + + + +@} +@name 硬件设备事件回调 +@{ +6.1 摄像头准备就绪 + + + + 5.4 服务器测速的回调,SDK 对多个服务器 IP 做测速,每个 IP 的测速结果通过这个回调通知 + + @param currentResult 当前完成的测速结果 + @param finishedCount 已完成测速的服务器数量 + @param totalCount 需要测速的服务器总数量 + + + +5.3 SDK 跟服务器的连接恢复 + + + +5.2 SDK 尝试重新连接到服务器 + + + +@} +@name 服务器事件回调 +@{ +5.1 SDK 跟服务器的连接断开 + + + + 4.2 技术指标统计回调 + + 如果您是熟悉音视频领域相关术语,可以通过这个回调获取 SDK 的所有技术指标。 + 如果您是首次开发音视频相关项目,可以只关注 onNetworkQuality 回调。 + + @param statis 统计数据,包括本地和远程的 + @note 每2秒回调一次 + + + +@} +@name 统计和质量回调 +@{ + 4.1 网络质量:该回调每2秒触发一次,统计当前网络的上行和下行质量 + + @note userId == null 代表自己当前的视频质量 + + @param localQuality 上行网络质量 + @param remoteQuality 下行网络质量 + @param remoteQualityCount 下行网络质量的数组大小 + + + + 3.9 首帧本地音频数据已经被送出 + + SDK 会在 enterRoom() 并 startLocalAudio() 成功后开始麦克风采集,并将采集到的声音进行编码。 + 当 SDK 成功向云端送出第一帧音频数据后,会抛出这个回调事件。 + + + + 3.8 首帧本地视频数据已经被送出 + + SDK 会在 enterRoom() 并 startLocalPreview() 成功后开始摄像头采集,并将采集到的画面进行编码。 + 当 SDK 成功向云端送出第一帧视频数据后,会抛出这个回调事件。 + + @param streamType 视频流类型,主画面、小画面或辅流画面(屏幕分享) + + + + 3.7 开始播放远程用户的首帧音频(本地声音暂不通知) + + @param userId 远程用户 ID。 + + + + 3.6 开始渲染本地或远程用户的首帧画面 + + 如果 userId 为 null,表示开始渲染本地采集的摄像头画面,需要您先调用 startLocalPreview 触发。 + 如果 userId 不为 null,表示开始渲染远程用户的首帧画面,需要您先调用 startRemoteView 触发。 + + @note 只有当您调用 startLocalPreview()、startRemoteView() 或 startRemoteSubStreamView() 之后,才会触发该回调。 + + @param userId 本地或远程用户 ID,如果 userId == null 代表本地,userId != null 代表远程。 + @param streamType 视频流类型:摄像头或屏幕分享。 + @param width 画面宽度 + @param height 画面高度 + + + + 3.5 用户是否开启音频上行 + + @param userId 用户标识 + @param available 声音是否开启 + + + + 3.4 用户是否开启屏幕分享 + + @param userId 用户标识 + @param available 屏幕分享是否开启 + + + + 3.3 用户是否开启摄像头视频 + + 当您收到 onUserVideoAvailable(userId, YES) 通知时,表示该路画面已经有可用的视频数据帧到达。 + 此时,您需要调用 startRemoteView(userId) 接口加载该用户的远程画面。 + 然后,您还会收到名为 onFirstVideoFrame(userId) 的首帧画面渲染回调。 + + 当您收到 onUserVideoAvailable(userId, NO) 通知时,表示该路远程画面已被关闭, + 可能由于该用户调用了 muteLocalVideo() 或 stopLocalPreview()。 + + @param userId 用户标识 + @param available 画面是否开启 + + + + 3.2 有用户离开当前房间 + + 与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景下,该通知的行为会有差别: + - 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户的离开都会触发该通知。 + - 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):只有主播离开房间时才会触发该通知,观众离开房间不会触发该通知。 + + @param userId 用户标识 + @param reason 离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。 + + + +@} +@name 成员事件回调 +@{ + 3.1 有用户加入当前房间 + + 出于性能方面的考虑,在两种不同的应用场景下,该通知的行为会有差别: + - 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户进入房间都会触发该通知。 + - 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):该场景不限制观众的数量,如果任何用户进出都抛出回调会引起很大的性能损耗,所以该场景下只有主播进入房间时才会触发该通知,观众进入房间不会触发该通知。 + + + @note 注意 onRemoteUserEnterRoom 和 onRemoteUserLeaveRoom 只适用于维护当前房间里的“成员列表”,如果需要显示远程画面,建议使用监听 onUserVideoAvailable() 事件回调。 + + @param userId 用户标识 + + + +2.6 切换房间 (switchRoom) 的结果回调 + + + +2.5 结束跨房通话(主播 PK)的结果回调 + + + + 2.4 请求跨房通话(主播 PK)的结果回调 + + 调用 TRTCCloud 中的 connectOtherRoom() 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。 + 调用者会收到 onConnectOtherRoom() 回调来获知跨房通话是否成功, + 如果成功,两个房间中的所有用户都会收到 PK 主播的 onUserVideoAvailable() 回调。 + + @param userId 要 PK 的目标主播 userId。 + @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。 + @param errMsg 错误信息。 + + + + 2.3 切换角色的事件回调 + + 调用 TRTCCloud 中的 switchRole() 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程, + 待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调。 + + @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。 + @param errMsg 错误信息。 + + + + 2.2 离开房间的事件回调 + + 调用 TRTCCloud 中的 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。 + 待资源释放完毕,SDK 会通过 onExitRoom() 回调通知到您。 + + 如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。 + 否则可能会遇到例如摄像头、麦克风设备被强占等各种异常问题。 + + @param reason 离开房间原因,0:主动调用 exitRoom 退房;1:被服务器踢出当前房间;2:当前房间整个被解散。 + + + + 1.2 警告回调:用于告知您一些非严重性问题,例如出现了卡顿或者可恢复的解码失败。 + + @param warningCode 警告码 + @param warningMsg 警告信息 + @param extraInfo 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题 + + + +@name 错误事件和警告事件 +@{ + 1.1 错误回调:SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。 + + @param errCode 错误码 + @param errMsg 错误信息 + @param extraInfo 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题 + + + +@defgroup TRTCCloudCallback_cplusplus TRTCCloudCallback +腾讯云视频通话功能的回调接口类 +@{ +腾讯云视频通话功能的回调接口类 + + + +5.24 设备列表和设备 Item 信息 + +以下定义仅用于兼容原有接口,具体定义参见 ITXDeviceManager.h 文件 + + + + 5.23 屏幕分享参数 + + 您可以通过设置结构体内的参数控制屏幕分享边框的颜色、宽度、是否采集鼠标等参数 + + + +@brief 遍历完窗口列表后,调用release释放资源。 + + + +@return 窗口信息 + + + +@return 窗口个数 + + + +5.22 屏幕分享窗口列表 + + + + 5.21 屏幕分享窗口信息 + + 您可以通过 getScreenCaptureSources() 枚举可共享的窗口列表,列表通过 ITRTCScreenCaptureSourceList 返回 + + + +5.20 用于存储屏幕分享窗口缩略图和图标的结构体 + + + +数组 remoteStatisticsArray 的大小 + + +远端成员的音视频统计信息,可能有主画面、小画面以及辅路画面等多路的情况,因此是一个数组 + + +数组 localStatisticsArray 的大小 + + +本地的音视频统计信息,可能有主画面、小画面以及辅路画面等多路的情况,因此是一个数组 + + +总发送字节总数(包含信令和音视频) + + +总接收字节数(包含信令和音视频) + + +延迟(毫秒), +指 SDK 到腾讯云服务器的一次网络往返时间,该值越小越好。 +一般低于50ms的 rtt 相对理想,而高于100ms的 rtt 会引入较大的通话延时。 +由于数据上下行共享一条网络连接,所以 local 和 remote 的 rtt 相同。 + + +当前系统的 CPU 使用率(%) + + +当前 App 的 CPU 使用率(%) + + +S -> C 下行丢包率(%), + * 该值越小越好,例如,丢包率为0表示网络很好, + * 丢包率为30@%则意味着 SDK 向服务器发送的数据包中会有30@%丢失在下行传输中。 + + + +C -> S 上行丢包率(%), + * 该值越小越好,例如,丢包率为0表示网络很好, + * 丢包率为30@%则意味着 SDK 向服务器发送的数据包中会有30@%丢失在上行传输中。 + + + +5.19 统计数据 + + + +该线路的总丢包率(%) + * + * 这个值越小越好,例如,丢包率为0表示网络很好。 + * 丢包率是该线路的 userId 从上行到服务器再到下行的总丢包率。 + * 如果 downLoss 为0,但是 finalLoss 不为0,说明该 userId 上行时出现了无法恢复的丢包。 + + + +5.18 远端成员的音视频统计信息 + + + +5.17 自己本地的音视频统计信息 + + + +【字段含义】房间签名 [选填],当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。 +【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。 + + +【字段含义】用户签名 [选填],当前 userId 对应的验证签名,相当于登录密码。不填时,SDK 会继续使用旧的 userSig, + 但用户必须保证旧的 userSig 仍在有效期内,否则会造成进房失败等后果。 +【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。 + + +【字段含义】字符串房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。 + + +【字段含义】数字房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【推荐取值】取值范围:1 - 4294967294。 +【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。 + + +5.16 切换房间参数 + + + +【字段含义】音效音量 +【推荐取值】取值范围为0 - 100;默认值:100 + + +【字段含义】音效是否上行 +【推荐取值】YES:音效在本地播放的同时,会上行至云端,因此远端用户也能听到该音效;NO:音效不会上行至云端,因此只能在本地听到该音效。默认值:NO + + +【字段含义】循环播放次数 +【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音效一次;1表示播放音效两次;以此类推 + + +【字段含义】音效路径,支持的文件格式:aac, mp3。 + + +【字段含义】音效 ID, +【特殊说明】SDK 允许播放多路音效,因此需要音效 ID 进行标记,用于控制音效的开始、停止、音量等 + + +5.15 音效 + + + +【字段含义】文件路径(必填),录音文件的保存路径。该路径需要用户自行指定,请确保路径存在且可写。 +【特别说明】该路径需精确到文件名及格式后缀,格式后缀决定录音文件的格式,目前支持的格式有 PCM、WAV 和 AAC。 + 例如,指定路径为 path/to/audio.aac,则会生成一个 AAC 格式的文件。 + 请指定一个有读写权限的合法路径,否则录音文件无法生成。 + + + 5.14 录音参数 + + 请正确填写参数,确保录音文件顺利生成。 + + + +旁路转推的 URL + + +腾讯云直播 bizid,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取 + + +腾讯云 AppID,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取 + + +5.13 CDN 旁路推流参数 + + + +【字段含义】输出到 CDN 上的直播流 ID + 如不设置该参数,SDK 会执行默认逻辑,即房间里的多路流会混合到该接口调用者的视频流上,也就是 A+B =>A; + 如果设置该参数,SDK 会将房间里的多路流混合到您指定的直播流 ID 上,也就是 A+B =>C。 +【推荐取值】默认值:null,即房间里的多路流会混合到该接口调用者的视频流上。 + + +【字段含义】 数组 mixUsersArray 的大小 + + +【字段含义】每一路子画面的位置信息 + + +【字段含义】最终转码后的音频声道数 +【推荐取值】默认值:1。取值范围为 [1,2] 中的整型。 + + +【字段含义】最终转码后的音频码率。 +【推荐取值】默认值:64kbps,取值范围是 [32,192]。 + + +【字段含义】最终转码后的音频采样率。 +【推荐取值】默认值:48000Hz。支持12000HZ、16000HZ、22050HZ、24000HZ、32000HZ、44100HZ、48000HZ。 + + +【字段含义】混合后画面的底色颜色,默认为黑色,格式为十六进制数字,比如:“0x61B9F1” 代表 RGB 分别为(97,158,241)。 +【推荐取值】默认值:0x000000,黑色 + + +【字段含义】最终转码后的视频分辨率的关键帧间隔(又称为 GOP)。 +【推荐取值】默认值:2,单位为秒,取值范围是 [1,8]。 + + +【字段含义】最终转码后的视频分辨率的帧率(FPS)。 +【推荐取值】默认值:15fps,取值范围是 (0,30]。 + + +【字段含义】最终转码后的视频分辨率的码率(kbps)。 +【推荐取值】如果填0,后台会根据videoWidth和videoHeight来估算码率,您也可以参考枚举定义TRTCVideoResolution_640_480的注释。 + + +【字段含义】最终转码后的视频分辨率的高度。 +【推荐取值】推荐值:640px ,如果你是纯音频推流,请将 width × height 设为 0px × 0px,否则混流后会携带一条画布背景的视频流。 + + +【字段含义】最终转码后的视频分辨率的宽度。 +【推荐取值】推荐值:360px ,如果你是纯音频推流,请将 width × height 设为 0px × 0px,否则混流后会携带一条画布背景的视频流。 + + +【字段含义】腾讯云直播 bizid +【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】后,在“直播信息”中获取 + + +【字段含义】腾讯云直播 AppID +【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】后,在“直播信息”中获取 + + +【字段含义】转码 config 模式 + + + 5.12 云端混流(转码)配置 + + 包括最终编码质量和各路画面的摆放位置 + + + + 5.11 混流参数配置模式 + + + + +预排版模式,通过占位符提前对各路画面进行排布 +此模式下,您依然需要设置 mixUsers 参数,但可以将 userId 设置为占位符,可选的占位符有: +- "$PLACE_HOLDER_REMOTE$" : 指代远程用户的画面,可以设置多个。 +- "$PLACE_HOLDER_LOCAL_MAIN$" : 指代本地摄像头画面,只允许设置一个。 +- "$PLACE_HOLDER_LOCAL_SUB$" : 指代本地屏幕分享画面,只允许设置一个。 +但是您可以不需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调进行实时调整, +只需要在进房成功后调用一次 setMixTranscodingConfig() 即可,之后 SDK 会自动将真实的 userId 补位到您设置的占位符上。 + + +纯音频模式,适用于语音通话(AudioCall)和语音聊天室(VoiceChatRoom)等纯音频场景。 +只需要在进房后通过 setMixTranscodingConfig() 接口设置一次,之后 SDK 就会自动把房间内所有上麦用户的声音混流到当前用户的直播流上。 +此模式下,您无需设置 TRTCTranscodingConfig 中的 mixUsers 参数,只需设置 audioSampleRate、audioBitrate 和 audioChannels 等参数。 + + +全手动模式,灵活性最高,可以自由组合出各种混流方案,但易用性最差。 +此模式下,您需要填写 TRTCTranscodingConfig 中的所有参数,并需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调, +以便根据当前房间中各个上麦用户的音视频状态不断地调整 mixUsers 参数,否则会导致混流失败。 + + +非法值 + + +参与混合的是主路画面(TRTCVideoStreamTypeBig)或屏幕分享(TRTCVideoStreamTypeSub)画面 + + +该用户是不是只开启了音频 + + +图层层次(1 - 15)不可重复 + + +图层位置坐标以及大小,左上角为坐标原点(0,0) (绝对像素值) + + +参与混流的 roomId,跨房流传入的实际 roomId,当前房间流传入 roomId = nullptr + + +参与混流的 userId + + + 5.10 云端混流中每一路子画面的位置信息 + + TRTCMixUser 用于指定每一路(即每一个 userId)视频画面的具体摆放位置 + + + +延迟(毫秒),指当前设备到腾讯云服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms + + +下行丢包率,范围是0 - 1.0,例如,0.2表示每从服务器收取10个数据包可能会在中途丢失2个。 + + +上行丢包率,范围是0 - 1.0,例如,0.3表示每向服务器发送10个数据包可能会在中途丢失3个。 + + +网络质量,内部通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分便越高 + + +服务器 IP 地址 + + + 5.9 网络测速结果 + + 您可以在用户进入房间前通过 TRTCCloud 的 startSpeedTest 接口进行测速 (注意:请不要在通话中调用), + 测速结果会每2 - 3秒钟返回一次,每次返回一个 IP 地址的测试结果。 + + @note - quality 是内部通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分便越高。 + @note - upLostRate 是指上行丢包率。例如,0.3表示每向服务器发送10个数据包可能会在中途丢失3个。 + @note - downLostRate 是指下行丢包率。例如,0.2表示每从服务器收取10个数据包可能会在中途丢失2个。 + @note - rtt 是指当前设备到腾讯云服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms + + + + 5.8 音频帧数据 + + + + + 5.7 视频帧数据 + + + + +说话者的音量, 取值范围0 - 100 + + +说话者的 userId,字符编码格式为 UTF-8 + + + 5.6 音量大小 + + 表示语音音量的评估大小,通过这个数值,您可以在 UI 界面上用图标表征 userId 是否有在说话。 + + + + 5.5 视频质量 + + 表示视频质量的好坏,通过这个数值,您可以在 UI 界面上用图标表征 userId 的通话线路质量 + + + +【字段含义】视频分辨率(云端控制 - 客户端控制) +【推荐取值】云端控制 +【特别说明】 + - Server 模式(默认):云端控制模式,若无特殊原因,请直接使用该模式 + - Client 模式:客户端控制模式,用于 SDK 开发内部调试,客户请勿使用 + + +【字段含义】弱网下是“保清晰”或“保流畅” +【特别说明】 + - 弱网下保流畅:在遭遇弱网环境时,画面会变得模糊,且出现较多马赛克,但可以保持流畅不卡顿。 + - 弱网下保清晰:在遭遇弱网环境时,画面会尽可能保持清晰,但可能容易出现卡顿 + + + 5.4 网络流控相关参数 + + 网络流控相关参数,该设置决定了SDK在各种网络环境下的调控方向(比如弱网下是“保清晰”或“保流畅”) + + + + 5.3 画面渲染参数 + + 您可以通过设置此参数来控制画面的旋转、填充、镜像模式 + + + +【字段含义】是否允许调整分辨率 +【推荐取值】 + - 手机直播建议选择 false。 + - 视频通话模式,若更关注流畅性,建议选择 true,此时若遇到带宽有限的弱网,SDK 会自动降低分辨率以保障更好的流畅度(仅针对 TRTCVideoStreamTypeBig 生效)。 + - 默认值:false。 +【特别说明】若有录制需求,选择 true 时,请确保通话过程中,调整分辨率不会影响您的录制效果。 + + +【字段含义】最低视频码率,SDK 会在网络不佳的情况下主动降低视频码率,最低会降至 +minVideoBitrate 所设定的数值。 【推荐取值】 + - 如果您追求“允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 + 60%; + - 如果您追求“允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为 200kbps; + - 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK + 的自适应调节能力; + - 默认值:0,此时最低码率由 SDK 根据分辨率情况,自动设置合适的数值。 +【特别说明】 + - 当您把分辨率设置的比较高时,minVideoBitrate + 不适合设置的太低,否则会出现画面模糊和大范围的马赛克宏块。 + 比如把分辨率设置为 720p,把码率设置为 + 200kbps,那么编码出的画面将会出现大范围区域性马赛克。 + + +【字段含义】视频上行码率 +【推荐取值】推荐设置请参考本文件前半部分 TRTCVideoResolution 定义处的注释说明 +【特别说明】码率太低会导致视频中出现大量马赛克 + + +【字段含义】视频采集帧率 +【推荐取值】15fps 或 20fps。5fps以下,卡顿感明显。10fps以下,会有轻微卡顿感。20fps以上,则过于浪费(电影的帧率为24fps)。 +【特别说明】很多 Android 手机的前置摄像头并不支持15fps以上的采集帧率,部分过于突出美颜功能的 Android 手机前置摄像头的采集帧率可能低于10fps。 + + +【字段含义】分辨率模式(横屏分辨率 - 竖屏分辨率) +【推荐取值】手机直播建议选择 Portrait,Window 和 Mac 建议选择 Landscape。 +【特别说明】如果 videoResolution 指定分辨率 640 × 360,resMode 指定模式为 Portrait,则最终编码出的分辨率为360 × 640。 + + +【字段含义】 视频分辨率 +【推荐取值】 + - 视频通话建议选择360 × 640及以下分辨率,resMode 选择 Portrait。 + - 手机直播建议选择540 × 960,resMode 选择 Portrait。 + - Window 和 iMac 建议选择640 × 360及以上分辨率,resMode 选择 Landscape。 +【特别说明】 + TRTCVideoResolution 默认只能横屏模式的分辨率,例如640 × 360。 + 如需使用竖屏分辨率,请指定 resMode 为 Portrait,例如640 × 360结合 Portrait 则为360 × 640。 + + + 5.2 视频编码参数 + + 该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量)。 + + + +【字段含义】业务数据(非必填),部分高级特性才需要使用该字段。 +【推荐取值】不建议使用 + + +【字段含义】房间签名(非必填),当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。 +【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。 + + +【字段含义】设置云端录制完成后的回调消息中的 "userdefinerecordid" 字段内容,便于您更方便的识别录制回调。 +【推荐取值】限制长度为64字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。 +【参考文档】[云端录制](https://cloud.tencent.com/document/product/647/16823)。 + + +【字段含义】绑定腾讯云直播 CDN 流 ID[非必填],设置之后,您就可以在腾讯云直播 CDN 上通过标准直播方案(FLV或HLS)播放该用户的音视频流。 +【推荐取值】限制长度为64字节,可以不填写,一种推荐的方案是使用 “sdkappid_roomid_userid_main” 作为 streamid,这样比较好辨认且不会在您的多个应用中发生冲突。 +【特殊说明】要使用腾讯云直播 CDN,您需要先在[控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启“启动自动旁路直播”开关。 +【参考文档】[CDN 旁路直播](https://cloud.tencent.com/document/product/647/16826)。 + + +【字段含义】直播场景下的角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom),视频通话场景下指定无效。 +【推荐取值】默认值:主播(TRTCRoleAnchor) + + +【字段含义】房间号码(必填),在同一个房间内的用户可以看到彼此并进行视频通话。 +【推荐取值】您可以自定义设置该参数值,但不可重复。如果您的用户帐号 ID (userId)为数字类型,可直接使用创建者的用户 ID 作为 roomId。 + + +【字段含义】用户签名(必填),当前 userId 对应的验证签名,相当于登录密码。 +【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。 + + +【字段含义】用户标识(必填),当前用户的 userId,相当于用户名,使用 UTF-8 编码。 +【推荐取值】如果一个用户在您的帐号系统中的 ID 为“abc”,则 userId 即可设置为“abc”。 + + +【字段含义】应用标识(必填),腾讯视频云基于 sdkAppId 完成计费统计。 +【推荐取值】在 [实时音视频控制台](https://console.cloud.tencent.com/rav/) 创建应用后可在帐号信息页面中得到该 ID。 + + + 5.1 进房相关参数 + + 只有该参数填写正确,才能顺利调用 enterRoom 进入 roomId 所指定的音视频房间。 + + + +4.5 屏幕分享目标信息 + + + +4.4 水印图片的源类型 + + + +4.3 设备类型 + +以下定义仅用于兼容原有接口,具体定义参见 ITXDeviceManager.h 文件 + + + +4.2 设备操作 + + + +4.1 Log 级别 + + + + 3.2 声音音质 + + 音频音质用来衡量声音的保真程度,TRTCAudioQualitySpeech 适用于通话场景,TRTCAudioQualityMusic 适用于高音质音乐场景。 + + + +高音质:采样率:48k;双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。 + + +默认音质:采样率:48k;单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。 + + +流畅音质:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。 + + + 3.1 音频帧的格式 + + + + + 2.4 画质偏好 + + 指当 TRTC SDK 在遇到弱网络环境时,您期望“保清晰”或“保流畅”: + + - Smooth:弱网下保流畅。即在遭遇弱网环境时首先确保声音的流畅和优先发送,画面会变得模糊且会有较多马赛克,但可以保持流畅不卡顿。 + - Clear:弱网下保清晰。即在遭遇弱网环境时,画面会尽可能保持清晰,但可能会更容易出现卡顿。 + + + + 2.3 流控模式 + + TRTC SDK 内部需要时刻根据网络情况调整内部的编解码器和网络模块,以便能够对网络的变化做出反应。 + 为了支持快速算法升级,SDK 内部设置了两种不同的流控模式: + - ModeServer:云端控制,默认模式,推荐选择。 + - ModeClient:本地控制,用于 SDK 开发内部调试,客户请勿使用。 + + @note 推荐您使用云端控制,这样每当我们升级 Qos 算法时,您无需升级 SDK 即可体验更好的效果。 + + + + 2.2 角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom) + + 在直播场景中,多数用户仅为观众,个别用户是主播,这种角色区分有利于 TRTC 进行更好的定向优化。 + + - Anchor:主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。 + - Audience:观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。 + + + + 2.1 应用场景 + + TRTC 可用于视频会议和在线直播等多种应用场景,针对不同的应用场景,TRTC SDK 的内部会进行不同的优化配置: + - TRTCAppSceneVideoCall :视频通话场景,适合[1对1视频通话]、[300人视频会议]、[在线问诊]、[视频聊天]、[远程面试]等。 + - TRTCAppSceneLIVE :视频互动直播,适合[视频低延时直播]、[十万人互动课堂]、[视频直播 PK]、[视频相亲房]、[互动课堂]、[远程培训]、[超大型会议]等。 + - TRTCAppSceneAudioCall :语音通话场景,适合[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等。 + - TRTCAppSceneVoiceChatRoom:语音互动直播,适合:[语音低延时直播]、[语音直播连麦]、[语聊房]、[K 歌房]、[FM 电台]等。 + + + + 1.10 画面渲染镜像类型 + + TRTC 的画面镜像提供下列设置模式 + + + +1.9 视频数据包装格式 + + + + 1.8 视频像素格式 + + TRTC SDK 提供针对视频的自定义采集和自定义渲染功能,在自定义采集功能中,您可以用下列枚举值描述您采集的视频像素格式。 + 在自定义渲染功能中,您可以指定您期望 SDK 回调的视频像素格式。 + + + + 1.7 美颜(磨皮)算法 + + TRTC SDK 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案。 + + + + 1.6 视频画面旋转方向 + + TRTC SDK 提供了对本地和远程画面的旋转角度设置 API,下列的旋转角度都是指顺时针方向的。 + + + + + 1.5 视频画面填充模式 + + 如果画面的显示分辨率不等于画面的原始分辨率,就需要您设置画面的填充模式: + - TRTCVideoFillMode_Fill,图像铺满屏幕,超出显示视窗的视频部分将被裁剪,画面显示可能不完整。 + - TRTCVideoFillMode_Fit,图像长边填满屏幕,短边区域会被填充黑色,但画面的内容肯定是完整的。 + + + +图像长边填满屏幕,短边区域会被填充黑色 + + +图像铺满屏幕,超出显示视窗的视频部分将被裁剪 + + + 1.4 画质级别 + + TRTC SDK 对画质定义了六种不同的级别,Excellent 表示最好,Down 表示不可用。 + + + + 1.3 视频流类型 + + TRTC 内部有三种不同的音视频流,分别为: + - 主画面:最常用的一条线路,一般用来传输摄像头的视频数据。 + - 小画面:跟主画面的内容相同,但是分辨率和码率更低。 + - 辅流画面:一般用于屏幕分享或远程播片(例如老师播放视频给学生观看)。 + + @note - 如果主播的上行网络和性能比较好,则可以同时送出大小两路画面。 + @note - SDK 不支持单独开启小画面,小画面必须依附于主画面而存在。 + + + + 1.2 视频分辨率模式 + + - 横屏分辨率:TRTCVideoResolution_640_360 + TRTCVideoResolutionModeLandscape = 640 × 360 + - 竖屏分辨率:TRTCVideoResolution_640_360 + TRTCVideoResolutionModePortrait = 360 × 640 + + + +窗口尺寸和位置结构体 + +@defgroup TRTCTypeDef_cplusplus 关键类型定义 +腾讯云视频通话功能的关键类型定义 +@{ + 1.1 视频分辨率 + + 此处仅定义横屏分辨率,如需使用竖屏分辨率(例如360 × 640),需要同时指定 TRTCVideoResolutionMode 为 Portrait。 + + + + 渲染控件 + TXView根据编译平台的不同,做不同的类型转换,来保证兼容性 + + + + +停止扬声器测试 +@return 0:操作成功 负数:失败 +@note 此接口只支持Mac和Windows平台 + + + + 开始扬声器测试 + + 该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。 + @param filePath 声音文件的路径 + @return 0:操作成功 负数:失败 + @note 此接口只支持Mac和Windows平台 + + + +结束麦克风测试 +@return 0:操作成功 负数:失败 +@note 此接口只支持Mac和Windows平台 + + + + 开始麦克风测试 + + @param interval 音量回调间隔 + @return 0:操作成功 负数:失败 + @note 此接口只支持Mac和Windows平台 + + + +结束摄像头测试 +@return 0:操作成功 负数:失败 +@note 此接口只支持Mac和Windows平台 + + + + 开始进行摄像头测试 + 会触发 onFirstVideoFrame 回调接口 + + @param callback 摄像头预览自定义渲染画面回调 + @return 0:操作成功 负数:失败 + @note - 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + - 此接口只支持Windows平台 + + + + 开始摄像头测试 + + @param view 预览控件所在的父控件 + @return 0:操作成功 负数:失败 + @note - 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + - 此接口只支持Mac和Windows平台 + + + + 查询当前设备是否静音 + + @param type 设备类型,根据设备类型获取当前设备状态。详见TXMediaDeviceType定义。 + @return true : 当前设备已静音;false : 当前设备未静音 + @note type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker + + + + 设置当前设备是否静音 + + @param type 设备类型,根据设备类型设置当前设备状态。详见TXMediaDeviceType定义。 + @param mute 是否静音/禁画 + @return 0:操作成功 负数:失败 + @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker + - 此接口只支持Mac和Windows平台 + + + + 获取当前设备的音量 + + @param type 设备类型,根据设备类型获取当前设备音量。详见TXMediaDeviceType定义。 + + @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker + - 此接口只支持Mac和Windows平台 + + + + 设置当前设备的音量 + + @param type 设备类型,根据设备类型获取当前设备音量。详见TXMediaDeviceType定义。 + @param volume 音量大小 + @return 0:操作成功 负数:失败 + @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker + - 此接口只支持Mac和Windows平台 + + + + 获取当前使用的设备 + + @param type 设备类型,根据设备类型获取当前设备信息。详见TXMediaDeviceType定义。 + @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + @note 此接口只支持Mac和Windows平台 + + + + 指定当前设备 + + @param type 设备类型,根据设备类型指定当前设备。详见TXMediaDeviceType定义。 + @param deviceId 从 getDevicesList 中得到的设备 ID + @return 0:操作成功 负数:失败 + @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker、TXMediaDeviceTypeCamera + - 此接口只支持Mac和Windows平台 + + + + 获取设备列表 + + @param type 设备类型,指定需要获取哪种设备的列表。详见TXMediaDeviceType定义。 + + @note - 如果 delete ITXDeviceCollection* 指针会编译错误,SDK 维护 ITXDeviceCollection 对象的生命周期。 + - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker、TXMediaDeviceTypeCamera + - 此接口只支持Mac和Windows平台 + + + +@brief 获取完设备信息后,调用release释放资源。 + + + +@return 设备PID,字符编码格式是UTF-8 + + + +@return 设备名称,字符编码格式是UTF-8 + + + +设备 Item 信息 + + + +@brief 遍历完设备后,调用release释放资源。 + + + +@return 设备PID,字符编码格式是UTF-8 + + + +@return 设备名称,字符编码格式是UTF-8 + + + +@return 设备个数 + + + +设备列表 + + + +设备类型 + + + + 声音播放路由(仅适用于移动端设备) + + 一般手机都有两个扬声器,设置音频路由的作用就是要决定声音从哪个扬声器播放出来: + - Speakerphone:扬声器,位于手机底部,声音偏大,适合外放音乐。 + - Earpiece:听筒,位于手机顶部,声音偏小,适合通话。 + + + +@defgroup ITXDeviceManager_cplusplus ITXDeviceManager +腾讯云视频通话功能的设备管理接口类 +@{ + 系统音量类型(仅适用于移动端设备) + + 智能手机一般具备两种系统音量类型,即通话音量类型和媒体音量类型。 + - 通话音量:手机专门为通话场景设计的音量类型,使用手机自带的回声抵消功能,音质相比媒体音量类型较差, + 无法通过音量按键将音量调成零,但是支持蓝牙耳机上的麦克风。 + + - 媒体音量:手机专门为音乐场景设计的音量类型,音质相比于通话音量类型要好,通过通过音量按键可以将音量调成零。 + 使用媒体音量类型时,如果要开启回声抵消(AEC)功能,SDK 会开启内置的声学处理算法对声音进行二次处理。 + 在媒体音量模式下,蓝牙耳机无法使用自带的麦克风采集声音,只能使用手机上的麦克风进行声音采集。 + + SDK 目前提供了三种系统音量类型的控制模式,分别为: + - Auto:“麦上通话,麦下媒体”,即主播上麦时使用通话音量,观众不上麦则使用媒体音量,适合在线直播场景。 + 如果您在 enterRoom 时选择的场景为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom,SDK 会自动选择该模式。 + + - VOIP:全程使用通话音量,适合多人会议场景。 + 如果您在 enterRoom 时选择的场景为 TRTCAppSceneVideoCall 或 TRTCAppSceneAudioCall,SDK 会自动选择该模式。 + + - Media:通话全程使用媒体音量,不常用,适合个别有特殊需求(如主播外接声卡)的应用场景。 + + + + +通话全程使用媒体音量,不常用,适合个别有特殊需求(如主播外接声卡)的应用场景。 + + + +请求视频位成功 + + + + +连接接口机服务器成功 + + + + +拉取接口机服务器地址成功 + + + + +音频状态位变化通知 + + + + +视频状态位变化通知 + + + + +退房通知 + + + + +进房通知 + + + + +自己进入房间失败 + + + + +WiFi 切换到4G 会触发断线重连,此时需要重新进入房间(拉取最优的服务器地址) + + + + +下发房间成员列表(不包括自己) + + + + +退出房间 + + + + +进入房间成功 + + + + +TXLivePlayer 接收到http响应头中的 flvSessionKey 信息 + + + + +音频设备的route发生改变,即当前的输入输出设备发生改变,比如耳机被拔出 + + + + +释放麦克风占用 + + + + +视频流MetaData事件 + + + + +麦克风启动成功 + + + + +音频首次播放(SDK 内部事件,不会对外抛出) + + + + +音频正在播放(SDK 内部事件,不会对外抛出) + + + + +音频正在加载(SDK 内部事件,不会对外抛出) + + + + +音频首次加载(SDK 内部事件,不会对外抛出) + + + + +软解码器启动成功(SDK 内部事件,不会对外抛出) + + + + +硬解码器启动成功(SDK 内部事件,不会对外抛出) + + + + +视频解码器缓存帧数过多,超过40帧(SDK 内部事件,不会对外抛出) + + + + +点播,视频播放 Seek 完成(SDK 内部事件,不会对外抛出) + + + + +点播,DNS 解析完成(SDK 内部事件,不会对外抛出) + + + + +点播,收到首帧数据(SDK 内部事件,不会对外抛出) + + + + +点播,TCP 连接成功(SDK 内部事件,不会对外抛出) + + + + +直播,切流成功(切流可以播放不同画面大小的视频) + + + + +点播,loading 结束 + + + + +点播,视频加载完毕 + + + + +消息事件 + + + + +视频旋转角度发生改变 + + + + +点播,获取点播文件信息成功 + + + + +下行视频分辨率改变 + + + + +解码器启动 + + + + +视频播放 loading + + + + +视频播放结束 + + + + +视频播放进度 + + + + +视频播放开始 + + + + +渲染首个视频数据包(IDR) + + + + +直播,已经与 RTMP 服务器握手完毕,开始拉流 + + + + +直播,已经连接 RTMP 拉流服务器 + + + + +本地录制状态通知 + + + + +本地录制结果 + + + + +软编码器启动成功 + + + + +硬编码器启动成功 + + + + +直播,与 RTMP 服务器连接后,收到 NetStream.Publish.Start 消息,表明流发布成功(SDK 内部事件,不会对外抛出) + + + + +关闭摄像头完成(Windows 和 Mac 版 SDK 使用) + + + + +摄像头设备重新可用(Windows 和 Mac 版 SDK 使用) + + + + +摄像头设备已被移出(Windows 和 Mac 版 SDK 使用) + + + + +一帧截图完成 + + + + +编码器启动成功 + + + + +首帧画面采集完成 + + + + +码率动态调整 + + + + +上行动态调整分辨率 + + + + +录屏启动成功 + + + + +打开摄像头成功 + + + + +直播,已经与 RTMP 服务器握手完毕,开始推流 + + + + +直播,已经连接 RTMP 推流服务器 + + + + +网络状况不佳:上行带宽太小,上传数据受阻 + + + + +网络断连,已启动自动重连 + + + + +直播,连接失败,该流地址无视频(SDK 内部错误码,不会对外抛出) + + + + +直播,connect 服务器调用失败(SDK 内部错误码,不会对外抛出) + + + + +直播,超过30s 没有数据发送,主动断开连接 + + + + +直播,RTMP 读失败(SDK 内部错误码,不会对外抛出) + + + + +直播,RTMP 写失败(SDK 内部错误码,不会对外抛出) + + + + +直播,RTMP 读/写失败,将会断开连接 + + + + +直播,服务器主动断开 + + + + +直播,与 RTMP 服务器握手失败 + + + + +直播,服务器连接失败 + + + + +直播,DNS 解析失败 + + + + +网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀 + + + + +直播,网络断连, 已启动自动重连(自动重连连续失败超过三次会放弃) + + + + +直播,网络断连, 已启动自动重连(自动重连连续失败超过三次会放弃) + + + + +网络状况不佳:上行带宽太小,上传数据受阻 + + + + +当前是观众角色,忽略上行音视频数据 + + + + +网络断开连接 + + + + +音频录制写入文件失败 + + + + +视频采集已开始 + + + + +视频渲染失败 + + + + +软解码器启动失败 + + + + +当前流硬解第一个 I 帧失败,SDK 自动切软解 + + + + +硬解启动失败,采用软解码 + + + + +当前视频播放出现卡顿(用户直观感受) + + + + +当前音频帧解码失败 + + + + +当前视频帧解码失败 + + + + +音频播放设备不可用(例如被占用) + + + + +音频采集设备不可用(例如被占用) + + + + +用户未授权当前应用使用麦克风 + + + + +没有检测到可用的扬声器设备 + + + + +没有检测到可用的麦克风设备 + + + + +用户未授权当前应用使用摄像头 + + + + +没有检测到可用的摄像头设备 + + + + +摄像头采集分辨率被降低,以满足当前帧率和性能最优解。 + + + + +软编码启动失败 + + + + +摄像头采集帧率不足,部分自带美颜算法的 Android 手机上会出现 + + + + +视频编码器从软编码自动切换到硬编码,一般是由于 CPU 使用率过高触发的 + + + + +硬编码启动失败,采用软编码 + + + + +通过域名进行0x1请求 + + + + +混流参数校验失败 + + + + +userDefineRecordId错误 + + + + +自定义流id错误 + + + + +请求通用配置超时 + + + + +服务器内部错误,请重试 + + + + +创建账号数量超过已购买预付费数量限制 + + + + +票据因过期原因校验失败 + + + + +票据校验失败,请检查各项参数是否正确 + + + + +sdkAppId 填写错误 + + + + +登录状态无效,请使用 usersig 重新鉴权 + + + + +安全原因被限制 + + + + +usersig 已经失效,请重新生成,再次尝试 + + + + +帐号已被拉入黑名单,请联系 TLS 帐号支持 QQ 3268519604 + + + + +sdkAppId 未找到,请确认是否已经在腾讯云上配置 + + + + +内部第三方票据验证超时,请重试,如多次重试不成功,请@TLS 帐号支持,QQ 3268519604 + + + + +内部第三方票据验证超时,请重试,如多次重试不成功,请@TLS 帐号支持,QQ 3268519604 + + + + +sig 中 sdkAppId 与请求时的 sdkAppId 不匹配,请检查登录时填写的 sdkAppId 与 sig 中的是否一致 + + + + +sig 中 identifier 与请求时的 identifier 不匹配,请检查登录时填写的 identifier 与 sig 中的是否一致 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +用业务公钥验证 sig 失败,请确认生成的 usersig 使用的私钥和 sdkAppId 是否对应 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +sig 校验失败,请确认下 sig 内容是否被截断,如缓冲区长度不够导致的内容截断 + + + + +sig 校验失败,请确认下 sig 内容是否被截断,如缓冲区长度不够导致的内容截断 + + + + +sig 过期,请尝试重新生成。如果是刚生成,就过期,请检查有效期填写的是否过小,或者填的 0 + + + + +Protobuf 序列化错误 + + + + +无法保存用户自定义 recordId + + + + +代理机超出限制 + + + + +未定义角色 + + + + +未定义命令字 + + + + +JSON 串解析失败 + + + + +房间满员 + + + + +房间号超过限制 + + + + +房间号非法 + + + + +请求 I 帧参数错误 + + + + +请求 I 帧房间用户太多 + + + + +请求 I 帧目标用户不存在 + + + + +请求 I 帧包格式错误 + + + + +请求 I 帧未知 opType + + + + +参数错误 + + + + +没有权限请求视频 + + + + +用户被删除状态 + + + + +当前用户没有上行辅路 + + + + +没有空闲路由表 + + + + +没有权限上视频 + + + + +辅路抢视频位、申请辅路请求类型参数错误 + + + + +没有权限进入房间 + + + + +没有权限创建房间 + + + + +locationid 错误 + + + + +频繁切换终端 + + + + +查找用户失败 + + + + +房间添加用户失败 + + + + +房间不存在 + + + + +签名过期 + + + + +签名错误 + + + + +创建房间失败 + + + + +无效的房间 Id + + + + +后台错误 + + + + +token里面的tinyid和进房信令tinyid不同 或是 进房信令没有token + + + + +后台用户位置标识 locationid 错误 + + + + +后台房间标识 roomid 错误 + + + + +房间不存在 + + + + +签名超时 + + + + +签名错误 + + + + +token 超时 + + + + +userSig 校验失败,请检查 TRTCParams.userSig 是否填写正确 + + + + +生成公钥失败 + + + + +无效请求, 分配接口机失败 + + + + +非法SDKAppid + + + + +房间号非法 + + + + +房间号转换出错 + + + + +场景或角色错误 + + + + +房间号错误 + + + + +数据库查询失败(房间相关存储信息) + + + + +HTTPS 请求时,生成 token 错误 + + + + +HTTPS 请求时,生成加密 key 错误 + + + + +权限位校验失败 + + + + +无效的命令字 + + + + +HTTPS token 超时 + + + + +生成签名错误 + + + + +分配接口机错误 + + + + +TOKEN 错误 + + + + +请求解包错误 + + + + +请求发送Json 信令超时 + + + + +请求接口机 IP 返回的列表为空的 + + + + +请求 AES TOKEN 时,server 返回的内容是空的 + + + + +请求 token 无效参数 + + + + +请求接收视频项超时 + + + + +请求关闭视频超时 + + + + +请求状态上报超时 + + + + +请求修改视频能力项超时 + + + + +请求视频数据超时 + + + + +请求视频位超时 + + + + +请求 IP 和 sig 超时,请检查网络是否正常,或网络防火墙是否放行 UDP 访问下列 IP 和域名 query.tencent-cloud.com:8000 162.14.23.140:8000 162.14.7.49:8000 + + + + +请求 token HTTPS 超时,请检查网络是否正常,或网络防火墙是否放行 HTTPS 访问 official.opensso.tencent-cloud.com:443 + + + + +请求视频位失败 + + + + +连接接口机服务器失败 + + + + +拉取接口机服务器地址失败 + + + + +心跳失败,客户端定时向服务器发送数据包,告诉服务器自己活着,这个错误通常是发包超时 + + + + +直播,RTMPACC 低延时拉流失败,且经过多次重试无法恢复 + + + + +直播,服务器拒绝连接请求 + + + + +直播,切流失败(切流可以播放不同画面大小的视频) + + + + +点播,获取点播文件信息失败 + + + + +点播,音视频流解密失败 + + + + +H265 解码失败 + + + + +播放的文件不存在 + + + + +直播,获取加速拉流的地址失败 + + + + +直播,网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放 + + + + +直播,服务器拒绝连接请求,可能是该推流地址已经被占用,或者 TXSecret 校验失败,或者是过期了,或者是欠费了 + + + + +直播,网络不可用,请确认 Wi-Fi、移动数据或者有线网络是否正常 + + + + +直播,连接推流服务器失败(若支持智能选路,IP 全部失败) + + + + +直播,推流地址非法,例如不是 RTMP 协议的地址 + + + + +直播,推流出现网络断开,且经过多次重试无法恢复 + + + + +连麦请求序号错乱 + + + + +被连麦用户达到资源上限 + + + + +被连麦用户已被删除 + + + + +被连麦用户不存在 + + + + +被连麦房间达到连麦上限 + + + + +被连麦房间不存在 + + + + +取消跨房间连麦失败 + + + + +跨房间连麦失败 + + + + +本用户未发起连麦 + + + + +本房间无连麦 + + + + +跨房间连麦签名不匹配 + + + + +跨房间连麦签名时间戳错误 + + + + +跨房间连麦签名解析错误 + + + + +未找到跨房间连麦签名解密密钥 + + + + +跨房间连麦签名解密失败 + + + + +跨房间连麦无签名 + + + + +跨房间连麦请求格式错误 + + + + +跨房间连麦请求超时 + + + + +跨房间连麦重试次数耗尽 + + + + +达到跨房间连麦上限 + + + + +不支持跨房间连麦 + + + + +当前是观众角色,不能请求或断开跨房连麦,需要先 switchRole() 到主播 + + + + +无效参数 + + + + +请求退出连麦超时 + + + + +请求连麦超时 + + + + +停止向腾讯云的直播 CDN 推流信令异常 + + + + +停止向腾讯云的直播 CDN 推流信令超时 + + + + +开始向腾讯云的直播 CDN 推流信令异常 + + + + +开始向腾讯云的直播 CDN 推流信令超时 + + + + +云端混流回包异常 + + + + +旁路转推回包异常 + + + + +云端混流请求超时 + + + + +旁路转推请求超时 + + + + +设置的 buffer type 不支持 + + + + +设置的 pixel format 不支持 + + + + +不支持的音频采样率 + + + + +音频帧编码失败,例如传入自定义音频数据,SDK 无法处理 + + + + +不支持的视频分辨率 + + + + +视频帧编码失败,例如 iOS 设备切换到其他应用时,硬编码器可能被系统释放,再切换回来时,硬编码器重启前,可能会抛出 + + + + +录屏被系统中止 + + + + +其他用户正在上行辅路 + + + + +没有权限上行辅路 + + + + +录屏失败,在 Android 平台,需要5.0以上的系统,在 iOS 平台,需要11.0以上的系统 + + + + +开始录屏失败,如果在移动设备出现,可能是权限被用户拒绝了,如果在 Windows 或 Mac 系统的设备出现,请检查录屏接口的参数是否符合要求 + + + + +停止扬声器失败 + + + + +扬声器设置参数失败 + + + + +打开扬声器失败,例如在 Windows 或 Mac 设备,扬声器的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序 + + + + +停止麦克风失败 + + + + +麦克风正在被占用中,例如移动设备正在通话时,打开麦克风会失败 + + + + +麦克风设置参数失败 + + + + +麦克风设备未授权,通常在移动设备出现,可能是权限被用户拒绝了 + + + + +打开麦克风失败,例如在 Windows 或 Mac 设备,麦克风的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序 + + + + +摄像头正在被占用中,可尝试打开其他摄像头 + + + + +摄像头参数设置出错(参数不支持或其它) + + + + +摄像头设备未授权,通常在移动设备出现,可能是权限被用户拒绝了 + + + + +打开摄像头失败,例如在 Windows 或 Mac 设备,摄像头的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序 + + + + +请求退房超时 + + + + +服务不可用。请检查:套餐包剩余分钟数是否大于0,腾讯云账号是否欠费 + + + + +请求进房超时,请检查网络 + + + + +进房参数 userSig 不正确 + + + + +进房参数 userID 不正确 + + + + +进房参数 roomId 错误 + + + + +进房参数 sdkAppId 错误 + + + + +进房参数为空,请检查 enterRoom:appScene: 接口调用是否传入有效的 param + + + + +进入房间失败 + + + + +无错误 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/ClientDemo/TRTC_SDK/Win32/lib/TRAE.dll b/ClientDemo/TRTC_SDK/Win32/lib/TRAE.dll new file mode 100644 index 0000000..6b41bbc Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/TRAE.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-file-l1-2-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-file-l1-2-0.dll new file mode 100644 index 0000000..e2231f0 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-file-l1-2-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-file-l2-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-file-l2-1-0.dll new file mode 100644 index 0000000..413dbff Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-file-l2-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-localization-l1-2-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-localization-l1-2-0.dll new file mode 100644 index 0000000..b749d5f Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-localization-l1-2-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-processthreads-l1-1-1.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-processthreads-l1-1-1.dll new file mode 100644 index 0000000..9acd7ea Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-processthreads-l1-1-1.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-synch-l1-2-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-synch-l1-2-0.dll new file mode 100644 index 0000000..e10a7a6 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-synch-l1-2-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-timezone-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-timezone-l1-1-0.dll new file mode 100644 index 0000000..d3bc477 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-timezone-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-xstate-l2-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-xstate-l2-1-0.dll new file mode 100644 index 0000000..1216d72 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-core-xstate-l2-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-convert-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-convert-l1-1-0.dll new file mode 100644 index 0000000..60f007a Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-convert-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-environment-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-environment-l1-1-0.dll new file mode 100644 index 0000000..997dc81 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-environment-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-filesystem-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-filesystem-l1-1-0.dll new file mode 100644 index 0000000..db2d124 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-filesystem-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-heap-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-heap-l1-1-0.dll new file mode 100644 index 0000000..d3efc10 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-heap-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-locale-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-locale-l1-1-0.dll new file mode 100644 index 0000000..7bf3700 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-locale-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-math-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-math-l1-1-0.dll new file mode 100644 index 0000000..4c81be3 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-math-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-runtime-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-runtime-l1-1-0.dll new file mode 100644 index 0000000..ed34e2b Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-runtime-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-stdio-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-stdio-l1-1-0.dll new file mode 100644 index 0000000..9971c2e Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-stdio-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-string-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-string-l1-1-0.dll new file mode 100644 index 0000000..3f9947b Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-string-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-time-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-time-l1-1-0.dll new file mode 100644 index 0000000..3261b42 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-time-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-utility-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-utility-l1-1-0.dll new file mode 100644 index 0000000..695a39d Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/api-ms-win-crt-utility-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/liteav.dll b/ClientDemo/TRTC_SDK/Win32/lib/liteav.dll new file mode 100644 index 0000000..acfe19b Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/liteav.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/liteav.lib b/ClientDemo/TRTC_SDK/Win32/lib/liteav.lib new file mode 100644 index 0000000..9261b68 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/liteav.lib differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/msvcp140.dll b/ClientDemo/TRTC_SDK/Win32/lib/msvcp140.dll new file mode 100644 index 0000000..bdafe70 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/msvcp140.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/ucrtbase.dll b/ClientDemo/TRTC_SDK/Win32/lib/ucrtbase.dll new file mode 100644 index 0000000..25d9b22 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/ucrtbase.dll differ diff --git a/ClientDemo/TRTC_SDK/Win32/lib/vcruntime140.dll b/ClientDemo/TRTC_SDK/Win32/lib/vcruntime140.dll new file mode 100644 index 0000000..57c65e8 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win32/lib/vcruntime140.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/LiteAvAudioHook.dll b/ClientDemo/TRTC_SDK/Win64/lib/LiteAvAudioHook.dll new file mode 100644 index 0000000..6dc5452 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/LiteAvAudioHook.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/LiteAvAudioHookService.dll b/ClientDemo/TRTC_SDK/Win64/lib/LiteAvAudioHookService.dll new file mode 100644 index 0000000..ec8f43b Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/LiteAvAudioHookService.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/ManageLiteAV.dll b/ClientDemo/TRTC_SDK/Win64/lib/ManageLiteAV.dll new file mode 100644 index 0000000..272ea9f Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/ManageLiteAV.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/ManageLiteAV.xml b/ClientDemo/TRTC_SDK/Win64/lib/ManageLiteAV.xml new file mode 100644 index 0000000..43b4e1e --- /dev/null +++ b/ClientDemo/TRTC_SDK/Win64/lib/ManageLiteAV.xml @@ -0,0 +1,9182 @@ + + + + "ManageLiteAV" + + + +@} + + + +停止扬声器测试 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + + + +开启扬声器测试 +回调接口 onTestSpeakerVolume 获取测试数据该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 音频文件的绝对路径,路径字符串使用 UTF-8 +编码格式,支持文件格式:WAV、MP3 + + + +停止麦克风测试 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + + + +开启麦克风测试 +回调接口 onTestMicVolume 获取测试数据该方法测试麦克风是否能正常工作,volume 的取值范围为0 - 100。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 反馈音量提示的时间间隔(ms),建议设置到大于 200 毫秒 + + + +停止摄像头测试 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + + + +开始进行摄像头测试 + +会触发 onFirstVideoFrame 回调接口 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + +在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + + 承载预览画面的窗口句柄 + + + +设置系统当前扬声器设备音量 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 该接口的功能是调节系统播放音量,如果用户直接调节 WIN 系统设置的播放音量时,该接口的设置结果会被用户的操作所覆盖。 + 设置的扬声器音量,范围0 - 100 + + + +获取系统当前扬声器设备音量 + + 查询的是系统硬件音量大小。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 扬声器音量,范围0 - 100 + + + +设置要使用的扬声器 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 从 getSpeakerDevicesList 中得到的设备 ID + + + +获取当前的扬声器设备 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + +获取扬声器设备列表 + + +示例代码: + +ITRTCDeviceCollection pDevice = m_pCloud.getSpeakerDevicesList(); +for (int i = 0; i < pDevice.getCount(); i++) +{ + string name = pDevice.getDeviceName(i)); +} +pDevice.release(); + + +SDK 维护 ITRTCDeviceCollection 对象的生命周期。 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 扬声器管理器对象 ITRTCDeviceCollection + + + +设置系统当前麦克风设备的音量 + + 该接口的功能是调节系统采集音量,如果用户直接调节 WIN 系统设置的采集音量时,该接口的设置结果会被用户的操作所覆盖。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 麦克风音量值,范围[0 - 100] + + + +获取系统当前麦克风设备音量 + + 查询的是系统硬件音量大小。 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 音量值,范围是[0 - 100] + + + +设置要使用的麦克风 + +选择指定的麦克风作为录音设备,不调用该接口时,默认选择索引为0的麦克风 + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 从 getMicDevicesList 中得到的设备 ID + + + +获取当前选择的麦克风 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + +获取麦克风设备列表 + + +示例代码: + +ITRTCDeviceCollection pDevice = m_pCloud.getMicDevicesList(); +for (int i = 0; i < pDevice.getCount(); i++) +{ + string name = pDevice.getDeviceName(i)); +} +pDevice.release(); +pDevice = null; + + +SDK 维护 ITRTCDeviceCollection 对象的生命周期。 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 麦克风管理器对象 ITRTCDeviceCollection + + + +获取当前使用的摄像头 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + +设置要使用的摄像头 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 从 getCameraDevicesList 中得到的设备 ID + + + +获取摄像头设备列表 + + +示例代码: + +ITRTCDeviceCollection pDevice = m_pCloud.getCameraDevicesList(); +for (int i = 0; i < pDevice.getCount(); i++) +{ + string name = pDevice.getDeviceName(i)); +} +pDevice.release(); +pDevice = null; + + +SDK 维护 ITRTCDeviceCollection 对象的生命周期。 + + v8.0 版本弃用,请使用 ITXDeviceManager::getDevicesList 接口 + 摄像头管理器对象 ITRTCDeviceCollection + + + +开启本地音频的采集和上行 + +该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。SDK +并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。 + v8.0 版本弃用,请使用 startLocalAudio(TRTCAudioQuality) 接口 + +TRTC SDK 并不会默认打开本地的麦克风采集。 + + + + +设置音频质量 + +主播端的音质越高,观众端的听感越好,但传输所依赖的带宽也就越高,在带宽有限的场景下也更容易出现卡顿。SDK +并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。TRTCCloudDef#TRTCAudioQualitySpeech}, +流畅:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。TRTCCloudDef#TRTCAudioQualityDefault},默认:采样率:48k;单声道;音频裸码率:50kbps;SDK +默认的音频质量,如无特殊需求推荐选择之。TRTCCloudDef#TRTCAudioQualityMusic},高音质:采样率:48k;双声道 + +全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。 + v8.0 版本弃用,请使用 startLocalAudio(TRTCAudioQuality) 接口 + +该方法需要在 startLocalAudio 之前进行设置,否则不会生效。 + + + + +设定观看方优先选择的视频质量 + +低端设备推荐优先选择低清晰度的小画面。如果对方没有开启双路视频模式,则此操作无效。 + v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + 默认观看大画面还是小画面,默认为 TRTCVideoStreamTypeBig + + + +设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的顺时针旋转角度 + + - setRemoteViewRotation() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的旋转角度。 + - setRemoteSubStreamViewRotation() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的旋转角度。 + v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + 用户的 ID + 支持90、180、270旋转角度 + + + +设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的显示模式 + + - setRemoteViewFillMode() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的显示模式。 + - setRemoteSubStreamViewFillMode() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的显示模式。 + v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + 用户的 ID + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + +停止显示远端用户的辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)。 + + v8.0 版本弃用,请使用 stopRemoteView(userId,streamType) 接口 + 对方的用户标识 + + + +开始显示远端用户的辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享) + + - startRemoteView() 用于显示主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)。 + - startRemoteSubStreamView() 用于显示辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)。 + v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + 请在 onUserSubStreamAvailable 回调后再调用这个接口。 + 对方的用户标识 + 渲染画面的 HWND + + + +设置本地摄像头预览画面的镜像模式 + + v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + 镜像模式,默认值:false(非镜像模式) + + + +设置远端图像的顺时针旋转角度 + + v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + 用户 ID + 支持 TRTCVideoRotation90 、 TRTCVideoRotation180 以及 +TRTCVideoRotation270 旋转角度,默认值:TRTCVideoRotation0 + + + +设置本地图像的顺时针旋转角度 + + v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + 支持 TRTCVideoRotation90 、 TRTCVideoRotation180 以及 TRTCVideoRotation270 旋转角度,默认值:TRTCVideoRotation0 + + + +设置远端图像的渲染模式 + + v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + 用户 ID + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + +设置本地图像的渲染模式 + + v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + +停止显示远端视频画面,同时不再拉取远端用户的视频数据流 + +调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。 + v8.0 版本弃用,请使用 stopRemoteView(userId,streamType) 接口 + 对方的用户标识 + + + +开始显示远端视频画面 + + v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + 对方的用户标识 + 承载预览画面的窗口句柄 + + + +设置屏幕共享参数 + + v7.9 版本弃用,请使用 selectScreenCaptureTarget(TRTCScreenCaptureSourceInfo,RECT,TRTCScreenCaptureProperty) 接口 + 指定分享源 + 指定捕获的区域 + 指定是否捕获鼠标指针 + 指定是否高亮正在共享的窗口,以及当捕获图像被遮挡时高亮遮挡窗口提示用户移走遮挡 + + + +恢复音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager resumePlayMusic 接口 + 音效 Id + + + +暂停音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + 音效 Id + + + +设置所有音效的音量 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / setMusicPlayoutVolume 接口 + 该操作会覆盖通过 setAudioEffectVolume 指定的单独音效音量。 + 音量大小,取值范围为0 - 100;默认值:100 + + + +停止所有音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager stopPlayMusic 接口 + + + +停止音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager stopPlayMusic 接口 + 音效 ID + + + +设置音效音量 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / setMusicPlayoutVolume 接口 + 会覆盖通过 setAllAudioEffectsVolume 指定的整体音效音量。 + 音效 ID + 音量大小,取值范围为0 - 100;默认值:100 + + + +播放音效 + + v7.3 版本弃用,请使用 TXAudioEffectManager startPlayMusic 接口 + 每个音效都需要您指定具体的 ID,您可以通过该 ID 对音效的开始、停止、音量等进行设置。 + 支持的文件格式:aac, mp3。 + 若您想同时播放多个音效,请分配不同的 ID 进行播放。因为使用同一个 ID 播放不同音效,SDK 将会停止上一个 ID 对应的音效播放,再启动新的音效播放。 + 音效 + + + +设置背景音乐远端播放音量的大小 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐在远端播放时的音量大小。 + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +设置背景音乐本地播放音量的大小 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPlayoutVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐在本地播放时的音量大小。 + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +设置背景音乐播放音量的大小 + + v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / setMusicPlayoutVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐播放音量的大小, + 该接口会同时控制远端播放音量的大小和本地播放音量的大小, + 因此调用该接口后,setBGMPlayoutVolume和setBGMPublishVolume设置的音量值会被覆盖 + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +设置 BGM 播放进度 + + v7.3 版本弃用,请使用 TXAudioEffectManager seekMusicToPosInMS 接口 + 单位毫秒 + + + +获取音乐文件总时长,单位毫秒 + + v7.3 版本弃用,请使用 TXAudioEffectManager getMusicDurationInMS 接口 + 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长 + 成功返回时长,失败返回-1 + + + +继续播放背景音乐 + + v7.3 版本弃用,请使用 TXAudioEffectManager resumePlayMusic 接口 + + + +暂停播放背景音乐 + + v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + + + +停止播放背景音乐 + + v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + + + +启动播放背景音乐 + + v7.3 版本弃用,请使用 TXAudioEffectManager startPlayMusic 接口,支持并发播放多个 BGM + 音乐文件路径,支持的文件格式:aac, mp3。 + + + +启动屏幕分享 + + 从 v7.2 版本开始废弃 + 使用 startScreenCapture(HWND rendHwnd, TRTCVideoStreamType type, TRTCVideoEncParam* params) 接口替代。 + + +@} +@name 弃用接口函数 +@{ + +设置麦克风的音量大小 +从 v6.9 版本开始废弃使用 setAudioCaptureVolume 接口替代。 + + +12.8 调用实验性 API 接口 + + +该接口用于调用一些实验性功能 + + 接口及参数描述的 JSON 字符串 + + + +12.7 显示仪表盘 + + +仪表盘是状态统计和事件消息浮层 view,方便调试。 + + 0:不显示;1:显示精简版;2:显示全量版,默认为不显示 + + + +12.6 设置日志回调 + + 日志回调 + + + +12.5 设置日志保存路径 + + +日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/Tencent/liteav/log,即 %appdata%/Tencent/liteav/log 下,如需修改,必须在所有方法前调用。 + + 存储日志的文件夹,例如 "D:\\Log",UTF-8 编码 + + + +12.4 启用或禁用 Log 的本地压缩 + +开启压缩后,Log 存储体积明显减小,但需要腾讯云提供的 Python 脚本解压后才能阅读。禁用压缩后,Log 采用明文存储,可以直接用记事本打开阅读,但占用空间较大。 + 指定是否启用,默认为禁止状态 + + + +12.3 启用或禁用控制台日志打印 + + 指定是否启用,默认为禁止状态 + + + +12.2 设置 Log 输出级别 + + level 参见 TRTCLogLevel,默认值:TRTCLogLevelNone + + +@} +@name LOG 相关接口函数 +@{ + +12.1 获取 SDK 版本信息 +UTF-8 编码的版本号。 + + +11.2 停止网络测速 + + + +@} +@name 网络测试 +@{ + +11.1 开始进行网络测速(视频通话期间请勿测试,以免影响通话质量) + +测速结果将会用于优化 SDK 接下来的服务器选择策略,因此推荐您在用户首次通话前先进行一次测速,这将有助于我们选择最佳的服务器。同时,如果测试结果非常不理想,您可以通过醒目的 UI 提示用户选择更好的网络。 +测速本身会消耗一定的流量,所以也会产生少量额外的流量费用。 +应用标识用户标识用户签名 + + +10.2 将小数据量的自定义数据嵌入视频帧中 + +跟 sendCustomCmdMsg 的原理不同,sendSEIMsg 是将数据直接塞入视频数据头中。因此,即使视频帧被旁路到了直播 CDN 上, +这些数据也会一直存在。但是由于要把数据嵌入视频帧中,所以数据本身不能太大,推荐几个字节就好。 +最常见的用法是把自定义的时间戳(timstamp)用 sendSEIMsg 嵌入视频帧中,这种方案的最大好处就是可以实现消息和画面的完美对齐。 + +本接口有以下限制: + -数据在接口调用完后不会被即时发送出去,而是从下一帧视频帧开始带在视频帧中发送。 -发送消息到房间内所有用户,每秒最多能发送30条消息(与 sendCustomCmdMsg 共享限制)。 -每个包最大为1KB,若发送大量数据,会导致视频码率增大,可能导致视频画质下降甚至卡顿(与 sendCustomCmdMsg 共享限制)。 -每个客户端每秒最多能发送总计8KB数据(与 sendCustomCmdMsg 共享限制)。 -若指定多次发送(repeatCount > 1),则数据会被带在后续的连续 repeatCount 个视频帧中发送出去,同样会导致视频码率增大。 -如果 repeatCount > 1,多次发送,接收消息 onRecvSEIMsg 回调也可能会收到多次相同的消息,需要去重。 + 待发送的数据,最大支持1kb(1000字节)的数据大小 + 待发送的数据大小 + 发送数据次数 + true:消息已通过限制,等待后续视频帧发送;false:消息被限制发送 + + +@} +@name 自定义消息发送 +@{ + +10.1 发送自定义消息给房间内所有用户 + +该接口可以借助音视频数据通道向当前房间里的其他用户广播您自定义的数据,但因为复用了音视频数据通道, +请务必严格控制自定义消息的发送频率和消息体的大小,否则会影响音视频数据的质量控制逻辑,造成不确定性的问题。 + +本接口有以下限制: + -发送消息到房间内所有用户(暂时不支持 Web/小程序端),每秒最多能发送30条消息。 -每个包最大为1KB,超过则很有可能会被中间路由器或者服务器丢弃。 -每个客户端每秒最多能发送总计8KB数据。 -将 reliable 和 ordered 同时设置为 true 或 false,暂不支持交叉设置。 -强烈建议不同类型的消息使用不同的 cmdID,这样可以在要求有序的情况下减小消息时延。消息 ID,取值范围为1 - 10待发送的消息,最大支持1KB(1000字节)的数据大小待发送的数据大小是否可靠发送,可靠发送的代价是会引入一定的延时,因为接收端要暂存一段时间的数据来等待重传是否要求有序,即是否要求接收端接收的数据顺序和发送端发送的顺序一致,这会带来一定的接收延时,因为在接收端需要暂存并排序这些消息true:消息已经发出;false:消息发送失败 + + +9.7 设置音频数据回调 +设置此方法,SDK 内部会把声音模块的数据(PCM 格式)回调出来,包括:-onCapturedAudioFrame:本机麦克风采集到的音频数据-onPlayAudioFrame:混音前的每一路远程用户的音频数据-onMixedPlayAudioFrame:各路音频数据混合后送入扬声器播放的音频数据 + 声音帧数据(PCM 格式)的回调,callback = nullptr 则停止回调数据 + 0:成功;<0:错误 + + + +9.6 设置远端视频自定义渲染 + +此方法同 setLocalVideoRenderDelegate,区别在于一个是本地画面的渲染回调, 一个是远程画面的渲染回调。 + +设置此方法,SDK 内部会把远端的数据解码后回调出来,SDK 跳过 HWND 渲染逻辑 +调用 setRemoteVideoRenderCallback(userId, TRTCVideoPixelFormat_Unknown, TRTCVideoBufferType_Unknown, nullptr) 停止回调。 + 用户标识 + 指定回调的像素格式 + 指定视频数据结构类型 + 自定义渲染回调 + 0:成功;<0:错误 + + + +9.5 设置本地视频自定义渲染 + + +设置此方法,SDK 内部会把采集到的数据回调出来,SDK 跳过 HWND 渲染逻辑 +调用 setLocalVideoRenderCallback(TRTCVideoPixelFormat_Unknown, TRTCVideoBufferType_Unknown, nullptr) 停止回调 + 指定回调的像素格式 + 指定视频数据结构类型 + 自定义渲染回调 + 0:成功;<0:错误 + + + +10.4 向 SDK 投送自己采集的音频数据 +TRTCAudioFrame 推荐如下填写方式(其他字段不需要填写):-audioFormat:仅支持 LiteAVAudioFrameFormatPCM。-data:音频帧 buffer。-length:音频帧数据长度,推荐每帧20ms采样数。【PCM格式、48000采样率、单声道的帧长度:48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。-sampleRate:采样率,仅支持48000。-channel:频道数量(如果是立体声,数据是交叉的),单声道:1; 双声道:2。-timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。 + +可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomAudioData 的调用间隔,否则会导致声音断断续续。 + + 音频帧,仅支持 LiteAVAudioFrameFormatPCM 格式。目前只支持单声道,仅支持48K采样率,LiteAVAudioFrameFormatPCM 格式。 + + + +9.3 启用音频自定义采集模式 + +开启该模式后,SDK 停止运行原有的音频采集流程,只保留编码和发送能力。您需要用 sendCustomAudioData() 不断地向 SDK 塞入自己采集的音频数据。 + 是否启用,默认值:false + + + +9.2 向 SDK 投送自己采集的视频数据 + +TRTCVideoFrame 推荐如下填写方式(其他字段不需要填写):-pixelFormat:仅支持 LiteAVVideoPixelFormat_I420。-bufferType:仅支持 LiteAVVideoBufferType_Buffer。-data:视频帧 buffer。-length:视频帧数据长度,I420 格式下,其值等于:width × height × 3 / 2。-width:视频图像长度。-height:视频图像宽度。-timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。 + +- SDK 内部有帧率控制逻辑,目标帧率以您在 setVideoEncoderParam 中设置的为准,太快会自动丢帧,太慢则会自动补帧。 +- 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomVideoData 的调用间隔,否则会导致视频帧率不稳定。 + 视频数据,支持 I420 格式数据。 + + +@} +@name 自定义采集和渲染 +@{ + +9.1 启用视频自定义采集模式 + +开启该模式后,SDK 不在运行原有的视频采集流程,只保留编码和发送能力。您需要用 sendCustomVideoData() 不断地向 SDK 塞入自己采集的视频画面。是否启用,默认值:false + + +8.11 将所有窗口从屏幕分享的排除列表中移除 + + + + +8.10 将指定窗口从屏幕分享的排除列表中移除 + + 不希望分享出去的窗口 + + + +8.9 将指定窗口加入屏幕分享的排除列表中,加入排除列表中的窗口不会被分享出去 + +支持启动屏幕分享前设置过滤窗口,也支持屏幕分享过程中动态添加过滤窗口。 + 不希望分享出去的窗口 + + + +8.8 设置屏幕分享的混音音量大小 + + 这个数值越高,屏幕分享音量的占比就越高,麦克风音量占比就越小,所以不推荐设置得太大,否则麦克风的声音就被压制了。 + 设置的混音音量大小,范围0 - 100 + + + +8.7 设置屏幕分享的编码器参数 + + - setVideoEncoderParam() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的编码参数。 + - setSubStreamEncoderParam() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的编码参数。 + 该设置决定远端用户看到的画面质量,同时也是云端录制出的视频文件的画面质量。 + 即使使用主路传输屏幕分享的数据(在调用 startScreenCapture 时设置 type=TRTCVideoStreamTypeBig),依然要使用此接口更新屏幕分享的编码参数。 + 辅流编码参数,详情请参考 TRTCCloudDef.h 中的 TRTCVideoEncParam 定义 + + + +8.6 设置屏幕共享参数,该方法在屏幕共享过程中也可以调用 + +如果您期望在屏幕分享的过程中,切换想要分享的窗口,可以再次调用这个函数而不需要重新开启屏幕分享。支持如下四种情况:-共享整个屏幕:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为{ 0, 0, 0, 0 }-共享指定区域:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为非 NULL,例如{ 100, 100, 300, 300 }-共享整个窗口:sourceInfoList 中 type 为 Window 的 source,captureRect 设为{ 0, 0, 0, 0 }-共享窗口区域:sourceInfoList 中 type 为 Window 的 source,captureRect 设为非 NULL,例如{ 100, 100, 300, 300 } + 指定分享源 + 指定捕获的区域 + 指定屏幕分享目标的属性,包括捕获鼠标,高亮捕获窗口等,详情参考 TRTCScreenCaptureProperty 定义 + + + +8.5 枚举可分享的屏幕窗口,建议在 startScreenCapture 之前调用 + +如果您要给您的 App 增加屏幕分享功能,一般需要先显示一个窗口选择界面,这样用户可以选择希望分享的窗口。通过如下函数,您可以获得可分享窗口的 ID、类型、窗口名称以及缩略图。拿到这些信息后,您就可以实现一个窗口选择界面,当然,您也可以使用我们在 Demo 源码中已经实现好的一个界面。 + +返回的列表中包括屏幕和应用窗口,屏幕会在列表的前面几个元素中。 +SDK 维护 ITRTCScreenCaptureSourceList 对象的生命周期。 + 指定要获取的窗口缩略图大小,缩略图可用于绘制在窗口选择界面上 + 指定要获取的窗口图标大小 + 窗口列表包括屏幕 + + + +8.4 恢复屏幕分享 + + + + +8.3 暂停屏幕分享 + + + + +8.2 停止屏幕采集 + + + +@} +@name 屏幕分享相关接口函数 +@{ + +8.1 启动屏幕分享 + +一个用户同时最多只能上传一条主路(TRTCVideoStreamTypeBig)画面和一条辅路(TRTCVideoStreamTypeSub)画面, +默认情况下,屏幕分享使用辅路画面,如果使用主路画面,建议您提前停止摄像头采集(stopLocalPreview)避免相互冲突。 +承载预览画面的 HWND,可以设置为 nullptr,表示不显示屏幕分享的预览效果。屏幕分享使用的线路,可以设置为主路(TRTCVideoStreamTypeBig)或者辅路(TRTCVideoStreamTypeSub),默认使用辅路。屏幕分享的画面编码参数,可以设置为 nullptr,表示让 SDK 选择最佳的编码参数(分辨率、码率等)。 + + +7.4 设置系统声音采集的音量。 + + 音量大小,取值范围为0 - 100。 + + + +7.3 关闭系统声音采集。 + + + + +7.2 打开系统声音采集 + + 开启后可以采集整个操作系统的播放声音(path 为空)或某一个播放器(path 不为空)的声音, + 并将其混入到当前麦克风采集的声音中一起发送到云端。 + + - path 为空,代表采集整个操作系统的声音。 + path 填写 exe 程序(如 QQ音乐)所在的路径,将会启动此程序并只采集此程序的声音。 + + + +@} +@name 音乐特效和人声特效 +@{ + +7.1 获取音效管理类 ITXAudioEffectManager +该模块是整个 SDK 的音效管理模块,支持如下功能:- 耳机耳返:麦克风捕捉的声音实时通过耳机播放。- 混响效果:KTV、小房间、大会堂、低沉、洪亮...- 变声特效:萝莉、大叔、重金属、外国人...- 背景音乐:支持在线音乐和本地音乐,支持变速、变调等特效、支持原生和伴奏并播放和循环播放。- 短音效:鼓掌声、欢笑声等简短的音效文件,对于小于10秒的文件,请将 isShortFile 参数设置为 YES。 + + +6.2 设置水印 + +水印的位置是通过 xOffset, yOffset, fWidthRatio 来指定的。-xOffset:水印的坐标,取值范围为0 - 1的浮点数。-yOffset:水印的坐标,取值范围为0 - 1的浮点数。-fWidthRatio:水印的大小比例,取值范围为0 - 1的浮点数。 + +只支持主路视频流 + + 要设置水印的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub) + 水印图片源数据(传 NULL 表示去掉水印) + 水印图片源数据类型(传 NULL 时忽略该参数) + 水印图片像素宽度(源数据为文件路径时忽略该参数) + 水印图片像素高度(源数据为文件路径时忽略该参数) + 水印显示的左上角 x 轴偏移 + 水印显示的左上角 y 轴偏移 + 水印显示的宽度占画面宽度比例(水印按该参数等比例缩放显示) + + +@} +@name 美颜特效和图像水印 +@{ + +6.1 设置美颜、美白、红润效果级别 + +SDK 内部集成了两套风格不同的磨皮算法,一套我们取名叫“光滑”,适用于美女秀场,效果比较明显。另一套我们取名“自然”,磨皮算法更多地保留了面部细节,主观感受上会更加自然。美颜风格,光滑或者自然,光滑风格磨皮更加明显,适合娱乐场景。美颜级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显美白级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显红润级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显,该参数暂未生效 + +@} +@name 设备相关接口函数 +@{ + +5.1 获取设备管理模块 +ITXDeviceManager 设备管理类 + + +4.12 停止录音 +如果调用 exitRoom 时还在录音,录音会自动停止。 + + + +4.11 开始录音 + +该方法调用后,SDK 会将通话过程中的所有音频(包括本地音频,远端音频,BGM等)录制到一个文件里。无论是否进房,调用该接口都生效。如果调用 exitRoom 时还在录音,录音会自动停止。 + 录音参数,请参考 TRTCAudioRecordingParams + 0:成功;-1:录音已开始;-2:文件或目录创建失败;-3:后缀指定的音频格式不支持 + + + +4.10 启用或关闭音量大小提示 + +开启此功能后,SDK 会在 onUserVoiceVolume() 中反馈对每一路声音音量大小值的评估。我们在 Demo 中有一个音量大小的提示条,就是基于这个接口实现的。如希望打开此功能,请在 startLocalAudio() 之前调用。 + 设置 onUserVoiceVolume 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms + + + +4.9 获取 SDK 播放音量 + + + + +4.8 设置 SDK 播放音量。 + + +该函数会控制最终交给系统播放的声音音量 +会影响本地录制的音量大小。不会影响耳返的音量。 + 音量大小,取值0 - 100,默认值为100 + + + +4.7 获取 SDK 采集音量 + + + + +4.6 设置 SDK 采集音量 + + 音量大小,取值0 - 100,默认值为100 + + + +4.5 静音/取消静音所有用户的声音 + + true:静音;false:取消静音 + +静音时会停止接收所有用户的远端音频流并停止播放,取消静音时会自动拉取所有用户的远端音频流并进行播放。 + + + + +4.4 静音/取消静音指定的远端用户的声音 + + 用户 ID + true:静音;false:取消静音 + +静音时会停止接收该用户的远端音频流并停止播放,取消静音时会自动拉取该用户的远端音频流并进行播放。 + + + + +4.3 静音/取消静音本地的音频 + +当静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, false) 回调通知。当取消静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, true) 回调通知。与 stopLocalAudio 不同之处在于,muteLocalAudio(true) 并不会停止发送音视频数据,而是继续发送码率极低的静音包。由于 MP4 等视频文件格式,对于音频的连续性是要求很高的,使用 stopLocalAudio 会导致录制出的 MP4 不易播放。因此在对录制质量要求很高的场景中,建议选择 muteLocalAudio,从而录制出兼容性更好的 MP4 文件。 + true:静音;false:取消静音,默认值:false + + + +4.2 关闭本地音频的采集和上行 + +当关闭本地音频的采集和上行,房间里的其它成员会收到 onUserAudioAvailable(false) 回调通知。 + + +@} +@name 音频相关接口函数 +@{ + +4.1 开启本地音频的采集和上行 + +该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。SDK 并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。 +TRTC SDK 并不会默认打开本地的麦克风采集。 +声音质量,参见 TRTCAudioQuality + + +3.18 选定观看指定 userId 的大画面还是小画面 +此功能需要该 userId 通过 enableEncSmallVideoStream 提前开启双路编码模式。如果该 userId 没有开启双路编码模式,则此操作无效。 + 用户 ID + 视频流类型,即选择看大画面还是小画面,默认为 TRTCVideoStreamTypeBig + + + +3.17 开启大小画面双路编码模式 + +如果当前用户是房间中的主要角色(例如主播、老师、主持人等),并且使用 PC 或者 Mac 环境,可以开启该模式。开启该模式后,当前用户会同时输出【高清】和【低清】两路视频流(但只有一路音频流)。对于开启该模式的当前用户,会占用更多的网络带宽,并且会更加消耗 CPU 计算资源。对于同一房间的远程观众而言:- 如果用户的下行网络很好,可以选择观看【高清】画面- 如果用户的下行网络较差,可以选择观看【低清】画面 + 是否开启小画面编码,默认值:false + 小流的视频参数 + + + +3.16 设置远端图像的渲染模式 + + 对应的远端视频流用户ID + 远端图像的视频流类型,详见 TRTCVideoStreamType 定义 + 远端图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义 + + + +3.15 设置编码器输出的画面镜像模式 + +该接口不改变本地摄像头的预览画面,但会改变另一端用户看到的(以及服务器录制的)画面效果。 + 是否开启远端镜像, true:远端画面镜像;false:远端画面非镜像。默认值:false + + + +3.14 设置视频编码输出的画面方向,即设置远端用户观看到的和服务器录制的画面方向 + + 目前支持 TRTCVideoRotation0 和 TRTCVideoRotation180 旋转角度,默认值:TRTCVideoRotation0 + + + +3.13 设置本地图像(主流)的渲染参数 + + 本地图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义 + + + +3.12 设置网络流控相关参数 + +该设置决定了 SDK 在各种网络环境下的调控策略(例如弱网下是“保清晰”还是“保流畅”) + 网络流控参数,详情请参考 TRTCCloudDef.h 中 TRTCNetworkQosParam 的定义 + + + +3.11 设置视频编码器相关参数 + +该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量) + 视频编码参数,详情请参考 TRTCCloudDef.h 中 TRTCVideoEncParam 的定义 + + + +3.10 暂停/恢复接收所有远端视频流 + + 该接口仅暂停/恢复接收所有远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。 + 是否停止接收 + + + +3.9 暂停/恢复接收指定的远端视频流 + +该接口仅暂停/恢复接收指定的远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。 + 对方的用户标识 + 是否暂停接收 + + + +3.8 停止显示所有远端视频画面,同时不再拉取远端用户的视频数据流 + + +如果有屏幕分享的画面在显示,则屏幕分享的画面也会一并被关闭 + + + + +3.7 停止显示远端视频画面,同时不再拉取远端用户的视频数据流 + +调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。 + 指定远端用户的 userId + 指定要停止观看的 userId 的视频流类型 + + + +3.6 更新远端视频渲染的窗口 + + 对方的用户标识 + 要设置预览窗口的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub) + 承载预览画面的控件 + + + +3.5 开始拉取并显示指定用户的远端画面 + +该函数会拉取指定 userid 的视频流显示在您指定的 view 控件上,您可以通过 setLocalViewRenderParams 设置显示模式。- 如果您提前知道房间中某个 userid 正在推流,可以直接调用 startRemoteView 显示该用户的远端画面。- 如果您不知道房间中有哪些用户开启了视频,可以在 enterRoom 后等待来自 SDK 的 onUserVideoAvailable(userId, true) 回调通知。调用 startRemoteView 只是启动拉取,此时画面还需要加载,当加载完毕后 ITRTCCloudCallback 会通过 onFirstVideoFrame(userId) 通知您。 + 指定远端用户的 userId + 指定要观看 userId 的视频流类型: +- 高清大画面:({@link TRTCVideoStreamTypeBig})- 低清大画面:({@link TRTCVideoStreamTypeSmall})- 辅流(屏幕分享):({@link TRTCVideoStreamTypeSub}) + 承载视频画面的控件 + +注意几点规则需要您关注: +1. SDK 支持同时观看某 userid 的大画面和辅路,或者小画面和辅路,但不支持同时观看大画面和小画面。2. 只有当指定的 userid 通过 enableEncSmallVideoStream 开启双路编码后,才能观看该用户的小画面。3. 如果该用户的小画面不存在,则默认切换到大画面。 + + + +3.4 暂停/恢复推送本地的视频数据 + +当暂停推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, false) 回调通知当恢复推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, true) 回调通知 + true:暂停;false:恢复,默认值:false + + + +3.3 停止本地视频采集及预览 + + + + +3.2 更新本地视频预览画面的窗口 + + 承载预览画面的控件 + + +@} +@name 视频相关接口函数 +@{ + +3.1 开启本地视频的预览画面 + +这个接口会启动默认的摄像头,可以通过 setCurrentCameraDevice 接口选用其他摄像头 +当开始渲染首帧摄像头画面时,您会收到 ITRTCCloudCallback 中的 onFirstVideoFrame(null) 回调。承载预览画面的控件 + + +2.5 设置云端的混流转码参数 + + +如果您在实时音视频 [控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启了“启用旁路推流”功能, +房间里的每一路画面都会有一个默认的直播 [CDN 地址](https://cloud.tencent.com/document/product/647/16826)。 +一个直播间中可能有不止一位主播,而且每个主播都有自己的画面和声音,但对于 CDN 观众来说,他们只需要一路直播流, +所以您需要将多路音视频流混成一路标准的直播流,这就需要混流转码。 + +当您调用 setMixTranscodingConfig() 接口时,SDK 会向腾讯云的转码服务器发送一条指令,目的是将房间里的多路音视频流混合为一路, +您可以通过 mixUsers 参数来调整每一路画面的位置,以及是否只混合声音,也可以通过 videoWidth、videoHeight、videoBitrate 等参数控制混合音视频流的编码参数。 +【画面1】=> 解码 ====> \ \ 【画面2】=> 解码 => 画面混合 => 编码 => 【混合后的画面】 / 【画面3】=> 解码 ====> / 【声音1】=> 解码 ====> \ \ 【声音2】=> 解码 => 声音混合 => 编码 => 【混合后的声音 / 【声音3】=> 解码 ====> / 参考文档:[云端混流转码](https://cloud.tencent.com/document/product/647/16827)。 + +关于云端混流的注意事项: +- 云端转码会引入一定的 CDN 观看延时,大概会增加1 - 2秒。 +- 调用该函数的用户,会将连麦中的多路画面混合到自己当前这路画面或者 config 中指定的 streamId 上。 +- 请注意,若您还在房间中且不再需要混流,请务必传入 nullptr 进行取消,因为当您发起混流后,云端混流模块就会开始工作,不及时取消混流可能会引起不必要的计费损失。 +- 请放心,您退房时会自动取消混流状态。 + + 请参考 TRTCCloudDef.h 中关于 TRTCTranscodingConfig 的介绍。如果传入 NULL 取消云端混流转码。 + + + +2.4 停止向非腾讯云地址转推 + + + + +2.3 开始向友商云的直播 CDN 转推 + +该接口跟 startPublishing() 类似,但 startPublishCDNStream() 支持向非腾讯云的直播 CDN 转推。使用 startPublishing() 绑定腾讯云直播 CDN 不收取额外的费用,但使用 startPublishCDNStream() 绑定非腾讯云直播 CDN 需要收取转推费用。 + param param CDN 转推参数,请参考 TRTCTypeDef.h 中关于 TRTCPublishCDNParam 的介绍。 + + + +2.2 停止向腾讯云的直播 CDN 推流 + + + +@} +@name CDN 相关接口函数 +@{ + +2.1 开始向腾讯云的直播 CDN 推流 + +该接口会指定当前用户的音视频流在腾讯云 CDN 所对应的 StreamId,进而可以指定当前用户的 CDN 播放地址。例如:如果我们采用如下代码设置当前用户的主画面 StreamId 为 user_stream_001,那么该用户主画面对应的 CDN 播放地址为:“http://yourdomain/live/user_stream_001.flv”,其中 yourdomain 为您自己备案的播放域名,您可以在直播[控制台](https://console.cloud.tencent.com/live) 配置您的播放域名,腾讯云不提供默认的播放域名。您也可以在设置 enterRoom 的参数 TRTCParams 时指定 streamId, 而且我们更推荐您采用这种方案。 +ITRTCCloud trtcCloud = ITRTCCloud.getTRTCShareInstance(); +trtcCloud.enterRoom(params, TRTCAppScene.TRTCAppSceneLIVE); +trtcCloud.startLocalPreview(Intptr); +trtcCloud.startLocalAudio(); +trtcCloud.startPublishing("user_stream_001", TRTCVideoStreamType.TRTCVideoStreamTypeBig); + +您需要先在实时音视频 [控制台](https://console.cloud.tencent.com/rav/) 中的功能配置页开启“启用旁路推流”才能生效。 +- 若您选择“指定流旁路”,则您可以通过该接口将对应音视频流推送到腾讯云 CDN 且指定为填写的流 ID。 +- 若您选择“全局自动旁路”,则您可以通过该接口调整默认的流 ID。 +自定义流 ID仅支持 TRTCVideoStreamTypeBig 和 TRTCVideoStreamTypeSub。 + + +1.9 切换房间 + +调用该接口后,用户会先退出原来的房间并快速进入 TRTCSwitchRoomConfig 中指定的新房间:相比于直接调用 exitRoom + enterRoom 的方式,switchRoom 接口对主播更加友好,因为 switchRoom 不会停止主播端视频的采集和预览。接口调用结果会通过 ITRTCCloudCallback 中的 onSwitchRoom(errCode, errMsg) 回调通知给您。 + 房间切换参数,请参考 {@link TRTCSwitchRoomConfig} + + + +1.6 设置音视频数据接收模式(需要在进房前设置才能生效) + +为实现进房秒开的绝佳体验,SDK 默认进房后自动接收音视频。即在您进房成功的同时,您将立刻收到远端所有用户的音视频数据。若您没有调用 startRemoteView,视频数据将自动超时取消。若您主要用于语音聊天等没有自动接收视频数据需求的场景,您可以根据实际需求选择接收模式。 + true:自动接收音频数据;false:需要调用 muteRemoteAudio 进行请求或取消。默认值:true + true:自动接收视频数据;false:需要调用 startRemoteView/stopRemoteView 进行请求或取消。默认值:true + 需要在进房前设置才能生效。 + + + +1.5 关闭跨房连麦 + +跨房通话的退出结果会通过 ITRTCCloudCallback 中的 onDisconnectOtherRoom 回调通知给您。 + + + +1.4 请求跨房通话(主播 PK) + +TRTC 中两个不同音视频房间中的主播,可以通过“跨房通话”功能拉通连麦通话功能。使用此功能时, +两个主播无需退出各自原来的直播间即可进行“连麦 PK”。 + +例如:当房间“001”中的主播 A 通过 connectOtherRoom() 跟房间“002”中的主播 B 拉通跨房通话后, +房间“001”中的用户都会收到主播 B 的 onUserEnter(B) 回调和 onUserVideoAvailable(B, true) 回调。 +房间“002”中的用户都会收到主播 A 的 onUserEnter(A) 回调和 onUserVideoAvailable(A, true) 回调。 +简言之,跨房通话的本质,就是把两个不同房间中的主播相互分享,让每个房间里的观众都能看到两个主播。 房间 001 房间 002 ------------- ------------ 跨房通话前: | 主播 A | | 主播 B | | 观众 U V W | | 观众 X Y Z | ------------- ------------ 房间 001 房间 002 ------------- ------------ 跨房通话后: | 主播 A B | | 主播 B A | | 观众 U V W | | 观众 X Y Z | ------------- ------------ 跨房通话的参数考虑到后续扩展字段的兼容性问题,暂时采用了 JSON 格式的参数,要求至少包含两个字段:- roomId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 roomId 应指定为“002”。- userId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 userId 应指定为 B 的 userId。跨房通话的请求结果会通过 TRTCCloudCallback 中的 onConnectOtherRoom() 回调通知给您。 此处用到 json 库来格式化json字符串 dynamic jsonObj = new JObject(); jsonObj["roomId"] = 002; jsonObj["userId"] = "userB"; string params = JsonConvert.SerializeObject(jsonObj); trtc.connectOtherRoom(params); + JSON 字符串连麦参数,roomId 代表目标房间号,userId 代表目标用户 ID。 + + + +1.3 切换角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom) + +在直播场景下,一个用户可能需要在“观众”和“主播”之间来回切换。您可以在进房前通过 TRTCParams 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。 + 目标角色,默认为主播: +- {@link TRTCRoleAnchor} 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。 +- {@link TRTCRoleAudience} 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。 + + + + +1.2 离开房间 + +调用 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。待资源释放完毕,SDK 会通过 TRTCCloudCallback 中的 onExitRoom() 回调通知您。如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。 + + + +移除事件回调 + + 事件回调 + + +@} +@name 设置 TRTCCloudCallback 回调 +@{ + +设置回调接口 ITRTCCloudCallback +您可以通过 ITRTCCloudCallback 获得来自 SDK 的各种状态通知,详见 ITRTCCloudCallback.h 中的定义事件回调 + + +释放 ITRTCCloud 单例对象。 + + + +@name 创建与销毁 ITRTCCloud 单例 +@{ + +获取 ITRTCCloud 单例对象。 +返回 ITRTCCloud 单例对象 + + +析构函数,C# 代码中要求显示调用 Dispose 函数,来触发托管 C++ 类析构函数。 + + + +@defgroup ITRTCCloud_csharp ITRTCCloud +腾讯云视频通话功能的主要接口类 +@{ + +Module: ITRTCCloud @ TXLiteAVSDK + +Function: 腾讯云视频通话功能的主要接口类 +创建/使用/销毁 ITRTCCloud 对象的示例代码: + +ITRTCCloud trtcCloud = ITRTCCloud.getTRTCShareInstance(); +if (trtcCloud != null) +{ + string version = trtcCloud->getSDKVersion(); +} + +程序退出或者后续程序流程不需要使用 TRTCCloud 对象时,释放单例对象 ITRTCCloud + +ITRTCCloud.destroyTRTCShareInstance(); +trtcCloud = null; + + + +14.1 有日志打印时的回调 + + 日志内容 + 日志等级 参见 TRTCLogLevel + 暂无具体意义,目前为固定值 TXLiteAVSDK + + + +日志相关回调 + + + + +13.3 各路音频数据混合后送入喇叭播放的音频数据 + + +- 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 +- 此接口回调出的音频数据支持修改。- 此接口回调出的音频时间帧长固定为0.02s。 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。 以SDK默认的音频播放格式48000采样率、双声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 2 × 16bit = 30720bit = 3840字节】。- 此接口回调出的音频数据是各路音频播放数据的混合,不包含耳返的音频数据。 + 音频数据 + + + +13.2 混音前的每一路远程用户的音频数据(例如您要对某一路的语音进行文字转换,必须要使用这里的原始数据,而不是混音之后的数据) + + +- 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 +- 此接口回调出的音频数据是只读的,不支持修改。 + 音频数据 + 用户标识 + + + +13.1 本地麦克风采集到的音频数据回调 + + +- 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 +- 此接口回调出的音频数据支持修改。- 此接口回调出的音频时间帧长固定为0.02s。 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。 以SDK默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。- 此接口回调出的音频数据包含背景音、音效、混响等前处理效果。 + 音频数据 + + + +声音数据帧的自定义处理回调(只读) + + +回调函数是在 SDK 内部线程同步抛出来的,请不要做耗时操作。 +提示:请按需定义相关函数实现,减少不必要的性能损耗。 + + + +12.1 自定义视频渲染回调 + +可以通过 setLocalVideoRenderCallback 和 setRemoteVideoRenderCallback 接口设置自定义渲染回调 + 用户标识 + 流类型:即摄像头还是屏幕分享 + 视频帧数据 + + + +视频数据帧的自定义处理回调 + + + + +10.6 废弃接口:播放背景音乐结束 + + 该接口已被废弃,不推荐使用 + 错误码 + + + +10.5 废弃接口:播放背景音乐的进度 + + 该接口已被废弃,不推荐使用 + 已播放时间 + 总时间 + + + +10.4 废弃接口:开始播放背景音乐 + + 该接口已被废弃,不推荐使用 + 错误码 + + + +10.3 废弃接口:播放音效结束回调 + + 该接口已被废弃,不推荐使用 + 音效id + 0表示播放正常结束;其他表示异常结束 + + + +10.2 废弃接口:有用户(主播)离开当前房间 + +该回调接口可以被看作是 onRemoteUserLeaveRoom 的废弃版本,不推荐使用。请使用 +onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。 + 该接口已被废弃,不推荐使用 + 用户标识 + 离开原因 + + +@} +@name 弃用接口回调 +@{ + +10.1 废弃接口:有主播加入当前房间 + +该回调接口可以被看作是 onRemoteUserEnterRoom 的废弃版本,不推荐使用。请使用 +onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。该接口已被废弃,不推荐使用用户标识 + + +9.5 当屏幕分享停止时,SDK 会通过此回调通知 + + 停止原因,0:表示用户主动停止;1:表示屏幕分享窗口被关闭 + + + +9.4 当屏幕分享恢复时,SDK 会通过此回调通知 + + 停止原因,0:表示用户主动恢复,1:表示屏幕分享参数设置完毕后自动恢复;2:表示屏幕分享窗口从最小化被恢复;3:表示屏幕分享窗口从隐藏被恢复 + + + +9.3 当屏幕分享暂停时,SDK 会通过此回调通知 + + 停止原因,0:表示用户主动暂停;1:表示设置屏幕分享参数导致的暂停;2:表示屏幕分享窗口被最小化导致的暂停;3:表示屏幕分享窗口被隐藏导致的暂停 + + + +9.2 当屏幕分享开始时,SDK 会通过此回调通知 + + + +@} +@name 屏幕分享回调 +@{ + +9.1 当屏幕分享窗口被遮挡无法正常捕获时,SDK 会通过此回调通知,可在此回调里通知用户移开遮挡窗口 + + + +8.5 设置云端的混流转码参数的回调,对应于 TRTCCloud 中的 setMixTranscodingConfig() 接口 + +对应于 TRTCCloud 中的 setMixTranscodingConfig() 接口 + 0表示成功,其余值表示失败 + 具体错误原因 + + + +8.4 停止旁路推流到 CDN 完成的回调 + +对应于 TRTCCloud 中的 stopPublishCDNStream() 接口 + 错误码,参考 TXLiteAVCode.h + 错误详细信息 + + + +8.3 启动旁路推流到 CDN 完成的回调 + +对应于 TRTCCloud 的 startPublishCDNStream() 接口 + +Start 回调如果成功,只能说明转推请求已经成功告知给腾讯云,如果目标 CDN 有异常,还是有可能会转推失败。 + + 错误码,参考 TXLiteAVCode.h + 错误详细信息 + + + +8.2 停止向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 stopPublishing() 接口 + + 0表示成功,其余值表示失败 + 具体错误原因 + + +@} +@name CDN 旁路转推回调 +@{ + +8.1 开始向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 startPublishing() 接口 +0表示成功,其余值表示失败具体错误原因 + + +7.3 收到 SEI 消息的回调 + +当房间中的某个用户使用 sendSEIMsg 发送数据时,房间中的其它用户可以通过 onRecvSEIMsg 接口接收数据。 + 用户标识 + 数据 + 数据大小 + + + +7.2 自定义消息丢失回调 + +TRTC 所使用的传输通道为 UDP 通道,所以即使设置了 reliable,也做不到100%不丢失,只是丢消息概率极低,能满足常规可靠性要求。在过去的一段时间内(通常为5s),自定义消息在传输途中丢失的消息数量的统计,SDK 都会通过此回调通知出来。 + +只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调 + + 用户标识 + 命令 ID + 错误码,当前版本为-1 + 丢失的消息数量 + + +@} +@name 自定义消息的接收回调 +@{ + +7.1 收到自定义消息回调 + +当房间中的某个用户使用 sendCustomCmdMsg 发送自定义消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 接口接收消息用户标识命令 ID消息序号消息数据消息数据大小 + + +6.8 当前音频播放设备音量变化通知 + + 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭 + 音量值,取值范围0 - 100 + 当前音频播放设备是否被静音,true:静音;false:取消静音 + + + +6.7 当前音频采集设备音量变化通知 + + 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭 + 音量值,取值范围0 - 100 + 当前采集音频设备是否被静音,true:静音;false:取消静音 + + + +6.6 扬声器测试音量回调 + +扬声器测试接口 startSpeakerDeviceTest 会触发这个回调 + 音量值,取值范围0 - 100 + + + +6.5 麦克风测试音量回调 + +麦克风测试接口 startMicDeviceTest 会触发这个回调 + 音量值,取值范围0 - 100 + + + +6.4 本地设备通断回调 + + 设备 ID + 设备类型 + 事件类型 + + + +6.3 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量 + +您可以通过调用 TRTCCloud 中的 enableAudioVolumeEvaluation 接口来开关这个回调。需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调;如果没有人说话,则 userVolumes 为空,totalVolume 为0。 + +userId 为 null 时表示自己的音量,userVolumes 内仅包含正在说话(音量不为0)的用户音量信息。 + + 所有正在说话的房间成员的音量,取值范围0 - 100。 + 房间成员数量 + 所有远端成员的总音量, 取值范围0 - 100。 + + + +6.2 麦克风准备就绪 + + + +@} +@name 硬件设备事件回调 +@{ + +6.1 摄像头准备就绪 + + + +5.4 服务器测速的回调,SDK 对多个服务器 IP 做测速,每个 IP 的测速结果通过这个回调通知 + + 当前完成的测速结果 + 已完成测速的服务器数量 + 需要测速的服务器总数量 + + + +5.3 SDK 跟服务器的连接恢复 + + + + +5.2 SDK 尝试重新连接到服务器 + + + +@} +@name 服务器事件回调 +@{ + +5.1 SDK 跟服务器的连接断开 + + + +4.2 技术指标统计回调 + +如果您是熟悉音视频领域相关术语,可以通过这个回调获取 SDK 的所有技术指标。如果您是首次开发音视频相关项目,可以只关注 onNetworkQuality 回调。 + +每2秒回调一次 + + 统计数据,包括本地和远程的 + + +@} +@name 统计和质量回调 +@{ + +4.1 网络质量:该回调每2秒触发一次,统计当前网络的上行和下行质量 + +userId == null 代表自己当前的视频质量 +上行网络质量下行网络质量的数组下行网络质量的数组大小 + + +3.9 首帧本地音频数据已经被送出 + +SDK 会在 enterRoom() 并 startLocalAudio() 成功后开始麦克风采集,并将采集到的声音进行编码。当 SDK 成功向云端送出第一帧音频数据后,会抛出这个回调事件。 + + + +3.8 首帧本地视频数据已经被送出 + +SDK 会在 enterRoom() 并 startLocalPreview() 成功后开始摄像头采集,并将采集到的画面进行编码。当 SDK 成功向云端送出第一帧视频数据后,会抛出这个回调事件。 + 视频流类型,大画面还是小画面或辅流画面(屏幕分享) + + + +3.7 开始播放远程用户的首帧音频(本地声音暂不通知) + + 远程用户 ID + + + +3.6 开始渲染本地或远程用户的首帧画面 + +如果 userId 为 null,代表开始渲染本地采集的摄像头画面,需要您先调用 startLocalPreview 触发。如果 userId 不为 null,代表开始渲染远程用户的首帧画面,需要您先调用 startRemoteView 触发。 + +只有当您调用 startLocalPreview()、startRemoteView() 或 startRemoteSubStreamView() 之后,才会触发该回调。 + + 本地或远程用户 ID,如果 userId == null 代表本地,userId != null 代表远程。 + 视频流类型:摄像头或屏幕分享。 + 画面宽度 + 画面高度 + + + +3.5 用户是否开启音频上行 + + 用户标识 + 声音是否开启 + + + +3.4 用户是否开启屏幕分享 + + 用户标识 + 屏幕分享是否开启 + + + +3.3 用户是否开启摄像头视频 + +当您收到 onUserVideoAvailable(userId, YES) 通知时,代表该路画面已经有可用的视频数据帧到达。之后,您需要调用 startRemoteView(userId) 接口加载该用户的远程画面。再之后,您还会收到名为 onFirstVideoFrame(userId) 的首帧画面渲染回调。 +当您收到了 onUserVideoAvailable(userId, NO) 通知时,代表该路远程画面已经被关闭,这可能是 +由于该用户调用了 muteLocalVideo() 或 stopLocalPreview() 所致。 + + 用户标识 + 画面是否开启 + + + +3.2 有用户离开当前房间 + +与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景下,该通知的行为会有差别:- 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户的离开都会触发该通知。- 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):只有主播离开房间时才会触发该通知,观众离开房间不会触发该通知。 + 用户标识 + 离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。 + + +@} +@name 成员事件回调 +@{ + +3.1 有用户加入当前房间 + +出于性能方面的考虑,在两种不同的应用场景下,该通知的行为会有差别:- 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户进入房间都会触发该通知。- 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):该场景不限制观众的数量,如果任何用户进出都抛出回调会引起很大的性能损耗,所以该场景下只有主播进入房间时才会触发该通知,观众进入房间不会触发该通知。 +注意 onRemoteUserEnterRoom 和 onRemoteUserLeaveRoom 只适用于维护当前房间里的“成员列表”,如果需要显示远程画面,建议使用监听 onUserVideoAvailable() 事件回调。 +用户标识 + + +2.6 切换房间 (switchRoom) 的结果回调 + + + + +2.5 结束跨房通话(主播 PK)的结果回调 + + 错误码,ERR_NULL 代表切换成功,其他请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。 + 错误信息 + + + +2.4 请求跨房通话(主播 PK)的结果回调 + +调用 TRTCCloud 中的 connectOtherRoom() 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。 +调用者会收到 onConnectOtherRoom() 回调来获知跨房通话是否成功, +如果成功,两个房间中的所有用户都会收到 PK 主播的 onUserVideoAvailable() 回调。 + + 要 PK 的目标主播 userId。 + 错误码,ERR_NULL 代表切换成功,其他请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。 + 错误信息 + + + +2.3 切换角色结果回调 + +调用 TRTCCloud 中的 switchRole() 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程, +待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调。 + + 错误码,ERR_NULL 代表切换成功,其他请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。 + 错误信息 + + + +2.2 离开房间的事件回调 + +调用 TRTCCloud 中的 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。 +待资源释放完毕之后,SDK 会通过 onExitRoom() 回调通知到您。 + +如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来之后再执行相关操作。 +否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。 + + 离开房间原因,0:主动调用 exitRoom 退房;1:被服务器踢出当前房间;2:当前房间整个被解散。 + + +@} +@name 房间事件回调 +@{ + +2.1 已加入房间的回调 + +调用 TRTCCloud 中的 enterRoom() 接口执行进房操作后,会收到来自 SDK 的 onEnterRoom(result) 回调:- 如果加入成功,result 会是一个正数(result > 0),代表加入房间的时间消耗,单位是毫秒(ms)。- 如果加入失败,result 会是一个负数(result < 0),代表进房失败的错误码。进房失败的错误码含义请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。 +在 Ver6.6 之前的版本,只有进房成功会抛出 onEnterRoom(result) 回调,进房失败由 onError() 回调抛出。 +在 Ver6.6 及之后改为:进房成功返回正的 result,进房失败返回负的 result,同时进房失败也会有 onError() 回调抛出。result > 0 时为进房耗时(ms),result < 0 时为进房错误码。 + + +1.2 警告回调:用于告知您一些非严重性问题,例如出现了卡顿或者可恢复的解码失败。 + + 错误码 + 警告信息 + 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题 + + +@name 错误事件和警告事件 +@{ + +1.1 错误回调,SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。 +错误码错误信息 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题 + +@defgroup ITRTCCloudCallback_csharp ITRTCCloudCallback +腾讯云视频通话功能的回调接口类 +@{ + +腾讯云视频通话功能的回调接口类 + + + +数组 remoteStatisticsArray 的大小 + + + + +远端成员的音视频统计信息,可能有主画面、小画面以及辅路画面等多路的情况,因此是一个数组 + + + + +数组 localStatisticsArray 的大小 + + + + +本地的音视频统计信息,可能有主画面、小画面以及辅路画面等多路的情况,因此是一个数组 + + + + +总发送字节总数(包含信令和音视频) + + + + +总接收字节数(包含信令和音视频) + + + + +延迟(毫秒),指 SDK 到腾讯云服务器的一次网络往返时间,该值越小越好。 +一般低于50ms的 rtt 相对理想,而高于100ms的 rtt 会引入较大的通话延时。由于数据上下行共享一条网络连接,所以 local 和 remote 的 rtt 相同。 + + + +当前系统的 CPU 使用率(%) + + + + +当前 App 的 CPU 使用率(%) + + + + +S -> C 下行丢包率(%), +该值越小越好,例如,丢包率为0表示网络很好, +丢包率为30@%则意味着 SDK 向服务器发送的数据包中会有30@%丢失在下行传输中。 + + + + +C -> S 上行丢包率(%), + +该值越小越好,例如,丢包率为0表示网络很好, +丢包率为30@%则意味着 SDK 向服务器发送的数据包中会有30@%丢失在上行传输中。 + + + + +统计数据 + + + + +流类型(大画面 | 小画面 | 辅路画面) + + + + +音频码率(Kbps) + + + + +音频采样率(Hz) + + + + +视频码率(Kbps) + + + + +接收帧率(fps) + + + + +视频高度 + + + + +视频宽度 + + + + +该线路的总丢包率(%) + +这个值越小越好,例如,丢包率为0表示网络很好。丢包率是该线路的 userId 从上行到服务器再到下行的总丢包率。如果 downLoss 为0,但是 finalLoss 不为0,说明该 userId 上行时出现了无法恢复的丢包。 + + + +用户 ID,指定是哪个用户的视频流 + + + + +远端成员的音视频统计信息 + + + + +流类型(大画面 | 小画面 | 辅路画面) + + + + +音频发送码率(Kbps) + + + + +音频采样率(Hz) + + + + +视频发送码率(Kbps) + + + + +帧率(fps) + + + + +视频高度 + + + + +视频宽度 + + + +@addtogroup TRTCCloudDef_csharp +@{ + +自己本地的音视频统计信息 + + + +视频画面镜像模式,默认值为 TRTCVideoMirrorType_Disable + + + + +视频画面填充模式,默认值为 TRTCVideoFillMode_Fit + + + + +视频画面旋转方向,默认值为 TRTCVideoRotation0 + + + + +6.16 画面渲染参数 + +您可以通过设置此参数来控制画面的旋转、填充、镜像模式 + + + +【字段含义】房间签名 [选填],当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。 +【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。 + + + + +【字段含义】用户签名 [选填],当前 userId 对应的验证签名,相当于登录密码。不填时,SDK 会继续使用旧的 userSig, + 但用户必须保证旧的 userSig 仍在有效期内,否则会造成进房失败等后果。 +【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。 + + + + +【字段含义】字符串房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。 + + + + +【字段含义】数字房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【推荐取值】取值范围:1 - 4294967294。 +【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。 + + + + +6.15 切换房间参数 + + + + +【字段含义】音效音量 +【推荐取值】取值范围为0 - 100;默认值:100 + + + + +【字段含义】音效是否上行 +【推荐取值】YES:音效在本地播放的同时,会上行至云端,因此远端用户也能听到该音效;NO:音效不会上行 + + + + +【字段含义】循环播放次数 +【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音效一次;1表示播放音效两次;以此类推 + + + + +【字段含义】音效路径 + + + + +【字段含义】音效 ID +【特别说明】SDK 允许播放多路音效,因此需要音效 ID 进行标记,用于控制音效的开始、停止、音量等 + + + + +6.14 音效播放 + + + + +【字段含义】文件路径(必填),录音文件的保存路径。该路径需要用户自行指定,请确保路径存在且可写。 +【特别说明】该路径需精确到文件名及格式后缀,格式后缀决定录音文件的格式,目前支持的格式有 PCM、WAV 和 AAC。 + 例如,指定路径为 path/to/audio.aac,则会生成一个 AAC 格式的文件。 + 请指定一个有读写权限的合法路径,否则录音文件无法生成。 + + + + +6.13 录音参数 + +请正确填写参数,确保录音文件顺利生成。 + + + +旁路转推的 URL + + + + +腾讯云直播 bizid,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取 + + + + +腾讯云 AppID,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取 + + + + +6.12 CDN 旁路推流参数 + + + + +【字段含义】 数组 mixUsersArray 的大小 + + + + +【字段含义】每一路子画面的位置信息 + + + + +【字段含义】最终转码后的音频声道数 +【推荐取值】默认值:1。取值范围为 [1,2] 中的整型。 + + + +【字段含义】最终转码后的音频码率。 +【推荐取值】默认值:64kbps,取值范围是 [32,192]。 + + + +【字段含义】最终转码后的音频采样率。 +【推荐取值】默认值:48000Hz。支持12000HZ、16000HZ、22050HZ、24000HZ、32000HZ、44100HZ、48000HZ。 + + + +【字段含义】混流背景颜色,格式为 0xRRGGBB。 +【推荐取值】默认值:0x000000,黑色。 + + + +【字段含义】最终转码后的视频分辨率的关键帧间隔(又称为 GOP),单位秒 +【推荐取值】默认值:2,单位为秒,取值范围是 [1,8]。 + + + +【字段含义】最终转码后的视频分辨率的帧率(FPS) +【推荐取值】默认值:15fps,取值范围是 (0,30]。 + + + +【字段含义】最终转码后的视频分辨率的码率(kbps) +【推荐取值】如果填0,后台会根据videoWidth和videoHeight来估算码率,您也可以参考枚举定义TRTCVideoResolution_640_480的注释。 + + + +【字段含义】最终转码后的视频分辨率的高度(px) +【推荐取值】推荐值:640px ,如果你是纯音频推流,请将 width × height 设为 0px × 0px,否则混流后会携带一条画布背景的视频流。 + + + +【字段含义】最终转码后的视频分辨率的宽度(px) +【推荐取值】推荐值:360px ,如果你是纯音频推流,请将 width × height 设为 0px × 0px,否则混流后会携带一条画布背景的视频流。 + + + +【字段含义】腾讯云直播 bizid +【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】后,在“直播信息”中获取 + + + +【字段含义】腾讯云直播 AppID +【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】后,在“直播信息”中获取 + + + +【字段含义】转码 config 模式 + + + + +6.11 云端混流(转码)配置 + +包括最终编码质量和各路画面的摆放位置 + + + +6.10 混流参数配置模式 + +目前暂仅支持手动配置这一种模式,即需要指定 TRTCTranscodingConfig 的全部参数。 + + + + 屏幕分享模式,适用于在线教育场景等以屏幕分享为主的应用场景,仅支持 Windows 和 Mac 两个平台的 SDK。 + SDK 会先根据您(通过 videoWidth 和 videoHeight 参数)设置的目标分辨率构建一张画布, + 当老师未开启屏幕分享时,SDK 会将摄像头画面等比例拉伸绘制到该画布上;当老师开启屏幕分享之后,SDK 会将屏幕分享画面绘制到同样的画布上。 + 这样操作的目的是为了确保混流模块的输出分辨率一致,避免课程回放和网页观看的花屏问题(网页播放器不支持可变分辨率)。 + 由于教学模式下的视频内容以屏幕分享为主,因此同时传输摄像头画面和屏幕分享画面是非常浪费带宽的。 + 推荐的做法是直接将摄像头画面通过 setLocalVideoRenderCallback 接口自定义绘制到当前屏幕上。 + 在该模式下,您无需设置 TRTCTranscodingConfig 中的 mixUsers 参数,SDK 不会混合学生的画面,以免干扰屏幕分享的效果。 + 您可以将 TRTCTranscodingConfig 中的 width × height 设为 0px × 0px,SDK 会自动根据用户当前屏幕的宽高比计算出一个合适的分辨率: + - 如果老师当前屏幕宽度 <= 1920px,SDK 会使用老师当前屏幕的实际分辨率。 + - 如果老师当前屏幕宽度 > 1920px,SDK 会根据当前屏幕宽高比,选择 1920x1080(16:9)、1920x1200(16:10)、1920x1440(4:3) 三种分辨率中的一种。 + + + + + 预排版模式,通过占位符提前对各路画面进行排布 + 此模式下,您依然需要设置 mixUsers 参数,但可以将 userId 设置为占位符,可选的占位符有: + - "$PLACE_HOLDER_REMOTE$" : 指代远程用户的画面,可以设置多个。 + - "$PLACE_HOLDER_LOCAL_MAIN$" : 指代本地摄像头画面,只允许设置一个。 + - "$PLACE_HOLDER_LOCAL_SUB$" : 指代本地屏幕分享画面,只允许设置一个。 + 但是您可以不需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调进行实时调整, + 只需要在进房成功后调用一次 setMixTranscodingConfig() 即可,之后 SDK 会自动将真实的 userId 补位到您设置的占位符上。 + + + + + 纯音频模式,适用于语音通话(AudioCall)和语音聊天室(VoiceChatRoom)等纯音频场景。 + 只需要在进房后通过 setMixTranscodingConfig() 接口设置一次,之后 SDK 就会自动把房间内所有上麦用户的声音混流到当前用户的直播流上。 + 此模式下,您无需设置 TRTCTranscodingConfig 中的 mixUsers 参数,只需设置 audioSampleRate、audioBitrate 和 audioChannels 等参数。 + + + + + 全手动模式,灵活性最高,可以自由组合出各种混流方案,但易用性最差。 + 此模式下,您需要填写 TRTCTranscodingConfig 中的所有参数,并需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调, + 以便根据当前房间中各个上麦用户的音视频状态不断地调整 mixUsers 参数,否则会导致混流失败。 + + + + +非法值 + + + + +参与混合的是主路画面(TRTCVideoStreamTypeBig)或屏幕分享(TRTCVideoStreamTypeSub)画面 + + + + +是否纯音频 + + + + +图层层次(1 - 15)不可重复 + + + + +图层位置坐标以及大小,左上角为坐标原点(0,0) (绝对像素值) + + + + +参与混流的 roomId,跨房流传入的实际 roomId,当前房间流传入 roomId = NULL + + + + +参与混流的 userId + + + + +6.9 云端混流中每一路子画面的位置信息 + +TRTCMixUser 用于指定每一路(即每一个 userId)视频画面的具体摆放位置 + + + +下坐标点 + + + + +右坐标点 + + + + +上坐标点 + + + + +左坐标点 + + + + +记录矩形的四个点坐标 +为了兼容 c++ 使用的 RECT 类型 + + + +延迟(毫秒),指当前设备到腾讯云服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms + + + + +下行丢包率,范围是0 - 1.0,例如,0.2表示每从服务器收取10个数据包可能会在中途丢失2个。 + + + + +上行丢包率,范围是0 - 1.0,例如,0.3表示每向服务器发送10个数据包可能会在中途丢失3个。 + + + + +网络质量,内部通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分便越高 + + + + +服务器 IP 地址 + + + + +6.8 网络测速结果 + +您可以在用户进入房间前通过 TRTCCloud 的 startSpeedTest 接口进行测速 (注意:请不要在通话中调用), +测速结果会每2 - 3秒钟返回一次,每次返回一个 IP 地址的测试结果。 + + +- quality 是内部通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分便越高。 +- upLostRate 是指上行丢包率。例如,0.3表示每向服务器发送10个数据包可能会在中途丢失3个。- downLostRate 是指下行丢包率。例如,0.2表示每从服务器收取10个数据包可能会在中途丢失2个。- rtt 是指当前设备到腾讯云服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms。 + + + +时间戳,单位ms + + + + +声道数 + + + + +采样率 + + + + +音频数据的长度 + + + + +音频数据 + + + + +音频帧的格式 + + + + +6.7 音频帧数据 + + + + +画面旋转角度 + + + + +时间戳,单位ms + + + + +画面的高度 + + + + +画面的宽度 + + + + +视频数据的长度,单位是字节,对于i420而言, length = width * height * 3 / 2,对于BGRA32而言, length = width * height * 4 + + + + +视频纹理ID,字段bufferType是LiteAVVideoBufferType_Texture时生效 + + + + +视频数据,字段bufferType是LiteAVVideoBufferType_Buffer时生效 + + + + +视频数据结构类型 + + + + +视频帧的格式 + + + + +6.6 视频帧数据 + + + + +说话者的音量, 取值范围0 - 100 + + + + +说话者的 userId,字符编码格式为 UTF-8 + + + + +6.5 音量大小 + +表示语音音量的评估大小,通过这个数值,您可以在 UI 界面上用图标表征 userId 是否有在说话。 + + + +视频质量 + + + + +用户标识 + + + + +6.4 视频质量 + +表示视频质量的好坏,通过这个数值,您可以在 UI 界面上用图标表征 userId 的通话线路质量 + + + +【字段含义】视频分辨率(云端控制 - 客户端控制) +【推荐取值】云端控制【特别说明】 - Server 模式(默认):云端控制模式,若无特殊原因,请直接使用该模式 - Client 模式:客户端控制模式,用于 SDK 开发内部调试,客户请勿使用 + + + +【字段含义】弱网下是“保清晰”或“保流畅” +【特别说明】 - 弱网下保流畅:在遭遇弱网环境时,画面会变得模糊,且出现较多马赛克,但可以保持流畅不卡顿 - 弱网下保清晰:在遭遇弱网环境时,画面会尽可能保持清晰,但可能容易出现卡顿 + + + +6.3 网络流控相关参数 + +网络流控相关参数,该设置决定了SDK在各种网络环境下的调控方向(例如弱网下是“保清晰”或“保流畅”) + + + +【字段含义】是否允许调整分辨率 +【推荐取值】 - 手机直播建议选择 NO。 - 视频通话模式,若更关注流畅性,建议选择 YES,此时若遇到带宽有限的弱网,SDK 会自动降低分辨率以保障更好的流畅度(仅针对 TRTCVideoStreamTypeBig 生效)。 - 默认值:NO。【特别说明】若有录制需求,选择 YES 时,请确保通话过程中,调整分辨率不会影响您的录制效果。 + + + +【字段含义】最低视频码率,SDK 会在网络不佳的情况下主动降低视频码率,最低会降至 minVideoBitrate 所设定的数值。 +【推荐取值】 - 如果您追求“允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 60%; - 如果您追求“允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为 200kbps; - 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK 的自适应调节能力; - 默认值:0,此时最低码率由 SDK 根据分辨率情况,自动设置合适的数值。【特别说明】 - 当您把分辨率设置的比较高时,minVideoBitrate 不适合设置的太低,否则会出现画面模糊和大范围的马赛克宏块。 比如把分辨率设置为 720p,把码率设置为 200kbps,那么编码出的画面将会出现大范围区域性马赛克。 + + + +【字段含义】目标视频码率,SDK 会按照目标码率进行编码,只有在网络不佳的情况下才会主动降低视频码率。 +【推荐取值】请参考本 TRTCVideoResolution 在各档位注释的最佳码率,也可以在此基础上适当调高。 比如 TRTCVideoResolution_1280_720 对应 1200kbps 的目标码率,您也可以设置为 1500kbps 用来获得更好的清晰度观感。【特别说明】SDK 会努力按照 videoBitrate 指定的码率进行编码,只有在网络不佳的情况下才会主动降低视频码率,最低会降至 minVideoBitrate 所设定的数值。 如果您追求“允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 60%; 如果您追求“允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为 200kbps; 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK 的自适应调节能力。 + + + +【字段含义】视频采集帧率 +【推荐取值】15fps 或 20fps。5fps以下,卡顿感明显。10fps以下,会有轻微卡顿感。20fps以上,则过于浪费(电影的帧率为24fps)。【特别说明】很多 Android 手机的前置摄像头并不支持15fps以上的采集帧率,部分过于突出美颜功能的 Android 手机前置摄像头的采集帧率可能低于10fps。 + + + +【字段含义】分辨率模式(横屏分辨率 - 竖屏分辨率) +【推荐取值】手机直播建议选择 Portrait,Window 和 Mac 建议选择 Landscape。【特别说明】如果 videoResolution 指定分辨率 640 × 360,resMode 指定模式为 Portrait,则最终编码出的分辨率为360 × 640。 + + + +【字段含义】 视频分辨率 +【推荐取值】 - 视频通话建议选择360 × 640及以下分辨率,resMode 选择 Portrait。 - 手机直播建议选择540 × 960,resMode 选择 Portrait。 - Window 和 iMac 建议选择640 × 360 及以上分辨率,resMode 选择 Landscape。【特别说明】 TRTCVideoResolution 默认只有横屏模式的分辨率,例如640 × 360。 如需使用竖屏分辨率,请指定 resMode 为 Portrait,例如640 × 360结合 Portrait 则为360 × 640。 + + + +6.2 视频编码参数 + +该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量)。 + + + +【字段含义】业务数据 [非必填],部分高级特性才需要使用该字段。 +【推荐取值】不建议使用 + + + +【字段含义】房间签名 [非必填],当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。 +【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。 + + + +【字段含义】设置云端录制完成后的回调消息中的 "userdefinerecordid" 字段内容,便于您更方便的识别录制回调。 +【推荐取值】限制长度为64字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。【参考文档】[云端录制](https://cloud.tencent.com/document/product/647/16823)。 + + + +【字段含义】绑定腾讯云直播 CDN 流 ID[非必填],设置之后,您就可以在腾讯云直播 CDN 上通过标准直播方案(FLV或HLS)播放该用户的音视频流。 +【推荐取值】限制长度为64字节,可以不填写,一种推荐的方案是使用 “sdkappid_roomid_userid_main” 作为 streamid,这样比较好辨认且不会在您的多个应用中发生冲突。【特殊说明】要使用腾讯云直播 CDN,您需要先在[控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启“启用旁路推流”开关。【参考文档】[CDN 旁路直播](https://cloud.tencent.com/document/product/647/16826)。 + + + +【字段含义】直播场景下的角色,仅适用于直播场景(TRTCAppSceneLIVE),视频通话场景下指定无效。 +【推荐取值】默认值:主播(TRTCRoleAnchor) + + + +【字段含义】房间号码 [必填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【推荐取值】您可以自定义设置该参数值,但不可重复。如果您的用户帐号 ID (userId)为数字类型,可直接使用创建者的用户 ID 作为 roomId。 + + + +【字段含义】用户签名 [必填],当前 userId 对应的验证签名,相当于登录密码。 +【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。 + + + +【字段含义】用户标识 [必填],当前用户的 userId,相当于用户名,使用 UTF-8 编码。 +【推荐取值】如果一个用户在您的帐号系统中的 ID 为“abc”,则 userId 即可设置为“abc”。 + + + +【字段含义】应用标识 [必填],腾讯视频云基于 sdkAppId 进行计费统计。 +在 [实时音视频控制台](https://console.cloud.tencent.com/rav/) 创建应用后可在帐号信息页面中得到该 ID。 + + + +6.1 进房相关参数 + +只有该参数填写正确,才能顺利调用 enterRoom 进入 roomId 所指定的音视频房间。 + + + +遍历完窗口列表后,调用release释放资源。 + + + + 窗口信息 + + + 窗口个数 + + + +5.6 屏幕窗口列表 + + + + +指定高亮边框的宽度,传入0时采用默认描边宽度,默认宽度为 5,最大值为 50 + + + + +指定高亮边框颜色,RGB格式,传入0时采用默认颜色,默认颜色为 #8CBF26 + + + + +是否开启高性能模式(只会在分享屏幕时会生效),开启后屏幕采集性能最佳,但无法过滤远端的高亮边框,默认为 true + + + + +是否高亮正在共享的窗口,默认为 true + + + + +是否采集目标内容时顺带采集鼠标,默认为 true + + + + +5.5 屏幕采集属性 + + + + +高 + + + + +宽 + + + + +5.4 记录 buffer 的长宽 +为了兼容 c++ 使用的 SIZE 类型 + + + +图标内容 + + + + +缩略图内容 + + + + +采集源名称,UTF8编码 + + + + +采集源ID;对于窗口,该字段指示窗口句柄;对于屏幕,该字段指示屏幕ID + + + + +采集源类型 + + + + +5.3 屏幕采集信息 + + + + +图高 + + + + +图宽 + + + + +图缓存大小 + + + + +图内容 + + + + +5.2 图缓存 + + + + +5.1 屏幕分享目标信息 + +您可以通过 getScreenCaptureSources() 枚举可共享的窗口列表,列表通过 ITRTCScreenCaptureSourceList 返回 + + + +该分享目标是整个Windows桌面 + + + + +该分享目标是某一个Windows窗口 + + + + +4.3 水印图片的源类型 + + + + +RGBA32格式内存块 + + + + +BGRA32格式内存块 + + + + +图片文件路径,支持 BMP、GIF、JPEG、PNG、TIFF、Exif、WMF 和 EMF 文件格式 + + + + +4.2 设备操作 + + + + +设备已启用 + + + + +移除设备 + + + + +添加设备 + + + + +4.1 Log 级别 + + + + +不输出任何 SDK Log + + + + +只输出 FATAL 级别的 Log + + + + +只输出ERROR 和 FATAL 级别的 Log + + + + +只输出 WARNING,ERROR 和 FATAL 级别的 Log + + + + +输出 INFO,WARNING,ERROR 和 FATAL 级别的 Log + + + + +输出 DEBUG,INFO,WARNING,ERROR 和 FATAL 级别的 Log + + + + +输出所有级别的 Log + + + + +3.2 声音音质 + + +音频音质用来衡量声音的保真程度,TRTCAudioQualitySpeech 适用于通话场景,TRTCAudioQualityMusic 适用于高音质音乐场景。 + + + + +高音质:采样率:48k;双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。 + + + + +默认音质:采样率:48k;单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。 + + + + +流畅音质:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。 + + + + +3.1 音频帧的格式 + + + + +PCM,每个采样点占16bit数据量。 + + + + +2.4 画质偏好 + +指当 TRTC SDK 在遇到弱网络环境时,您期望“保清晰”或“保流畅”:- Smooth:弱网下保流畅。即在遭遇弱网环境时首先确保声音的流畅和优先发送,画面会变得模糊且会有较多马赛克,但可以保持流畅不卡顿。- Clear:弱网下保清晰。即在遭遇弱网环境时,画面会尽可能保持清晰,但可能会更容易出现卡顿。 + + + +弱网下保清晰 + + + + +弱网下保流畅 + + + + +2.3 流控模式 + +TRTC SDK 内部需要时刻根据网络情况调整内部的编解码器和网络模块,以便能够对网络的变化做出反应。为了支持快速算法升级,SDK 内部设置了两种不同的流控模式:- ModeServer: 云端控制,默认模式,推荐选择。- ModeClient: 本地控制,用于 SDK 开发内部调试,客户请勿使用。 + +推荐您使用云端控制,这样每当我们升级 Qos 算法时,您无需升级 SDK 即可体验更好的效果。 + + + + +云端控制 (默认) + + + + +客户端控制(用于 SDK 开发内部调试,客户请勿使用) + + + + +2.2 角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom) + +在直播场景中,多数用户仅为观众,个别用户是主播,这种角色区分有利于 TRTC 进行更好的定向优化。- Anchor:主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。- Audience:观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。 + + + +观众 + + + + +主播 + + + + +2.1 应用场景 + +TRTC 可用于视频会议和在线直播等多种应用场景,针对不同的应用场景,TRTC SDK 的内部会进行不同的优化配置:- TRTCAppSceneVideoCall :视频通话场景,适合[1对1视频通话]、[300人视频会议]、[在线问诊]、[视频聊天]、[远程面试]等。- TRTCAppSceneLIVE :视频互动直播,适合[视频低延时直播]、[十万人互动课堂]、[视频直播 PK]、[视频相亲房]、[互动课堂]、[远程培训]、[超大型会议]等。- TRTCAppSceneAudioCall :语音通话场景,适合[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等。- TRTCAppSceneVoiceChatRoom:语音互动直播,适合:[语音低延时直播]、[语音直播连麦]、[语聊房]、[K 歌房]、[FM 电台]等。 + + + +语音互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。 +适合:[语音低延时直播]、[语音直播连麦]、[语聊房]、[K 歌房]、[FM 电台]等。注意:此场景下,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。 + + + +语音通话场景,支持 48kHz,支持双声道。单个房间最多支持300人同时在线,最高支持50人同时发言。 +适合:[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等。 + + + +视频互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。 +适合:[视频低延时直播]、[十万人互动课堂]、[视频直播 PK]、[视频相亲房]、[互动课堂]、[远程培训]、[超大型会议]等。注意:此场景下,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。 + + + +视频通话场景,支持720P、1080P高清画质,单个房间最多支持300人同时在线,最高支持50人同时发言。 +适合:[1对1视频通话]、[300人视频会议]、[在线问诊]、[视频聊天]、[远程面试]等。 + + + +1.10 画面渲染镜像类型 + +TRTC 的画面镜像提供下列设置模式 + + + +所有画面均不镜像 + + + + +所有画面均镜像 + + + + +1.9 视频数据包装格式 + + + + +纹理类型 + + + + +二进制Buffer类型 + + + + +未知类型 + + + + +1.8 视频像素格式 + +TRTC SDK 提供针对视频的自定义采集和自定义渲染功能,在自定义采集功能中,您可以用下列枚举值描述您采集的视频像素格式。在自定义渲染功能中,您可以指定您期望 SDK 回调的视频像素格式。 + + + +BGRA32 + + + + +OpenGL 2D 纹理 + + + + +I420 + + + + +未知类型 + + + + +1.7 美颜(磨皮)算法 + +TRTC SDK 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案。 + + + +自然,磨皮算法更多地保留了面部细节,主观感受上会更加自然。 + + + + +光滑,适用于美女秀场,效果比较明显。 + + + + +1.6 视频画面旋转方向 + +TRTC SDK 提供了对本地和远程画面的旋转角度设置 API,下列的旋转角度都是指顺时针方向的。 + + + +顺时针旋转270度 + + + + +顺时针旋转180度 + + + + +顺时针旋转90度 + + + + +顺时针旋转0度 + + + + +1.5 视频画面填充模式 + +如果画面的显示分辨率不等于画面的原始分辨率,就需要您设置画面的填充模式:- TRTCVideoFillMode_Fill,超出显示视窗的视频部分将被裁剪,画面显示可能不完整。- TRTCVideoFillMode_Fit,图像长边填满屏幕,短边区域会被填充黑色,但画面的内容肯定是完整的。 + + + +图像长边填满屏幕,短边区域会被填充黑色 + + + + +图像铺满屏幕,超出显示视窗的视频部分将被裁剪 + + + + +1.4 画质级别 + +TRTC SDK 对画质定义了六种不同的级别,Excellent 表示最好,Down 表示不可用。 + + + +不可用 + + + + +很差 + + + + +差 + + + + +一般 + + + + +好 + + + + +最好 + + + + +未定义 + + + + +1.3 视频流类型 + +TRTC 内部有三种不同的音视频流,分别为:-主画面:最常用的一条线路,一般用来传输摄像头的视频数据。-小画面:跟主画面的内容相同,但是分辨率和码率更低。-辅流画面:一般用于屏幕分享或远程播片(例如老师播放视频给学生观看)。 + +- 如果主播的上行网络和性能比较好,则可以同时送出大小两路画面。 +- SDK 不支持单独开启小画面,小画面必须依附于主画面而存在。 + + + +辅流(屏幕分享) + + + + +小画面视频流 + + + + +主画面视频流 + + + + +1.2 视频分辨率模式 + +- 横屏分辨率:TRTCVideoResolution_640_360 + TRTCVideoResolutionModeLandscape = 640 × 360- 竖屏分辨率:TRTCVideoResolution_640_360 + TRTCVideoResolutionModePortrait = 360 × 640 + + + +竖屏分辨率 + + + + +横屏分辨率 + + + +@defgroup TRTCCloudDef_csharp 关键类型定义 +腾讯云视频通话功能的关键类型定义 +@{ + +1.1 视频分辨率 + +此处仅定义横屏分辨率,如需使用竖屏分辨率(例如360 × 640),需要同时指定 TRTCVideoResolutionMode 为 Portrait。 + + + +屏幕分享 - 建议码率2000kbps + + + + +摄像头采集 - 建议码率1200kbps +屏幕分享 - 建议码率 低清:1000kbps 高清:1600kbps + + + +建议码率850kbps + + + + +建议码率550kbps + + + + +建议码率350kbps + + + + +建议码率250kbps + + + + +建议码率200kbps + + + + +建议码率150kbps + + + + +建议码率1000kbps + + + + +建议码率600kbps + + + + +建议码率400kbps + + + + +建议码率300kbps + + + + +建议码率250kbps + + + + +建议码率200kbps + + + + +建议码率150kbps + + + + +建议码率100kbps + + + + +建议码率350kbps + + + + +建议码率200kbps + + + + +建议码率100kbps + + + + +建议码率80kbps + + + + +请求视频位成功 + + + + +连接接口机服务器成功 + + + + +拉取接口机服务器地址成功 + + + + +音频状态位变化通知 + + + + +视频状态位变化通知 + + + + +退房通知 + + + + +进房通知 + + + + +自己进入房间失败 + + + + +WiFi 切换到4G 会触发断线重连,此时需要重新进入房间(拉取最优的服务器地址) + + + + +下发房间成员列表(不包括自己) + + + + +退出房间 + + + + +进入房间成功 + + + + +TXLivePlayer 接收到http响应头中的 flvSessionKey 信息 + + + + +音频设备的route发生改变,即当前的输入输出设备发生改变,比如耳机被拔出 + + + + +释放麦克风占用 + + + + +视频流MetaData事件 + + + + +麦克风启动成功 + + + + +音频首次播放(SDK 内部事件,不会对外抛出) + + + + +音频正在播放(SDK 内部事件,不会对外抛出) + + + + +音频正在加载(SDK 内部事件,不会对外抛出) + + + + +音频首次加载(SDK 内部事件,不会对外抛出) + + + + +软解码器启动成功(SDK 内部事件,不会对外抛出) + + + + +硬解码器启动成功(SDK 内部事件,不会对外抛出) + + + + +视频解码器缓存帧数过多,超过40帧(SDK 内部事件,不会对外抛出) + + + + +点播,视频播放 Seek 完成(SDK 内部事件,不会对外抛出) + + + + +点播,DNS 解析完成(SDK 内部事件,不会对外抛出) + + + + +点播,收到首帧数据(SDK 内部事件,不会对外抛出) + + + + +点播,TCP 连接成功(SDK 内部事件,不会对外抛出) + + + + +直播,切流成功(切流可以播放不同画面大小的视频) + + + + +点播,loading 结束 + + + + +点播,视频加载完毕 + + + + +消息事件 + + + + +视频旋转角度发生改变 + + + + +点播,获取点播文件信息成功 + + + + +下行视频分辨率改变 + + + + +解码器启动 + + + + +视频播放 loading + + + + +视频播放结束 + + + + +视频播放进度 + + + + +视频播放开始 + + + + +渲染首个视频数据包(IDR) + + + + +直播,已经与 RTMP 服务器握手完毕,开始拉流 + + + + +直播,已经连接 RTMP 拉流服务器 + + + + +本地录制状态通知 + + + + +本地录制结果 + + + + +软编码器启动成功 + + + + +硬编码器启动成功 + + + + +直播,与 RTMP 服务器连接后,收到 NetStream.Publish.Start 消息,表明流发布成功(SDK 内部事件,不会对外抛出) + + + + +关闭摄像头完成(Windows 和 Mac 版 SDK 使用) + + + + +摄像头设备重新可用(Windows 和 Mac 版 SDK 使用) + + + + +摄像头设备已被移出(Windows 和 Mac 版 SDK 使用) + + + + +一帧截图完成 + + + + +编码器启动成功 + + + + +首帧画面采集完成 + + + + +码率动态调整 + + + + +上行动态调整分辨率 + + + + +录屏启动成功 + + + + +打开摄像头成功 + + + + +直播,已经与 RTMP 服务器握手完毕,开始推流 + + + + +直播,已经连接 RTMP 推流服务器 + + + + +网络状况不佳:上行带宽太小,上传数据受阻 + + + + +网络断连,已启动自动重连 + + + + +直播,连接失败,该流地址无视频(SDK 内部错误码,不会对外抛出) + + + + +直播,connect 服务器调用失败(SDK 内部错误码,不会对外抛出) + + + + +直播,超过30s 没有数据发送,主动断开连接 + + + + +直播,RTMP 读失败(SDK 内部错误码,不会对外抛出) + + + + +直播,RTMP 写失败(SDK 内部错误码,不会对外抛出) + + + + +直播,RTMP 读/写失败,将会断开连接 + + + + +直播,服务器主动断开 + + + + +直播,与 RTMP 服务器握手失败 + + + + +直播,服务器连接失败 + + + + +直播,DNS 解析失败 + + + + +网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀 + + + + +直播,网络断连, 已启动自动重连(自动重连连续失败超过三次会放弃) + + + + +直播,网络断连, 已启动自动重连(自动重连连续失败超过三次会放弃) + + + + +网络状况不佳:上行带宽太小,上传数据受阻 + + + + +当前是观众角色,忽略上行音视频数据 + + + + +网络断开连接 + + + + +音频录制写入文件失败 + + + + +视频采集已开始 + + + + +视频渲染失败 + + + + +软解码器启动失败 + + + + +当前流硬解第一个 I 帧失败,SDK 自动切软解 + + + + +硬解启动失败,采用软解码 + + + + +当前视频播放出现卡顿(用户直观感受) + + + + +当前音频帧解码失败 + + + + +当前视频帧解码失败 + + + + +音频播放设备不可用(例如被占用) + + + + +音频采集设备不可用(例如被占用) + + + + +用户未授权当前应用使用麦克风 + + + + +没有检测到可用的扬声器设备 + + + + +没有检测到可用的麦克风设备 + + + + +用户未授权当前应用使用摄像头 + + + + +没有检测到可用的摄像头设备 + + + + +摄像头采集分辨率被降低,以满足当前帧率和性能最优解。 + + + + +软编码启动失败 + + + + +摄像头采集帧率不足,部分自带美颜算法的 Android 手机上会出现 + + + + +视频编码器从软编码自动切换到硬编码,一般是由于 CPU 使用率过高触发的 + + + + +硬编码启动失败,采用软编码 + + + + +通过域名进行0x1请求 + + + + +混流参数校验失败 + + + + +userDefineRecordId错误 + + + + +自定义流id错误 + + + + +请求通用配置超时 + + + + +服务器内部错误,请重试 + + + + +创建账号数量超过已购买预付费数量限制 + + + + +票据因过期原因校验失败 + + + + +票据校验失败,请检查各项参数是否正确 + + + + +sdkAppId 填写错误 + + + + +登录状态无效,请使用 usersig 重新鉴权 + + + + +安全原因被限制 + + + + +usersig 已经失效,请重新生成,再次尝试 + + + + +帐号已被拉入黑名单,请联系 TLS 帐号支持 QQ 3268519604 + + + + +sdkAppId 未找到,请确认是否已经在腾讯云上配置 + + + + +内部第三方票据验证超时,请重试,如多次重试不成功,请@TLS 帐号支持,QQ 3268519604 + + + + +内部第三方票据验证超时,请重试,如多次重试不成功,请@TLS 帐号支持,QQ 3268519604 + + + + +sig 中 sdkAppId 与请求时的 sdkAppId 不匹配,请检查登录时填写的 sdkAppId 与 sig 中的是否一致 + + + + +sig 中 identifier 与请求时的 identifier 不匹配,请检查登录时填写的 identifier 与 sig 中的是否一致 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +用业务公钥验证 sig 失败,请确认生成的 usersig 使用的私钥和 sdkAppId 是否对应 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +sig 校验失败,可用工具自行验证生成的 sig 是否正确 + + + + +sig 校验失败,请确认下 sig 内容是否被截断,如缓冲区长度不够导致的内容截断 + + + + +sig 校验失败,请确认下 sig 内容是否被截断,如缓冲区长度不够导致的内容截断 + + + + +sig 过期,请尝试重新生成。如果是刚生成,就过期,请检查有效期填写的是否过小,或者填的 0 + + + + +Protobuf 序列化错误 + + + + +无法保存用户自定义 recordId + + + + +代理机超出限制 + + + + +未定义角色 + + + + +未定义命令字 + + + + +JSON 串解析失败 + + + + +房间满员 + + + + +房间号超过限制 + + + + +房间号非法 + + + + +请求 I 帧参数错误 + + + + +请求 I 帧房间用户太多 + + + + +请求 I 帧目标用户不存在 + + + + +请求 I 帧包格式错误 + + + + +请求 I 帧未知 opType + + + + +参数错误 + + + + +没有权限请求视频 + + + + +用户被删除状态 + + + + +当前用户没有上行辅路 + + + + +没有空闲路由表 + + + + +没有权限上视频 + + + + +辅路抢视频位、申请辅路请求类型参数错误 + + + + +没有权限进入房间 + + + + +没有权限创建房间 + + + + +locationid 错误 + + + + +频繁切换终端 + + + + +查找用户失败 + + + + +房间添加用户失败 + + + + +房间不存在 + + + + +签名过期 + + + + +签名错误 + + + + +创建房间失败 + + + + +无效的房间 Id + + + + +后台错误 + + + + +token里面的tinyid和进房信令tinyid不同 或是 进房信令没有token + + + + +后台用户位置标识 locationid 错误 + + + + +后台房间标识 roomid 错误 + + + + +房间不存在 + + + + +签名超时 + + + + +签名错误 + + + + +token 超时 + + + + +userSig 校验失败,请检查 TRTCParams.userSig 是否填写正确 + + + + +生成公钥失败 + + + + +无效请求, 分配接口机失败 + + + + +非法SDKAppid + + + + +房间号非法 + + + + +房间号转换出错 + + + + +场景或角色错误 + + + + +房间号错误 + + + + +数据库查询失败(房间相关存储信息) + + + + +HTTPS 请求时,生成 token 错误 + + + + +HTTPS 请求时,生成加密 key 错误 + + + + +权限位校验失败 + + + + +无效的命令字 + + + + +HTTPS token 超时 + + + + +生成签名错误 + + + + +分配接口机错误 + + + + +TOKEN 错误 + + + + +请求解包错误 + + + + +请求发送Json 信令超时 + + + + +请求接口机 IP 返回的列表为空的 + + + + +请求 AES TOKEN 时,server 返回的内容是空的 + + + + +请求 token 无效参数 + + + + +请求接收视频项超时 + + + + +请求关闭视频超时 + + + + +请求状态上报超时 + + + + +请求修改视频能力项超时 + + + + +请求视频数据超时 + + + + +请求视频位超时 + + + + +请求 IP 和 sig 超时,请检查网络是否正常,或网络防火墙是否放行 UDP 访问下列 IP 和域名 query.tencent-cloud.com:8000 162.14.23.140:8000 162.14.7.49:8000 + + + + +请求 token HTTPS 超时,请检查网络是否正常,或网络防火墙是否放行 HTTPS 访问 official.opensso.tencent-cloud.com:443 + + + + +请求视频位失败 + + + + +连接接口机服务器失败 + + + + +拉取接口机服务器地址失败 + + + + +心跳失败,客户端定时向服务器发送数据包,告诉服务器自己活着,这个错误通常是发包超时 + + + + +直播,RTMPACC 低延时拉流失败,且经过多次重试无法恢复 + + + + +直播,服务器拒绝连接请求 + + + + +直播,切流失败(切流可以播放不同画面大小的视频) + + + + +点播,获取点播文件信息失败 + + + + +点播,音视频流解密失败 + + + + +H265 解码失败 + + + + +播放的文件不存在 + + + + +直播,获取加速拉流的地址失败 + + + + +直播,网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放 + + + + +直播,服务器拒绝连接请求,可能是该推流地址已经被占用,或者 TXSecret 校验失败,或者是过期了,或者是欠费了 + + + + +直播,网络不可用,请确认 Wi-Fi、移动数据或者有线网络是否正常 + + + + +直播,连接推流服务器失败(若支持智能选路,IP 全部失败) + + + + +直播,推流地址非法,例如不是 RTMP 协议的地址 + + + + +直播,推流出现网络断开,且经过多次重试无法恢复 + + + + +连麦请求序号错乱 + + + + +被连麦用户达到资源上限 + + + + +被连麦用户已被删除 + + + + +被连麦用户不存在 + + + + +被连麦房间达到连麦上限 + + + + +被连麦房间不存在 + + + + +取消跨房间连麦失败 + + + + +跨房间连麦失败 + + + + +本用户未发起连麦 + + + + +本房间无连麦 + + + + +跨房间连麦签名不匹配 + + + + +跨房间连麦签名时间戳错误 + + + + +跨房间连麦签名解析错误 + + + + +未找到跨房间连麦签名解密密钥 + + + + +跨房间连麦签名解密失败 + + + + +跨房间连麦无签名 + + + + +跨房间连麦请求格式错误 + + + + +跨房间连麦请求超时 + + + + +跨房间连麦重试次数耗尽 + + + + +达到跨房间连麦上限 + + + + +不支持跨房间连麦 + + + + +当前是观众角色,不能请求或断开跨房连麦,需要先 switchRole() 到主播 + + + + +无效参数 + + + + +请求退出连麦超时 + + + + +请求连麦超时 + + + + +停止向腾讯云的直播 CDN 推流信令异常 + + + + +停止向腾讯云的直播 CDN 推流信令超时 + + + + +开始向腾讯云的直播 CDN 推流信令异常 + + + + +开始向腾讯云的直播 CDN 推流信令超时 + + + + +云端混流回包异常 + + + + +旁路转推回包异常 + + + + +云端混流请求超时 + + + + +旁路转推请求超时 + + + + +设置的 buffer type 不支持 + + + + +设置的 pixel format 不支持 + + + + +不支持的音频采样率 + + + + +音频帧编码失败,例如传入自定义音频数据,SDK 无法处理 + + + + +不支持的视频分辨率 + + + + +视频帧编码失败,例如 iOS 设备切换到其他应用时,硬编码器可能被系统释放,再切换回来时,硬编码器重启前,可能会抛出 + + + + +录屏被系统中止 + + + + +其他用户正在上行辅路 + + + + +没有权限上行辅路 + + + + +录屏失败,在 Android 平台,需要5.0以上的系统,在 iOS 平台,需要11.0以上的系统 + + + + +开始录屏失败,如果在移动设备出现,可能是权限被用户拒绝了,如果在 Windows 或 Mac 系统的设备出现,请检查录屏接口的参数是否符合要求 + + + + +停止扬声器失败 + + + + +扬声器设置参数失败 + + + + +打开扬声器失败,例如在 Windows 或 Mac 设备,扬声器的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序 + + + + +停止麦克风失败 + + + + +麦克风正在被占用中,例如移动设备正在通话时,打开麦克风会失败 + + + + +麦克风设置参数失败 + + + + +麦克风设备未授权,通常在移动设备出现,可能是权限被用户拒绝了 + + + + +打开麦克风失败,例如在 Windows 或 Mac 设备,麦克风的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序 + + + + +摄像头正在被占用中,可尝试打开其他摄像头 + + + + +摄像头参数设置出错(参数不支持或其它) + + + + +摄像头设备未授权,通常在移动设备出现,可能是权限被用户拒绝了 + + + + +打开摄像头失败,例如在 Windows 或 Mac 设备,摄像头的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序 + + + + +请求退房超时 + + + + +服务不可用。请检查:套餐包剩余分钟数是否大于0,腾讯云账号是否欠费 + + + + +请求进房超时,请检查网络 + + + + +进房参数 userSig 不正确 + + + + +进房参数 userID 不正确 + + + + +进房参数 roomId 错误 + + + + +进房参数 sdkAppId 错误 + + + + +进房参数为空,请检查 enterRoom:appScene: 接口调用是否传入有效的 param + + + + +进入房间失败 + + + + +无错误 + + + + \brief 自定义音频采集接口,startPreview的srcType = TXE_VIDEO_SRC_USER_DATA时通过此接口传入PCM音频格式数据 + + \param frame.data - PCM缓冲 + \param frame.length - PCM缓冲长度 + \param frame.sampleRate - 音频采样率,建议48K, + \param frame.channel - 音频声道数,目前只支持 1或2声道。 + \param frame.audioFormat - 音频数据格式,目前只支持LiteAVAudioFrameFormatPCM格式。 + \param frame.timestamp - 音频帧采集的时间戳。 + \note 量化位数,目前值支持16byte格式。 + + + + \brief 自定义视频采集接口,startPreview的srcType = TXE_VIDEO_SRC_USER_DATA时通过此接口传入I420格式的视频数据 + + \param frame.data - 视频缓冲,目前值支持紧凑内存的I420数据 + \param frame.lenth - 视频缓冲长度 + \param frame.width - 视频图像长 + \param frame.width - 视频图像宽 + \param frame.videoFormat - 视频格式,目前只支持LiteAVVideoPixelFormat_I420格式。 + \param frame.timestamp - 视频帧采集的时间戳。 + + + + \brief 显示仪表盘(状态统计和事件消息浮层view),方便调试 + + \param showType 0: 不显示 1: 显示精简版 2: 显示全量版 + + + +\brief:设置是否就近选路 +\param:enable - true表示启用,false表示禁用,SDK 默认为true +\return:无 + + + +\brief:设置视频暂停 + + + +\brief:设置视频帧率 +\param:fps - 视频帧率,默认值为15,重启后生效 +\return:无 + + + +\brief:配合 setAutoAdjustStrategy 使用,当 AutoAdjust 策略指定为 TXE_AUTO_ADJUST_NONE 时,如下的两个函数调用均视为无效 +\param:videoBitrateMin - 允许 SDK 输出的最小视频码率,比如 640x360 分辨率下这个值适合设置为 300kbps +\param:videoBitrateMax - 允许 SDK 输出的最大视频码率, 比如 640x360 分辨率下这个值适合设置为 1000kbps +\return:无 + + + +\brief:设置流控策略,即是否允许 SDK 根据当前网络情况调整视频码率,以避免网络上传速度不足导致的画面卡顿 +\param:strategy - 参考 TXLiveTypeDef.h 中定义的 TXEAutoAdjustStrategy 枚举值 +\return:无 + + + +\brief:设置视频码率,注意,不是分辨率越高画面越清晰,是码率越高画面越清晰 +\param:bitrate - 视频码率,单位 kbps, 比如 640x360 分辨率需要配合 800kbps 的视频码率 +\return:无 + + + +\brief:设置推流画面的镜像效果 +\param:mirror - true表示画面左右反转,false表示保持原样 +\return:无 + + + +\brief:设置预览渲染的镜像效果 +\param:mirror - true表示画面左右反转,false表示保持原样 +\return:无 + + + +\brief:设置美颜和美白效果 +\param:beautyStyle - 参考 TXLiveTypeDef.h 中定义的 TXEBeautyStyle 枚举值 +\param:beautyLevel - 美颜级别取值范围 1 ~ 9; 0 表示关闭,1 ~ 9值越大,效果越明显 +\param:whitenessLevel - 美白级别取值范围 1 ~ 9; 0 表示关闭,1 ~ 9值越大,效果越明显 +\return:无 + + + + * \brief:设置视频分辨率 + * \param:resolution - 视频分辨率,参考 TXLiveTypeDef.h 中定义的 TXEVideoResolution 枚举值 + * \return:无 + + + +\brief:推流的画面质量预设选项 +\param:paramType - 预设类型,参考 TXLiveTypeDef.h 中定义的 TXEVideoQualityParamPreset 枚举值 +\param:ratio - 预设画面比例,参考 TXLiveTypeDef.h 中定义的 TXEVideoResolution 枚举值 +\return:无 +\startPush前生效。 + + + +\brief:设置图像的顺时针旋转角度 +\param:rotation - 参考 TXLiveTypeDef.h 中定义的 TXEVideoRotationType 枚举值 +\return:无 + + + +\brief:设置图像的渲染(填充)模式 +\param:mode - 参考 TXLiveTypeDef.h 中定义的 TXERenderMode 枚举值 +\return:无 + + + +\brief:静音接口 +\param:mute - 是否静音 +\return:无 + + + +\brief:切换摄像头,支持在推流中动态切换 +\param:cameraIndex : 摄像头需要,取值返回: 0 ~ (摄像头个数 - 1) +\return:无 + + + + * \brief:停止推流,注意推流 url 有排他性,也就是一个推流 Url 同时只能有一个推流端向上推流 + * \param:无 + * \return:无 + * \attention: 若通过 startPreview 接口开启了预览,在调用这个接口前,请先调用 stopPreview 接口 + + + +\brief:启动推流 (在 startPush 之前需要先 startPreview 启动摄像头预览,否则推送出去的数据流里只有音频) +\param:url - 一个合法的推流地址,腾讯云的推流 URL 都要求带有 txSecret 和 txTime 防盗链签名,如果您发现推流推不上去,请检查这两个签名是否合法。 +\return:成功 or 失败,内存分配、资源申请失败等原因可能会导致返回失败 + + + +\brief:推流的图像截图到本地 +\param:filePath - 存储路径 +\param: length - 路径字符长度 +\return:0成功,非0失败:-1:失败,-2路径非法,-3文件存在,-4未推流 + + + + \brief 【屏幕共享】选择要分享的目标窗口或目标区域,支持如下四种情况: + + >>> 共享整个屏幕 : sourceInfoList 中type为Screen的source,captureRect 设为 { 0, 0, 0, 0 } + >>> 共享指定区域 : sourceInfoList 中type为Screen的source,captureRect 设为非 NULL,比如 { 100, 100, 300, 300 } + >>> 共享整个窗口 : sourceInfoList 中type为Window的source,captureRect 设为 { 0, 0, 0, 0 } + >>> 共享窗口区域 : sourceInfoList 中type为Window的source,captureRect 设为非 NULL,比如 { 100, 100, 300, 300 } + + \note: 您可以在屏幕分享的过程中掉用该函数来切换目标窗口或者调整目标区域 + + \param source - 指定分享源 + \param captureRect - 指定捕获的区域 + \param captureMouse - 指定是否捕获鼠标指针 + \param highlightWindow - 指定是否高亮正在共享的窗口以及当捕获图像被遮挡时高亮遮挡窗口提示用户移走遮挡 + + + + + \brief 【屏幕共享】枚举可共享的窗口列表, + + \param thumbSize - 指定要获取的窗口缩略图大小,缩略图可用于绘制在窗口选择界面上 + \param iconSize - 指定要获取的窗口图标大小 + + \return 列表通过返回值 ILiteAVScreenCaptureSourceList 返回 + \note 如果delete ILiteAVScreenCaptureSourceList*指针会编译错误,SDK维护ILiteAVScreenCaptureSourceList对象的生命周期。 + + + +\brief:关闭视频源预览 +\return 无 + + + +\brief:重设摄像头预览窗口 +\param:rendHwnd - 承载预览画面的 HWND,目前 SDK 内部会向 rendHwnd (整个窗口)上绘制图像的 +\return 无 + + + +\brief:启动视频源预览 +\param:srcType - 参考 TXLiveTypeDef.h 中定义的 TXEVideoCaptureSrcType 枚举值 +\param:rendHwnd - 承载预览画面的 HWND,目前 SDK 内部会向 rendHwnd (整个窗口)上绘制图像的 +\param:dataFormat - srcType = TXE_VIDEO_SRC_USER_DATA时生效,指定传入的参数 +\return: 成功 or 失败 + + + +\brief:关闭音频采集 + + + +\brief:启动音频采集 +\param:srcType - 音频数据源类型 + + + +\brief:设置音频前处理开关 +\param:channels - 参考 TXLiveTypeDef.h 中定义的 TXEAudioChannels 枚举值,SDK 内部默认选择 TXE_AUDIO_CHANNELS_1 单声道 + + + +\brief:设置音频前处理开关 +\param:preprocessType - 参考 TXLiveTypeDef.h 中定义的 TXEAudioPreprocessType。 +\note : 默认开启AEC、AGC、NS,如需关闭回声消除预处理enableAudioPreprocess(TXE_AUDIO_PREPROCESS_AEC, false)。 + + + +@brief 设置系统声音采集的音量。 +@param [in] value 设置目标音量,取值范围[0,100]. + + + +@brief 关闭系统声音采集。 + + + +@brief 打开系统声音采集。 +@details 采集系统声音。 +@param [in] szPlayerPath 播放器地址;如果用户此参数填空或不填,表示采集系统中的所有声音; + 如果填入exe程序(如:酷狗、QQ音乐)所在路径,将会启动此程序,并只采集此程序的声音; + + + +\brief:关闭麦克风测试 + + + +\brief:开启麦克风测试 + + + +\brief: 获取 SDK 采集音量 + + + + \brief:设置 SDK 采集音量。 + + \return volume 音量大小,取值[0, 65535],默认值为65535 + + + +\brief:查询已选择麦克风的能量值,指示音量的大小 +\return:能量值,范围是[0, 65535] + + + +\brief:设置已选择麦克风的音量 +\param:volume - 设置的音量大小,范围是[0, 65535] + + + +\brief:查询已选择麦克风的音量 +\return:音量值,范围是[0, 65535] + + + +\brief:选择指定的麦克风作为录音设备,不调用该接口时,默认选择索引为0的麦克风 +\param:index - 麦克风设备的索引,要求index值小于 micDeviceCount 接口的返回值 + + + +\brief:设置回调 TXLivePusher 的回调代理,监听推流事件 +\param:callback - ITXLivePusherCallback 类型的代理指针 +\param:pUserData - 一般情况下传 NULL 就可以了,透传用户数据到 ITXLivePusherCallback 的回调函数 +\return 无 + + + +\brief 析构ITXLivePusher对象 + + + + \brief 用于动态加载dll时,导出ITXLivePusher C++对象。 + + \return TXLivePusher对象指针,注意:delete ITXLivePusher*会编译错误,需要调用destroyTXLivePusher释放。 + + + + +显示仪表盘(状态统计和事件消息浮层view),方便调试 +0: 不显示 1: 显示精简版 2: 显示全量版 + + + +设置是否就近选路 +true表示启用,false表示禁用,SDK 默认为true + + + +设置视频暂停 + + + + +设置视频帧率 + + 视频帧率,默认值为15,重启后生效 + + + +配合 setAutoAdjustStrategy 使用,当 AutoAdjust 策略指定为 TXE_AUTO_ADJUST_NONE 时,该函数调用均视为无效 + + 允许 SDK 输出的最小视频码率, 比如 640x360 分辨率下这个值适合设置为 1000kbps + + + +配合 setAutoAdjustStrategy 使用,当 AutoAdjust 策略指定为 TXE_AUTO_ADJUST_NONE 时,该函数调用均视为无效 + + 允许 SDK 输出的最小视频码率,比如 640x360 分辨率下这个值适合设置为 300kbps + + + +设置流控策略,即是否允许 SDK 根据当前网络情况调整视频码率,以避免网络上传速度不足导致的画面卡顿 + + 参考 TXLiveTypeDef.h 中定义的 TXEAutoAdjustStrategy 枚举值 + + + +设置视频码率,注意,不是分辨率越高画面越清晰,是码率越高画面越清晰 + + 视频码率,单位 kbps, 比如 640x360 分辨率需要配合 800kbps 的视频码率 + + + +设置推流画面的镜像效果 + + true表示画面左右反转,false表示保持原样 + + + +设置预览渲染的镜像效果 + + true表示画面左右反转,false表示保持原样 + + + +设置美颜和美白效果 + + 参考 TXLiveTypeDef.h 中定义的 TXEBeautyStyle 枚举值 + 美颜级别取值范围 1 ~ 9; 0 表示关闭,1 ~ 9值越大,效果越明显 + 美白级别取值范围 1 ~ 9; 0 表示关闭,1 ~ 9值越大,效果越明显 + + + +设置视频分辨率 + + 视频分辨率,参考 TXLiveTypeDef.h 中定义的 TXEVideoResolution 枚举值 + + + +推流的画面质量预设选项 + + 预设类型,参考 TXLiveTypeDef.h 中定义的 TXEVideoQualityParamPreset 枚举值 + + + +设置图像的顺时针旋转角度 + + 参考 TXLiveTypeDef.h 中定义的 TXEVideoRotation 枚举值 + + + +设置图像的渲染(填充)模式 + + 参考 TXLiveTypeDef.h 中定义的 TXERenderMode 枚举值 + + + +静音接口 + + 是否静音 + + + +切换摄像头,支持在推流中动态切换 + + 摄像头需要,取值返回: 0 ~ (摄像头个数 - 1) + +指定要开启哪个摄像头的预览,如果只有一个摄像头,则设置为 0 ,否则,需要先用 enumCameras 获取 cameraIndex +cameraIndex == 0 表示打开当前可用的第一个摄像头 +cameraIndex == 1 表示打开当前可用的第二个摄像头 +... ... +cameraIndex == -1 表示打开当前可用的全部摄像头,但是预览的是第一个,通过 switchCamera 来切换摄像头 +Windows 下开启一个 USB 摄像头需要很长的电路和驱动启动时间(一般需要 1 - 3 秒),所以,如果您要实现较好的切换效果 +推荐的做法是:switchCamera 时指定 cameraIndex 为 - 1 来打开全部摄像头 ,后续用 switchCamera 实现瞬间切换摄像头 + + + + +停止推流,注意推流 url 有排他性,也就是一个推流 Url 同时只能有一个推流端向上推流 +若通过 startPreview 接口开启了预览,在调用这个接口前,请先调用 stopPreview 接口 + + + + +启动推流 (在 startPush 之前需要先 startPreview 启动摄像头预览,否则推送出去的数据流里只有音频) + + 合法的推流地址,腾讯云的推流 URL 都要求带有 txSecret 和 txTime 防盗链签名,如果您发现推流推不上去,请检查这两个签名是否合法 + 成功 or 失败,内存分配、资源申请失败等原因可能会导致返回失败 + + + +推流的图像截图到本地 + + 存储路径 + 0成功,非0失败:-1:失败,-2路径非法,-3文件存在,-4未推流 + + + +屏幕区域捕抓参数设置接口,startPreview(srcType = TXE_VIDEO_SRC_SDK_SCREEN..)前调用,默认捕抓整个主屏幕 + + +指定捕抓窗口,如果captureHwnd不为NULL时,捕抓整个captureHwnd窗口大小,此时captureRect设置会失效, +如果captureHwnd为NULL时,则captureRect有效,捕抓主屏幕指定的区域:captureRect + + 被捕抓窗口区域的坐标x,以左上角为准 + 被捕抓窗口区域的坐标y,以左上角为准 + 被捕抓窗口区域的宽度 + 被捕抓窗口区域的高度 + + + +枚举当前的可以捕抓的窗口,如果桌面同时存在多个窗口,那么此函数获取可采集的窗口句柄 + + 当前可捕抓的窗口列表,每一个都分别表示窗口句柄和窗口名称的键值对 + + + +关闭摄像头预览,stopPush 之前调用此函数并不会停止推流,会导致 SDK 只推送音频数据 + + + + +重设摄像头预览区域,当您指定的 HWND 的窗口尺寸发生变化时,可以通过这个函数重新调整视频渲染区域 + + 承载预览画面的 HWND + + + +启动视频源预览 + + 参考 TXLiveTypeDef.h 中定义的 TXEVideoCaptureSrcType 枚举值 + 承载预览画面的 HWND,rendHwnd = null时无需预览视频 + srcType指定为TXE_VIDEO_SRC_USER_DATA时生效,指定传入视频数据的格式 + 成功 or 失败,摄像头被占用可能会导致 camera 打开失败 + + + +关闭音频采集 + + + + +启动音频采集,SDK内部采用48K采样率,单声道,16位宽,实现很低延迟的实时音频通话的效果 + + 音频数据源类型 + + + +设置音频声道数 + + 参考 TXLiveTypeDef.h 中定义的 TXEAudioChannels 枚举值,SDK 内部默认选择 TXE_AUDIO_CHANNELS_1 单声道 + + + +设置系统声音前处理模式 +默认开启AEC、AGC、NS,如需要关闭回声消除enableAudioPreprocess(TXE_AUDIO_PRETREATMENT_AEC, false); + + 参考 TXLiveTypeDef.h 中定义的 TXEAudioPreprocessType + + + +设置系统声音采集的音量(暂时不支持64位) + + 设置目标音量,取值范围[0,100] + + + +关闭系统声音采集(暂时不支持64位) + + + + +打开系统声音采集(暂时不支持64位) + + 播放器地址;如果用户此参数填空或不填,表示采集系统中的所有声音; +如果填入exe程序(如:酷狗、QQ音乐)所在路径, 将会启动此程序,并只采集此程序的声音; + + + +关闭麦克风测试 + + + + +打开麦克风测试 + + + + +查询已选择麦克风的能量值,指示音量的大小 + + 能量值,范围是[0, 65535] + + + +设置已选择麦克风的音量 + + 设置的音量大小,范围是[0, 65535] + + + +查询已选择麦克风的音量 + + 音量值,范围是[0, 65535] + + + +选择指定的麦克风作为录音设备,不调用该接口时,默认选择索引为0的麦克风 + + 麦克风设备的索引,要求index值小于 micDevices 接口的返回值的数组大小 + + + +枚举当前可用的麦克风,如果一台Windows同时安装了多个麦克风,那么此函数获取可用的麦克风数量和名称 + + 当前可用的麦克风列表,查询得到的字符编码格式是UTF-8 + + + +枚举当前可用的摄像头,如果一台Windows同时安装了多个摄像头,那么此函数获取可用的摄像头数量和名称 + + 当前可用的摄像头列表 + + + +设置回调 TXLivePusher 的回调代理,监听推流事件、以及获取音视频数据 + + ITXLivePusherListener 类型的接口类 + 一般情况下传 NULL 就可以了,透传用户数据到 ITXLivePusherCallback 的回调函数 + + + +析构函数,C#代码中要求显示调用Dispose函数,来触发托管C++类析构函数 + + + +\brief:获取 SDK 要播放的音频数据,如果您需要自己播放声音,只需要返回 true 即可接管声音的播放,建议不要在回调函数做耗时操作 +\param:pcm - 音频裸数据buffer +\param:length - buffer 的长度,单位是字节 +\param:sampleRate- 音频采样率,可预期的值有: 8000、16000、32000、44100、48000 +\param:channel - 声道数:单声道 或者 双声道, SDK 默认是走单声道的 +\param:timestamp - 当前这帧音频buffer的时间戳 +\param:pUserData - 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 NULL + + + +\brief:获取 SDK 要播放的视频数据,如果您需要自己渲染视频画面,只需要返回 true 即可接管画面的渲染,建议不要在回调函数做耗时操作 +\param:data - 视频数据 buffer +\param:length - buffer 的长度,单位是字节,对于i420而言, length = width * height * 3 / 2 +\param:width - 画面的宽度,单位 pixel +\param:height - 画面的高度,单位 pixel +\param:format - 视频格式,参考 TXLiveTypeDef.h 中定义的 TXEOutputVideoFormat 枚举值 +\param:pUserData - 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 NULL + + + +\brief:获取 SDK 所采集的音频数据 +\param:pcm - SDK采集的音频裸数据buffer +\param:length - buffer 的长度,单位是字节 +\param:sampleRate- 音频采样率,可预期的值有: 8000、16000、32000、44100、48000 +\param:channel - 声道数:单声道 或者 双声道, SDK 默认是走单声道的 +\param:timestamp - 当前这帧音频buffer的时间戳 +\param:pUserData - 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 NULL +\return:无 + + + +\brief:获取 SDK 所采集的视频数据 +\param:yuv420 - i420 格式的 YUV 视频数据 buffer +\param:length - buffer 的长度,单位是字节,对于i420而言, length = width * height * 3 / 2 +\param:width - 画面的宽度,单位 pixel +\param:height - 画面的高度,单位 pixel +\param:pUserData - 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 NULL +\return:无 + + + + * \brief:设置播放选项 + * + * 缓冲区时长是较为常用的设置项,播放缓冲区的作用是为了抵抗网络波动导致的音视频卡顿。 + * 缓冲区时长越大,视频播放的卡顿率越低,观众跟主播之间的时延也就越高。 + * 缓冲区时长越小,视频播放的卡顿率越高,观众跟主播之间的时延也就越低。 + * + * \note 缓冲区时长不等于观众跟主播之间的时延,一般而言,时延要比缓冲区时长大1-2秒,这取决于 CDN 的质量。 + * 如果主播采用的是 OBS 等直播软件,那么时延还会更高一些,因为 OBS 本身会有1秒以上的推流时延。 + * + * \param:jsonParam - 属性信息,UTF-8编码。 + * + *
+    *    1. AutoAdjustCacheTime | bool  | 设置是否自动调整缓存时间, 默认值:true。
+    *        - true:启用自动调整,SDK 将根据网络状况在一个范围内调整缓冲区时长,网络越好,缓冲越短,时延越小,调整范围为:[MinAutoAdjustCacheTime - MaxAutoAdjustCacheTime]。
+    *        - false:关闭自动调整,SDK 将固定使用默认的播放缓冲区时长,也就是 “CacheTime” 所设置的值。
+    *    
+    *    2. CacheTime | float | 默认的播放缓存时长,单位秒,取值需要大于0.2,默认值:5。
+    *    
+    *    3. MaxAutoAdjustCacheTime | float | 播放器最大缓冲时间,单位秒,取值需要大于0.2,默认值:5,含义:播放器的最大播放延迟大约为 5+1=6 秒(CDN会引入约1秒延迟)。
+    *
+    *    4. MinAutoAdjustCacheTime | float | 播放器最小缓冲时间,单位秒,取值需要大于0.2,默认值:1,含义:播放器的最小播放延迟大约为 1+1=2 秒(CDN会引入约1秒延迟)。
+    *
+    *    5. VideoBlockThreshold | int | 播放器视频卡顿报警阈值,单位毫秒,默认值为800毫秒,含义:视频卡顿超过 800 毫秒,ITXLivePlayerCallback 会通知 PLAY_WARNING_VIDEO_PLAY_LAG。
+    *
+    *    6. ConnectRetryCount | int | 拉流网络断开重连次数,默认值为3。
+    *
+    *    7. ConnectRetryInterval | int | 拉流网络断开重连时间间隔,单位秒,默认值为3。
+    *
+	* 示例:
+	*    setLivePlayAttribute("{\"AutoAdjustCacheTime\":true, \"MinAutoAdjustCacheTime\": 2.0, \"MaxAutoAdjustCacheTime\": 5.0}");
+	* 含义:
+	*    设置播放缓冲区根据网络自动调整,调整范围为2-5秒,观众与主播之间的延迟约为3-6秒(如果主播使用 OBS 推流则为4-7秒),网络越差,延迟越大。
+    * 
+ +\brief:截图当前拉流的图像到本地, +\param:filePath - 存储路径,UTF-8编码。 +\param: length - 路径大小 +\return:0成功,非0失败 +\errorRet: -1:失败,-2路径非法,-3文件存在,-4未拉流 + + + +\brief:是否开启消息通道, 默认值为 false +\param:enableMessage - true:开启,false:关闭 + + + + +\brief:设置视频编码格式,默认格式是TXE_OUTPUT_VIDEO_WITHOUT_OUTPUT +\param:format - 视频编码格式,参考 TXLiveTypeDef.h 中定义的 TXEOutputVideoFormat 枚举值 +\return:无 + + + +\brief:设置渲染的镜像效果 +\param:mirror - true表示画面左右反转,false表示保持原样 +\return:无 + + + +\brief:设置图像的顺时针旋转角度 +\param:rotation - 参考 TXLiveTypeDef.h 中定义的 TXEVideoRotationType 枚举值 +\return:无 + + + +\brief:设置图像的渲染(填充)模式 +\param:mode - 参考 TXLiveTypeDef.h 中定义的 TXERenderMode 枚举值 +\return:无 + + + +\brief:静音接口 +\param:mute - 是否静音 +\return:无 + + + +\brief:是否正在播放 + + + +\brief:恢复播放 + + + +\brief:暂停播放 + + + +\brief:停止播放 + + + + * \brief:开始播放,请在 startPlay 之前 setRenderFrame + * \param:url - 视频播放 URL + * \param:type - 播放类型,参考 TXLiveTypeDef.h 中定义的 TXEPlayType 枚举值 + * \return:无 + + + +\brief:关闭图像渲染 + + + +\brief:重设图像渲染窗口 +\param:rendHwnd - 承载预览画面的 HWND,目前 SDK 内部会向 rendHwnd (整个窗口)上绘制图像的 +\return:无 + + + +\brief:设置视频图像渲染 +\param:rendHwnd - 承载预览画面的 HWND,目前 SDK 内部会向 rendHwnd (整个窗口)上绘制图像的 +\return:无 + + + +\brief: 获取 SDK 采集音量 + + + +\brief: 设置 SDK 采集音量。 +@param volume 音量大小,取值[0, 65535],默认值为65535 + + + +\brief:查询已选择扬声器的能量值,指示音量的大小 +\return:能量值,范围是[0, 65535] + + + +\brief:设置SDK播放的音量,注意设置的不是系统扬声器的音量大小 +\param:volume - 设置的音量大小,范围是[0, 65535] + + + +\brief:查询SDK播放的音量,注意查询得到不是系统扬声器的音量大小 +\return:音量值,范围是[0, 65535] + + + +\brief:选择指定的扬声器作为音频播放的设备,不调用该接口时,默认选择索引为0的扬声器 +\param:index - 扬声器设备的索引,要求index值小于 speakerDeviceCount 接口的返回值 + + + +\brief:设置回调 TXLivePlayer 的回调代理,监听播放事件 +\param:callback - ITXLivePlayerCallback 类型的代理指针 +\param:pUserData - 透传用户数据到 ITXLivePusherCallback 的回调函数,一般情况下传 NULL 就可以了 +\return 无 + + + +\brief 析构ITXLivePlayer对象 + + + + \brief 用于动态加载dll时,导出TXLivePlayer C++对象。 + + \return TXLivePlayer对象指针,注意:delete ITXLivePlayer*会编译错误,需要调用destroyTXLivePlayer释放。 + + + +\brief:设置播放类型 + + + +\brief:设置美颜风格 + + + +\brief:设置输出的视频格式 + + + + \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 推流的画面质量预设选项 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + + - 1.2.0 版本开始引入推流画质接口 setVideoQualityParamPreset 用于傻瓜化的选择推流画质效果。 + - TXLivePush::setVideoQualityParamPreset 内部通过预先配置不同的视频参数调整到对应的质量 + - 目前支持的几种画质选项如下: + + (1)标清 - 采用 640 * 360 级别分辨率,码率会在 400kbps - 800kbps 之间自适应,如果主播的网络条件不理想, + 直播的画质会偏模糊,但总体卡顿率不会太高。 + Android平台下这一档我们会选择采用软编码,软编码虽然更加耗电,但在运动画面的表现要优于硬编码。 + + (2)高清 - 采用 960 * 540 级别分辨率,码率会锁定在 1200kbps,如果主播的网络条件不理想,直播画质不会有变化, + 但这段时间内会出现频繁的卡顿和跳帧。 两个平台下,这一档我们都会采用硬编码。 + + (3)超清 - 采用 1280 * 720 级别分辨率,码率会锁定在 1500kbps,对主播的上行带宽要求比较高,适合观看端是大屏的业务场景。 + + (4)大主播 - 顾名思义,连麦中大主播使用,因为是观众的主画面,追求清晰一些的效果,所以分辨率会优先选择 960 * 540。 + + (5)小主播 - 顾名思义,连麦中小主播使用,因为是小画面,画面追求流畅,分辨率采用 480 * 320, 码率 350kbps 固定。 + + (6)实时音视频通话 - 时延低,小画面,画面追求流畅,分辨率采用 480 * 320, 码率 350kbps 固定。 + + (7)静态画质场景 - 画面变动小,能保证非常低的码率下,视频相对清晰,如截屏正在播放的ppt,1080p,400kb左右码率。 + 【特别说明】 + 1. 使用 setVideoQualityParamPreset 之后,依然可以使用setVideoBitRate、setVideoFPS、setAutoAdjustStrategy等设置自定义画质,以最后一次的设置为准。 + +\brief:SDK推流画质预设选项 + + + +\brief:目前SDK支持的流控策略 + + + +\brief:目前SDK支持的画面顺时针旋转角度 + + + +\brief:目前SDK支持的画面渲染模式,两种模式均会严格保持画面的原始宽高比 + + + +\brief:推流视频分辨率 + + + +\brief:推流视频比例 + + + +\brief:视频数据源类型 + + + +\brief:音频前处理 TXEAudioPreprocessType + + + +\brief:音频数据源类型 + + + +\brief:音频声道数 + + + +\brief SDK在不再需要用到该数据源的时候会调用该方法以通知数据源停止工作 + + + +\brief SDK在成功请求到视频位后会调用该方法以通知数据源开始工作 + + + +以下定义仅用于兼容原有接口,具体定义参见 TRTCTypeDef.h 文件 + + + +@name SDK 导出基础功能接口 +@{ + \brief 获取 SDK 版本号 + + \return 返回 UTF-8 编码的版本号。 + + + + +设置视频编码格式,默认格式是TXE_OUTPUT_VIDEO_WITHOUT_OUTPUT + + 视频编码格式,参考 TXLiveTypeDef.h 中定义的 TXEOutputVideoFormat 枚举值 + + + +设置渲染的镜像效果 + + true表示画面左右反转,false表示保持原样 + + + +设置图像的顺时针旋转角度 + + 参考 TXLiveTypeDef.h 中定义的 TXEVideoRotation 枚举值 + + + +设置图像的渲染(填充)模式 + + 参考 TXLiveTypeDef.h 中定义的 TXERenderMode 枚举值 + + + +静音接口 + + 是否静音 + + + +是否正在播放 + + + + +恢复播放 + + + + +暂停播放 + + + + +停止播放 + + + + +开始播放,请在 startPlay 之前 setRenderFrame + + 视频播放 URL + 播放类型,参考 TXLiveTypeDef.h 中定义的 TXEPlayType 枚举值 + + + +关闭图像渲染 + + + + +重设图像渲染区域,当您指定的 HWND 的窗口尺寸发生变化时,可以通过这个函数重新调整视频渲染区域 + + 承载视频画面的 HWND + + + +挂接视频图像渲染 + + 承载视频画面的 HWND + + + +查询已选择扬声器的能量值,指示音量的大小 + + 设置的音量大小,范围是[0, 65535] + 能量值,范围是[0, 65535] + + + +设置SDK播放的音量,注意设置的不是系统扬声器的音量大小 + + 设置的音量大小,范围是[0, 65535] + + + +查询SDK播放的音量,注意查询得到不是系统扬声器的音量大小 + + 音量值,范围是[0, 65535] + + + +选择指定的扬声器作为音频播放的设备,不调用该接口时,默认选择索引为0的扬声器 + + 扬声器设备的索引,要求index值小于 speakerDeviceCount 接口的返回值 + + + +枚举当前可用的扬声器,如果一台Windows同时安装了多个扬声器,那么此函数获取可用的扬声器数量和名称 + + 当前可用的扬声器列表,查询得到的字符编码格式是UTF-8 + + + +设置回调 TXLivePlayer 的回调代理,监听播放事件、以及获取音视频数据 + + TXLivePlayer 类型的接口类 + 一般情况下传 NULL 就可以了,透传用户数据到 ITXLivePusherCallback 的回调函数 + + + +析构函数,C#代码中要求显示调用Dispose函数,来触发托管C++类析构函数 + + + + +TXLivePusher的推流事件通知 + + 事件ID, 见 TXLiveSDKEventDef.h 中的事件定义 - PushEvent + 事件详情是一个 key-value 字典 + 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 0 + + + +TXCSharpLivePlayer的播放事件通知 + + 事件ID, 见 TXLiveSDKEventDef.h 中的事件定义 - PlayEvent + 事件详情是一个 key-value 字典 + 您在调用 setCallback 时所设置的透传数据,如果您没有设置,该参数始终为 0 + + + +播放事件列表 + + + + +RTMP服务器主动断开 + + + + +RTMP服务器握手失败 + + + + +RTMP服务器连接失败 + + + + +RTMP -DNS解析失败 + + + + +当前流硬解第一个I帧失败,SDK自动切软解 + + + + +当前视频帧不连续,可能丢帧 + + + + +硬解启动失败,采用软解 + + + + +当前视频播放出现卡顿(用户直观感受) + + + + +网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀 + + + + +网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃) + + + + +当前音频帧解码失败 + + + + +当前视频帧解码失败 + + + + +获取加速拉流地址失败 + + + + +网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放 + + + + +视频分辨率改变 + + + + +解码器启动 + + + + +视频播放loading + + + + +视频播放结束 + + + + +视频播放进度 + + + + +视频播放开始 + + + + +渲染首个视频数据包(IDR) + + + + +已经连接服务器,开始拉流 + + + + +已经连接服务器 + + + + +推流事件列表 + + + + +超过30s没有数据发送,主动断开连接 + + + + +RTMP服务器主动断开,请检查推流地址的合法性或防盗链有效期 + + + + +RTMP服务器握手失败 + + + + +RTMP服务器连接失败 + + + + +RTMP -DNS解析失败 + + + + +视频编码码率异常,警告 + + + + +视频编码码率异常,警告 + + + + +视频编码失败,非致命错,内部会重启编码器 + + + + +硬编码启动失败,采用软编码 + + + + +网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃) + + + + +网络状况不佳:上行带宽太小,上传数据受阻 + + + + +摄像头正在被占用中,可尝试打开其他摄像头(PC版SDK专用) + + + + +网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启推流 + + + + +不支持的音频采样率 + + + + +不支持的视频分辨率 + + + + +音频编码失败 + + + + +视频编码失败 + + + + +打开麦克风失败 + + + + +打开摄像头失败 + + + + +关闭摄像头完成(PC版SDK专用) + + + + +摄像头设备重新可用(PC版SDK专用) + + + + +摄像头设备已被移出(PC版SDK专用) + + + + +编码器启动 + + + + +首帧画面采集完成 + + + + +推流动态调整码率 + + + + +推流动态调整分辨率 + + + + +打开摄像头成功 + + + + +已经与服务器握手完毕,开始推流 + + + + +已经连接推流服务器 + + + + +编解码队列DROPCNT + + + + +编解码缓冲大小 + + + + +缓冲区大小,缓冲区越大,说明当前上行带宽不足以消费掉已经生产的视频数据 + + + + +网络抖动情况,抖动越大,网络越不稳定 + + + + +当前的发送速度 + + + + +当前视频I帧间隔 ,也就是视频编码器每个I帧之间的间隔,单位S + + + + +当前视频帧率,也就是视频编码器每条生产了多少帧画面 + + + + +当前音频编码器输出的比特率,也就是编码器每秒生产了多少音频数据,单位 KBPS + + + + +当前视频编码器输出的比特率,也就是编码器每秒生产了多少视频数据,单位 KBPS + + + + +设备总CPU占用 + + + + +cpu使用率 + + + + +拉流相关数据 + + + + +推流相关数据 + + + + +回调状态定义 ,目前提供视频速度、音频速度、帧率、视频缓冲、音频缓冲、视频大小、服务器地址信息 +状态键名定义 + + + + +设置播放类型 + + + + +RTMP直播加速播放 + + + + +RTMP直播 + + + + +设置美颜风格 + + + + +朦胧 + + + + +自然 + + + + +光滑 + + + + +设置输出的视频格式 + + + + +RBGA格式 + + + + +yuv420格式 + + + + +不输出数据 + + + + +推流的画面质量预设选项 +- 1.2.0 版本开始引入推流画质接口 setVideoQualityParamPreset 用于傻瓜化的选择推流画质效果。 +- TXLivePush::setVideoQualityParamPreset 内部通过预先配置不同的视频参数调整到对应的质量 +- 目前支持的几种画质选项如下: + +(1)标清 - 采用 640 * 360 级别分辨率,码率会在 400kbps - 800kbps 之间自适应,如果主播的网络条件不理想, + 直播的画质会偏模糊,但总体卡顿率不会太高。 + Android平台下这一档我们会选择采用软编码,软编码虽然更加耗电,但在运动画面的表现要优于硬编码。 + +(2)高清 - 采用 960 * 540 级别分辨率,码率会锁定在 1200kbps,如果主播的网络条件不理想,直播画质不会有变化, + 但这段时间内会出现频繁的卡顿和跳帧。 两个平台下,这一档我们都会采用硬编码。 + +(3)超清 - 采用 1280 * 720 级别分辨率,码率会锁定在 1500kbps,对主播的上行带宽要求比较高,适合观看端是大屏的业务场景。 + +(4)大主播 - 顾名思义,连麦中大主播使用,因为是观众的主画面,追求清晰一些的效果,所以分辨率会优先选择 960 * 540。 + +(5)小主播 - 顾名思义,连麦中小主播使用,因为是小画面,画面追求流畅,分辨率采用 480 * 320, 码率 350kbps 固定。 + +(6)实时音视频通话 - 时延低,小画面,画面追求流畅,分辨率采用 480 * 320, 码率 350kbps 固定。 + +(7)静态画质场景 - 画面变动小,能保证非常低的码率下,视频相对清晰,如截屏正在播放的ppt,1080p,400kb左右码率。 + + +使用 setVideoQualityParamPreset 之后,依然可以使用setVideoBitRate、setVideoFPS、setAutoAdjustStrategy等设置自定义画质,以最后一次的设置为准。 + + + + +目前SDK支持的流控策略 + + + + +适用于实时音视频通话的流控策略,也就是 VIDEO_QUALITY_REALTIME_VIDEOCHAT 所使用流控策略,该策略敏感度比较高,网络稍有风吹草动就会进行自适应调整 + + + + +适用于普通直播推流的流控策略,是对 LIVEPUSH_STRATEGY 的升级版本,差别是该模式下 SDK 会根据当前码率自动调整出适合的分辨率 + + + + +适用于普通直播推流的流控策略,该策略敏感度比较低,会缓慢适应带宽变化,有利于在带宽波动时保持画面的清晰度 + + + + +无流控,恒定使用 setVideoBitRate 指定的视频码率 + + + + +画面顺时针旋转角度 + + + + +顺时针旋转270度,最终图像的宽度和高度互换 + + + + +顺时针旋转180度,最终图像颠倒 + + + + +顺时针旋转90度,最终图像的宽度和高度互换 + + + + +保持原图像的角度 + + + + +目前SDK支持的画面渲染模式,两种模式均会严格保持画面的原始宽高比 + + + + +填充,此模式下画面无黑边,但是会裁剪掉一部分超出渲染区域的部分,裁剪模式为居中裁剪 + + + + +适应,此模式下会显示整个画面的全部内容,但可能有黑边的存在 + + + + +推流视频分辨率,普屏 4:3和宽屏16:9两种分类 + + + + +视频数据源类型 + + + + +音频前处理选项 + + + + +音频数据源类型 + + + + +音频声道数 + + + + +2.13 获取景音乐文件的总时长(单位:毫秒) + + 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长。 + 成功返回时长,失败返回-1 + + + +2.12 设置背景音乐的播放进度(单位:毫秒) +每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。 + + +请尽量避免频繁地调用该接口,因为该接口可能会再次读写音乐文件,耗时稍高。 +当配合进度条使用时,请在进度条拖动完毕的回调中调用,而避免在拖动过程中实时调用。 + + 音乐 ID + 单位: 毫秒 + + + +2.11 获取背景音乐当前的播放进度(单位:毫秒) + + 音乐 ID + 成功返回当前播放时间,单位:毫秒,失败返回-1 + + + +2.10 调整背景音乐的变速效果 + + 音乐 ID + 速度,默认值是1.0f,范围是:[0.5 ~ 2] 之间的浮点数; + + + +2.9 调整背景音乐的音调高低 + + 音乐 ID + 音调,默认值是0.0f,范围是:[-1 ~ 1] 之间的浮点数; + + + +2.8 设置全局背景音乐的本地和远端音量的大小 + + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +2.7 设置背景音乐的本地音量大小,即主播可以通过此接口设置主播自己本地的背景音乐的音量大小。 + + 音乐 ID + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +2.6 设置背景音乐的远端音量大小,即主播可以通过此接口设置远端观众能听到的背景音乐的音量大小。 + + 音乐 ID + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + +2.5 恢复播放背景音乐 + + 音乐 ID + + + +2.4 暂停播放背景音乐 + + 音乐 ID + + + +2.3 停止播放背景音乐 + + 音乐 ID + + + +2.2 开始播放背景音乐 +每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。 + + +若您想同时播放多个音乐,请分配不同的 ID 进行播放。 +如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。 + + 音乐参数 + + +@} +@name 背景音乐特效函数 +@{ + +2.1 设置背景音乐的播放进度回调接口 +音乐 ID具体参考 ITXMusicPlayObserver 中定义接口 + + +1.2 设置麦克风采集人声的音量 + + 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + +@name 人声相关特效函数 +@{ + +设置人声的混响效果(KTV、小房间、大会堂、低沉、洪亮...) + + + +背景音乐已播放完毕 + + + + +背景音乐的播放进度 + + + + +背景音乐开始播放 + + + + +磁性 + + + + +洪亮 + + + + +低沉 + + + + +大会堂 + + + + +小房间 + + + + +KTV + + + + +关闭混响 + + + + +【字段含义】音乐结束播放时间点,单位毫秒,0表示播放至文件结尾。 + + + + +【字段含义】音乐开始播放时间点,单位毫秒 + + + + +【字段含义】播放的是否为短音乐文件 +【推荐取值】YES:需要重复播放的短音乐文件;NO:正常的音乐文件。默认值:NO + + + + +【字段含义】是否将音乐传到远端 +【推荐取值】YES:音乐在本地播放的同时,会上行至云端,因此远端用户也能听到该音乐;NO:音乐不会上行至云端,因此只能在本地听到该音乐。默认值:NO + + + + +【字段含义】音乐循环播放的次数 +【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音乐一次;1表示播放音乐两次;以此类推 + + + + +【字段含义】音乐文件的绝对路径 + + + + +【字段含义】音乐 ID +【特殊说明】SDK 允许播放多路音乐,因此需要音乐 ID 进行标记,用于控制音乐的开始、停止、音量等 + + + +@defgroup ITXAudioEffectManager_csharp ITXAudioEffectManager +腾讯云视频通话功能音乐和人声设置接口 +@{ + + + +关闭minidump生成功能 + + + + +开启minidump生成功能,发生崩溃时,自动生成minidump转储文件,用于分析崩溃原因 + + + + +停止扬声器测试 + + 0:操作成功 负数:失败 + + + +开始扬声器测试 +该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。 + 声音文件的路径 + 0:操作成功 负数:失败 + + + +结束麦克风测试 + + 0:操作成功 负数:失败 + + + +开始麦克风测试 + + 音量回调间隔 + 0:操作成功 负数:失败 + + + +结束摄像头测试 + + 0:操作成功 负数:失败 + + + +开始摄像头测试 + + 预览控件所在的父控件 + 0:操作成功 负数:失败 + 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + + + +查询当前设备是否静音 + + 设备类型,根据设备类型获取当前设备状态。详见TRTCDeviceType定义。 + true : 当前设备已静音;false : 当前设备未静音 + type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker + + + +设置当前设备是否静音 + + 设备类型,根据设备类型设置当前设备状态。详见TRTCDeviceType定义。 + 是否静音/禁画 + 0:操作成功 负数:失败 + type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker + + + +获取当前设备的音量 + + 设备类型,根据设备类型获取当前设备音量。详见TRTCDeviceType定义。 + type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker + + + +设置当前设备的音量 + + 设备类型,根据设备类型获取当前设备音量。详见TRTCDeviceType定义。 + 音量大小 + 0:操作成功 负数:失败 + type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker + + + +获取当前使用的设备 + + 设备类型,根据设备类型获取当前设备信息。详见 TRTCDeviceType 定义 + ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + +指定当前设备 + + 设备类型,根据设备类型指定当前设备。详见 TRTCDeviceType 定义。 + 从 getDevicesList 中得到的设备 ID + 0:操作成功 负数:失败 + +type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker、TRTCDeviceTypeCamera + + + + +获取设备列表 + + 设备类型,指定需要获取哪种设备的列表。详见TRTCDeviceType定义。 + +- 如果 delete ITXDeviceCollection* 指针会编译错误,SDK 维护 ITXDeviceCollection 对象的生命周期。 +- type 只支持 TRTCDeviceTypeMic、TRTCDeviceTypeSpeaker、TRTCDeviceTypeCamera + + + + +获取完设备信息后,调用release释放资源。 + + + + 设备PID,字符编码格式是UTF-8 + + + 设备名称,字符编码格式是UTF-8 + + + +设备Item信息 +【获取SDK当前使用设备信息 ITRTCDeviceInfo】您可以通过 setCurrentCameraDevice()/getCurrentMicDevice()/getCurrentSpeakerDevice +获取当前使用设备。 + + + +遍历完设备后,调用release释放资源。 + + + + 设备PID,字符编码格式是UTF-8 + + + 设备名称,字符编码格式是UTF-8 + + + 设备个数 + + + +设备列表 +【获取SDK设备信息接口 ITRTCDeviceCollection】您可以通过 getMicDevicesList()/getSpeakerDevicesList()/getMicDevicesList +枚举硬件设备列表,列表通过 ITRTCDeviceCollection 返回 + + +@defgroup ITXDeviceManager_csharp ITXDeviceManager +腾讯云视频通话功能的设备管理接口类 +@{ + +设备类型 + + + +摄像头 + + + + +扬声器 + + + + +麦克风 + + + + +未知设备 + + + + 12.8 调用实验性 API 接口 + + @note 该接口用于调用一些实验性功能 + @param jsonStr 接口及参数描述的 JSON 字符串 + + + + 12.7 显示仪表盘 + + 仪表盘是状态统计和事件消息浮层 view,方便调试。 + + @param showType 0:不显示;1:显示精简版;2:显示全量版,默认为不显示 + + + + 12.6 设置日志回调 + + @param callback 日志回调 + + + + 12.5 设置日志保存路径 + + @note 日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/Tencent/liteav/log,即 %appdata%/Tencent/liteav/log 下,如需修改,必须在所有方法前调用。 + @param path 存储日志的文件夹,例如 "D:\\Log",UTF-8 编码 + + + + 12.4 启用或禁用 Log 的本地压缩 + + 开启压缩后,Log 存储体积明显减小,但需要腾讯云提供的 Python 脚本解压后才能阅读。 + 禁用压缩后,Log 采用明文存储,可以直接用记事本打开阅读,但占用空间较大。 + + @param enabled 指定是否启用,默认为禁止状态 + + + + 12.3 启用或禁用控制台日志打印 + + @param enabled 指定是否启用,默认为禁止状态 + + + + 12.2 设置 Log 输出级别 + + @param level 参见 TRTCLogLevel,默认值:TRTCLogLevelNone + + + +@} +@name LOG 相关接口函数 +@{ + 12.1 获取 SDK 版本信息 + + @return UTF-8 编码的版本号。 + + + +11.2 停止网络测速 + + + +@} +@name 设备和网络测试 +@{ + 11.1 开始进行网络测速(视频通话期间请勿测试,以免影响通话质量) + + 测速结果将会用于优化 SDK 接下来的服务器选择策略,因此推荐您在用户首次通话前先进行一次测速,这将有助于我们选择最佳的服务器。 + 同时,如果测试结果非常不理想,您可以通过醒目的 UI 提示用户选择更好的网络。 + + @note 测速本身会消耗一定的流量,所以也会产生少量额外的流量费用。 + + @param sdkAppId 应用标识 + @param userId 用户标识 + @param userSig 用户签名 + + + + 10.2 将小数据量的自定义数据嵌入视频帧中 + + 跟 sendCustomCmdMsg 的原理不同,sendSEIMsg 是将数据直接塞入视频数据头中。因此,即使视频帧被旁路到了直播 CDN 上, + 这些数据也会一直存在。但是由于要把数据嵌入视频帧中,所以数据本身不能太大,推荐几个字节就好。 + + 最常见的用法是把自定义的时间戳(timstamp)用 sendSEIMsg 嵌入视频帧中,这种方案的最大好处就是可以实现消息和画面的完美对齐。 + + @param data 待发送的数据,最大支持1kb(1000字节)的数据大小 + @param dataSize 待发送的数据大小 + @param repeatCount 发送数据次数 + @return true:消息已通过限制,等待后续视频帧发送;false:消息被限制发送 + + @note 本接口有以下限制: + - 数据在接口调用完后不会被即时发送出去,而是从下一帧视频帧开始带在视频帧中发送。 + - 发送消息到房间内所有用户,每秒最多能发送30条消息(与 sendCustomCmdMsg 共享限制)。 + - 每个包最大为1KB,若发送大量数据,会导致视频码率增大,可能导致视频画质下降甚至卡顿(与 sendCustomCmdMsg 共享限制)。 + - 每个客户端每秒最多能发送总计8KB数据(与 sendCustomCmdMsg 共享限制)。 + - 若指定多次发送(repeatCount>1),则数据会被带在后续的连续 repeatCount 个视频帧中发送出去,同样会导致视频码率增大。 + - 如果 repeatCount>1,多次发送,接收消息 onRecvSEIMsg 回调也可能会收到多次相同的消息,需要去重。 + + + +@} +@name 自定义消息发送 +@{ + 10.1 发送自定义消息给房间内所有用户 + + 该接口可以借助音视频数据通道向当前房间里的其他用户广播您自定义的数据,但因为复用了音视频数据通道, + 请务必严格控制自定义消息的发送频率和消息体的大小,否则会影响音视频数据的质量控制逻辑,造成不确定性的问题。 + + @param cmdId 消息 ID,取值范围为1 - 10 + @param data 待发送的消息,最大支持1KB(1000字节)的数据大小 + @param dataSize 待发送的数据大小 + @param reliable 是否可靠发送,可靠发送的代价是会引入一定的延时,因为接收端要暂存一段时间的数据来等待重传 + @param ordered 是否要求有序,即是否要求接收端接收的数据顺序和发送端发送的顺序一致,这会带来一定的接收延时,因为在接收端需要暂存并排序这些消息 + @return true:消息已经发出;false:消息发送失败 + + @note 本接口有以下限制: + - 发送消息到房间内所有用户(暂时不支持 Web/小程序端),每秒最多能发送30条消息。 + - 每个包最大为1KB,超过则很有可能会被中间路由器或者服务器丢弃。 + - 每个客户端每秒最多能发送总计8KB数据。 + - 将 reliable 和 ordered 同时设置为 true 或 false,暂不支持交叉设置。 + - 强烈建议不同类型的消息使用不同的 cmdID,这样可以在要求有序的情况下减小消息时延。 + + + + 9.4 向 SDK 投送自己采集的音频数据 + + TRTCAudioFrame 推荐如下填写方式(其他字段不需要填写): + - audioFormat:仅支持 TRTCAudioFrameFormatPCM。 + - data:音频帧 buffer。 + - length:音频帧数据长度,推荐每帧20ms采样数。【PCM格式、48000采样率、单声道的帧长度:48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。 + - sampleRate:采样率,仅支持48000。 + - channel:频道数量(如果是立体声,数据是交叉的),单声道:1; 双声道:2。 + - timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。 + + 参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。 + + @param frame 音频帧,仅支持 TRTCAudioFrameFormatPCM 格式。目前只支持单声道,仅支持48K采样率,TRTCAudioFrameFormatPCM 格式。 + @note 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomAudioData 的调用间隔,否则会导致声音断断续续。 + + + + 9.3 启用音频自定义采集模式 + 开启该模式后,SDK 停止运行原有的音频采集流程,只保留编码和发送能力。 + 您需要用 sendCustomAudioData() 不断地向 SDK 塞入自己采集的音频数据。 + + @param enable 是否启用,默认值:false + + + + 9.2 向 SDK 投送自己采集的视频数据 + + TRTCVideoFrame 推荐如下填写方式(其他字段不需要填写): + - pixelFormat: Windows、Android平台仅支持 TRTCVideoPixelFormat_I420,iOS、Mac平台支持TRTCVideoPixelFormat_I420和TRTCVideoPixelFormat_BGRA32 + - bufferType:仅支持 TRTCVideoBufferType_Buffer。 + - data:视频帧 buffer。 + - length:视频帧数据长度,I420 格式下,其值等于:width × height × 3 / 2。 + - width:视频图像长度。 + - height:视频图像宽度。 + - timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。 + + 参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。 + + @param frame 视频数据,支持 I420 格式数据。 + @note - SDK 内部有帧率控制逻辑,目标帧率以您在 setVideoEncoderParam 中设置的为准,太快会自动丢帧,太慢则会自动补帧。 + - 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomVideoData 的调用间隔,否则会导致视频帧率不稳定。 + - iOS、Mac平台目前仅支持传入TRTCVideoPixelFormat_I420或TRTCVideoPixelFormat_BGRA32格式的视频帧 + - Windows、Android平台目前仅支持传入TRTCVideoPixelFormat_I420格式的视频帧 + + + +@} +@name 自定义采集和渲染 +@{ + 9.1 启用视频自定义采集模式 + + 开启该模式后,SDK 不在运行原有的视频采集流程,只保留编码和发送能力。 + 您需要用 sendCustomVideoData() 不断地向 SDK 塞入自己采集的视频画面。 + + @param enable 是否启用,默认值:false + + + +8.11 将所有窗口从屏幕分享的排除列表中移除 + + + + 8.10 将指定窗口从屏幕分享的排除列表中移除 + + @param window 不希望分享出去的窗口 + + + + 8.9 将指定窗口加入屏幕分享的排除列表中,加入排除列表中的窗口不会被分享出去 + + 支持启动屏幕分享前设置过滤窗口,也支持屏幕分享过程中动态添加过滤窗口。 + + @param window 不希望分享出去的窗口 + + + +8.8 设置屏幕分享的混音音量大小 + + 这个数值越高,屏幕分享音量的占比就越高,麦克风音量占比就越小,所以不推荐设置得太大,否则麦克风的声音就被压制了。 + + @param volume 设置的混音音量大小,范围0 - 100 + + + + 8.7 设置屏幕分享的编码器参数 + - setVideoEncoderParam() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的编码参数。 + - setSubStreamEncoderParam() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的编码参数。 + 该设置决定远端用户看到的画面质量,同时也是云端录制出的视频文件的画面质量。 + + @param params 辅流编码参数,详情请参考 TRTCTypeDef.h 中的 TRTCVideoEncParam 定义 + @note 即使使用主路传输屏幕分享的数据(在调用 startScreenCapture 时设置 type=TRTCVideoStreamTypeBig),依然要使用此接口更新屏幕分享的编码参数。 + + + + 8.6 设置屏幕分享参数,该方法在屏幕分享过程中也可以调用 + + 如果您期望在屏幕分享的过程中,切换想要分享的窗口,可以再次调用这个函数而不需要重新开启屏幕分享。 + + 支持如下四种情况: + - 共享整个屏幕:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为 { 0, 0, 0, 0 } + - 共享指定区域:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为非 nullptr,例如 { 100, 100, 300, 300 } + - 共享整个窗口:sourceInfoList 中 type 为 Window 的 source,captureRect 设为 { 0, 0, 0, 0 } + - 共享窗口区域:sourceInfoList 中 type 为 Window 的 source,captureRect 设为非 nullptr,例如 { 100, 100, 300, 300 } + + + @param source 指定分享源 + @param captureRect 指定捕获的区域 + @param property 指定屏幕分享目标的属性,包括捕获鼠标,高亮捕获窗口等,详情参考TRTCScreenCaptureProperty 定义 + @note 设置高亮边框颜色、宽度参数在Mac平台不生效 + + + + + 8.5 枚举可分享的屏幕窗口,建议在 startScreenCapture 之前调用 + + 如果您要给您的 App 增加屏幕分享功能,一般需要先显示一个窗口选择界面,这样用户可以选择希望分享的窗口。 + 通过如下函数,您可以获得可分享窗口的 ID、类型、窗口名称以及缩略图。 + 拿到这些信息后,您就可以实现一个窗口选择界面,当然,您也可以使用我们在 Demo 源码中已经实现好的一个界面。 + + @note 返回的列表中包括屏幕和应用窗口,屏幕会在列表的前面几个元素中。 + @note 如果 delete ITRTCScreenCaptureSourceList*指针会编译错误,SDK 维护 ITRTCScreenCaptureSourceList 对象的生命周期。 + + @param thumbSize 指定要获取的窗口缩略图大小,缩略图可用于绘制在窗口选择界面上 + @param iconSize 指定要获取的窗口图标大小 + + @return 窗口列表包括屏幕 + + + +8.4 恢复屏幕分享 + + + +8.3 暂停屏幕分享 + + + +8.2 停止屏幕采集 + + + +@} +@name 屏幕分享相关接口函数 +@{ + 8.1 启动屏幕分享 + + @param rendView 承载预览画面的控件,可以设置为 nullptr,表示不显示屏幕分享的预览效果。 + @param type 屏幕分享使用的线路,可以设置为主路(TRTCVideoStreamTypeBig)或者辅路(TRTCVideoStreamTypeSub),默认使用辅路。 + @param params 屏幕分享的画面编码参数,可以设置为 nullptr,表示让 SDK 选择最佳的编码参数(分辨率、码率等)。 + + @note 一个用户同时最多只能上传一条主路(TRTCVideoStreamTypeBig)画面和一条辅路(TRTCVideoStreamTypeSub)画面, + 默认情况下,屏幕分享使用辅路画面,如果使用主路画面,建议您提前停止摄像头采集(stopLocalPreview)避免相互冲突。 + + + + 7.3 关闭系统声音采集。 + + 目前仅适用于Windows平台 + + + + + 7.2 打开系统声音采集 + + 开启后可以采集整个操作系统的播放声音(path 为空)或某一个播放器(path 不为空)的声音, + 并将其混入到当前麦克风采集的声音中一起发送到云端。 + + + @param path + - path 为空,代表采集整个操作系统的声音。 + - path 填写 exe 程序(如 QQ音乐)所在的路径,将会启动此程序并只采集此程序的声音。 + + @note 此接口目前仅适用于Windows平台 + + + +@} +@name 音乐特效和人声特效 +@{ + 7.1 获取音效管理类 ITXAudioEffectManager + + 该模块是整个 SDK 的音效管理模块,支持如下功能: + - 耳机耳返:麦克风捕捉的声音实时通过耳机播放。 + - 混响效果:KTV、小房间、大会堂、低沉、洪亮... + - 变声特效:萝莉、大叔、重金属、外国人... + - 背景音乐:支持在线音乐和本地音乐,支持变速、变调等特效、支持原生和伴奏并播放和循环播放。 + - 短音效:鼓掌声、欢笑声等简短的音效文件,对于小于10秒的文件,请将 isShortFile 参数设置为 YES。 + + + + 6.2 设置水印 + + 水印的位置是通过 xOffset, yOffset, fWidthRatio 来指定的。 + - xOffset:水印的坐标,取值范围为0 - 1的浮点数。 + - yOffset:水印的坐标,取值范围为0 - 1的浮点数。 + - fWidthRatio:水印的大小比例,取值范围为0 - 1的浮点数。 + + @param streamType 要设置水印的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub) + @param srcData 水印图片源数据(传 nullptr 表示去掉水印) + @param srcType 水印图片源数据类型(传 nullptr 时忽略该参数) + @param nWidth 水印图片像素宽度(源数据为文件路径时忽略该参数) + @param nHeight 水印图片像素高度(源数据为文件路径时忽略该参数) + @param xOffset 水印显示的左上角 x 轴偏移 + @param yOffset 水印显示的左上角 y 轴偏移 + @param fWidthRatio 水印显示的宽度占画面宽度比例(水印按该参数等比例缩放显示) + @note 只支持主路视频流 + + + +@} +@name 美颜特效和图像水印 +@{ + 6.1 设置美颜、美白、红润效果级别 + + SDK 内部集成了两套风格不同的磨皮算法,一套我们取名叫“光滑”,适用于美女秀场,效果比较明显。 + 另一套我们取名“自然”,磨皮算法更多地保留了面部细节,主观感受上会更加自然。 + + @param style 美颜风格,光滑或者自然,光滑风格磨皮更加明显,适合娱乐场景。 + @param beautyLevel 美颜级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显 + @param whitenessLevel 美白级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显 + @param ruddinessLevel 红润级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显,该参数暂未生效 + + + +@} +@name 设备相关接口函数 +@{ + 5.1 获取设备管理模块 + + @return ITXDeviceManager 设备管理类 + + + + 4.13 停止录音 + + 如果调用 exitRoom 时还在录音,录音会自动停止。 + + + + 4.12 开始录音 + + 该方法调用后, SDK 会将通话过程中的所有音频(包括本地音频,远端音频,BGM等)录制到一个文件里。 + 无论是否进房,调用该接口都生效。 + 如果调用 exitRoom 时还在录音,录音会自动停止。 + + @param audioRecordingParams 录音参数,请参考 TRTCAudioRecordingParams + @return 0:成功;-1:录音已开始;-2:文件或目录创建失败;-3:后缀指定的音频格式不支持 + + + + 4.11 启用或关闭音量大小提示 + + 开启此功能后,SDK 会在 onUserVoiceVolume() 中反馈对每一路声音音量大小值的评估。 + 我们在 Demo 中有一个音量大小的提示条,就是基于这个接口实现的。 + 如希望打开此功能,请在 startLocalAudio() 之前调用。 + + @param interval 设置 onUserVoiceVolume 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms + + + +4.10 获取 SDK 播放音量 + + + +4.8 获取 SDK 采集音量 + + + + 4.7 设置 SDK 采集音量。 + + @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 4.6 设置某个远程用户的播放音量 + + @param userId 远程用户 ID + @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 4.5 静音/取消静音所有用户的声音 + + @param mute true:静音;false:取消静音 + + @note 静音时会停止接收所有用户的远端音频流并停止播放,取消静音时会自动拉取所有用户的远端音频流并进行播放。 + + + + 4.4 静音/取消静音指定的远端用户的声音 + + @param userId 用户 ID + @param mute true:静音;false:取消静音 + + @note 静音时会停止接收该用户的远端音频流并停止播放,取消静音时会自动拉取该用户的远端音频流并进行播放。 + + + + 4.3 静音/取消静音本地的音频 + + 当静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, false) 回调通知。 + 当取消静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, true) 回调通知。 + + 与 stopLocalAudio 不同之处在于,muteLocalAudio(true) 并不会停止发送音视频数据,而是继续发送码率极低的静音包。 + 由于 MP4 等视频文件格式,对于音频的连续性是要求很高的,使用 stopLocalAudio 会导致录制出的 MP4 不易播放。 + 因此在对录制质量要求很高的场景中,建议选择 muteLocalAudio,从而录制出兼容性更好的 MP4 文件。 + + @param mute true:静音;false:取消静音 + + + + 4.2 关闭本地音频的采集和上行 + + 当关闭本地音频的采集和上行,房间里的其它成员会收到 onUserAudioAvailable(false) 回调通知。 + + + +@} +@name 音频相关接口函数 +@{ + 4.1 开启本地音频的采集和上行 + + 该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。 + SDK 并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。 + @param quality 声音质量,参见 TRTCAudioQuality + @note TRTC SDK 并不会默认打开本地的麦克风采集。 + + + + 3.19 选定观看指定 userId 的大画面还是小画面 + + 此功能需要该 userId 通过 enableEncSmallVideoStream 提前开启双路编码模式。 + 如果该 userId 没有开启双路编码模式,则此操作无效。 + + @param userId 用户 ID + @param type 视频流类型,即选择看大画面还是小画面,默认为 TRTCVideoStreamTypeBig + + + + 3.18 开启大小画面双路编码模式 + + 如果当前用户是房间中的主要角色(例如主播、老师、主持人等),并且使用 PC 或者 Mac 环境,可以开启该模式。 + 开启该模式后,当前用户会同时输出【高清】和【低清】两路视频流(但只有一路音频流)。 + 对于开启该模式的当前用户,会占用更多的网络带宽,并且会更加消耗 CPU 计算资源。 + + 对于同一房间的远程观众而言: + - 如果用户的下行网络很好,可以选择观看【高清】画面 + - 如果用户的下行网络较差,可以选择观看【低清】画面 + + @param enable 是否开启小画面编码,默认值:false + @param smallVideoParam 小流的视频参数 + + + + 3.17 设置远端图像的渲染模式 + + @param userId 对应的远端视频流用户ID + @param streamType 远端图像的视频流类型,详见 TRTCVideoStreamType 定义 + @param param 远端图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义 + + + + 3.16 设置编码器输出的画面镜像模式 + + 该接口不改变本地摄像头的预览画面,但会改变另一端用户看到的(以及服务器录制的)画面效果。 + + @param mirror 是否开启远端镜像, true:远端画面镜像;false:远端画面非镜像。默认值:false + + + + 3.15 设置视频编码输出的画面方向,即设置远端用户观看到的和服务器录制的画面方向 + + @param rotation 目前支持 TRTCVideoRotation0 和 TRTCVideoRotation180 旋转角度,默认值:TRTCVideoRotation0 + + + + 3.14 设置本地图像(主流)的渲染参数 + + @param params 本地图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义 + + + + 3.13 设置网络流控相关参数 + + 该设置决定了 SDK 在各种网络环境下的调控策略(例如弱网下是“保清晰”还是“保流畅”) + + @param params 网络流控参数,详情请参考 TRTCTypeDef.h 中的 TRTCNetworkQosParam 定义 + + + + 3.12 设置视频编码器相关参数 + + 该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量) + + @param params 视频编码参数,详情请参考 TRTCTypeDef.h 中的 TRTCVideoEncParam 定义 + + + + 3.11 暂停/恢复接收所有远端视频流 + + 该接口仅暂停/恢复接收所有远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。 + + @param mute 是否暂停接收 + + + + 3.10 暂停/恢复接收指定的远端视频流 + + 该接口仅暂停/恢复接收指定的远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。 + + @param userId 对方的用户标识 + @param mute 是否暂停接收 + + + + 3.9 停止显示所有远端视频画面,同时不再拉取远端用户的视频数据流 + + @note 如果有屏幕分享的画面在显示,则屏幕分享的画面也会一并被关闭。 + + + + 3.8 停止显示远端视频画面,同时不再拉取该远端用户的视频数据流 + + 调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。 + + @param userId 指定远端用户的 userId + @param streamType 指定要停止观看的 userId 的视频流类型: + - 高清大画面:({@link TRTCVideoStreamTypeBig}) + - 低清大画面:({@link TRTCVideoStreamTypeSmall}) + - 辅流(屏幕分享):({@link TRTCVideoStreamTypeSub}) + + + + 3.7 更新远端视频渲染的窗口 + + @param userId 对方的用户标识 + @param streamType 要设置预览窗口的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub) + @param rendView 承载预览画面的控件 + + + + 3.6 开始拉取并显示指定用户的远端画面 + + 该函数会拉取指定 userid 的视频流显示在您指定的 view 控件上,您可以通过 setLocalViewRenderParams 设置显示模式。 + - 如果您提前知道房间中某个 userid 正在推流,可以直接调用 startRemoteView 显示该用户的远端画面。 + - 如果您不知道房间中有哪些用户开启了视频,可以在 enterRoom 后等待来自 SDK 的 onUserVideoAvailable(userId, true) 回调通知。 + 调用 startRemoteView 只是启动拉取,此时画面还需要加载,当加载完毕后 ITRTCCloudCallback 会通过 onFirstVideoFrame(userId) 通知您。 + + @param userId 指定远端用户的 userId + @param streamType 指定要观看 userId 的视频流类型: + - 高清大画面:({@link TRTCVideoStreamTypeBig}) + - 低清大画面:({@link TRTCVideoStreamTypeSmall}) + - 辅流(屏幕分享):({@link TRTCVideoStreamTypeSub}) + @param rendView 承载视频画面的控件 + + @note 注意几点规则需要您关注: + 1. SDK 支持同时观看某 userid 的大画面和辅路,或者小画面和辅路,但不支持同时观看大画面和小画面。 + 2. 只有当指定的 userid 通过 enableEncSmallVideoStream 开启双路编码后,才能观看该用户的小画面。 + 3. 如果该用户的小画面不存在,则默认切换到大画面。 + + + + 3.5 暂停/恢复推送本地的视频数据 + + 当暂停推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, false) 回调通知 + 当恢复推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, true) 回调通知 + + @param mute true:暂停;false:恢复 + + + +3.4 停止本地视频采集及预览 + + + + 3.3 更新本地视频预览画面的窗口 + + @param rendView 承载预览画面的控件 + + + +@} +@name 视频相关接口函数 +@{ + 3.1 开启本地视频的预览画面(Windows、 Mac版本) + + 这个接口会启动默认的摄像头,可以通过 ITXDeviceManager::setCurrentDevice 接口选用其他摄像头 + 当开始渲染首帧摄像头画面时,您会收到 ITRTCCloudCallback 中的 onFirstVideoFrame(nullptr) 回调。 + + @param rendView 承载预览画面的控件 + + + + 2.5 设置云端的混流转码参数 + + 如果您在实时音视频 [控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启了“启动自动旁路直播”功能, + 房间里的每一路画面都会有一个默认的直播 [CDN 地址](https://cloud.tencent.com/document/product/647/16826)。 + + 一个直播间中可能有不止一位主播,而且每个主播都有自己的画面和声音,但对于 CDN 观众来说,他们只需要一路直播流, + 所以您需要将多路音视频流混成一路标准的直播流,这就需要混流转码。 + + 当您调用 setMixTranscodingConfig() 接口时,SDK 会向腾讯云的转码服务器发送一条指令,目的是将房间里的多路音视频流混合为一路, + 您可以通过 mixUsers 参数来调整每一路画面的位置,以及是否只混合声音,也可以通过 videoWidth、videoHeight、videoBitrate 等参数控制混合音视频流的编码参数。 + +
+ 【画面1】=> 解码 ====> 
+                         
+ 【画面2】=> 解码 =>  画面混合 => 编码 => 【混合后的画面】
+                         /
+ 【画面3】=> 解码 ====> /
+
+ 【声音1】=> 解码 ====> 
+                         
+ 【声音2】=> 解码 =>  声音混合 => 编码 => 【混合后的声音】
+                         /
+ 【声音3】=> 解码 ====> /
+ 
+ + 参考文档:[云端混流转码](https://cloud.tencent.com/document/product/647/16827)。 + + @param config 请参考 TRTCTypeDef.h 中关于 TRTCTranscodingConfig 的介绍。如果传入 nullptr 则取消云端混流转码。 + @note 关于云端混流的注意事项: + - 云端转码会引入一定的 CDN 观看延时,大概会增加1 - 2秒。 + - 调用该函数的用户,会将连麦中的多路画面混合到自己当前这路画面或者 config 中指定的 streamId 上。 + - 请注意,若您还在房间中且不再需要混流,请务必传入 nullptr 进行取消,因为当您发起混流后,云端混流模块就会开始工作,不及时取消混流可能会引起不必要的计费损失。 + - 请放心,您退房时会自动取消混流状态。 + +
+ +2.4 停止向非腾讯云地址转推 + + + + 2.3 开始向友商云的直播 CDN 转推 + + 该接口跟 startPublishing() 类似,但 startPublishCDNStream() 支持向非腾讯云的直播 CDN 转推。 + @param param CDN 转推参数,请参考 TRTCTypeDef.h 中关于 TRTCPublishCDNParam 的介绍。 + @note 使用 startPublishing() 绑定腾讯云直播 CDN 不收取额外的费用,但使用 startPublishCDNStream() 绑定非腾讯云直播 CDN 需要收取转推费用。 + + + +2.2 停止向腾讯云的直播 CDN 推流 + + + +@} +@name CDN 相关接口函数 +@{ + 2.1 开始向腾讯云的直播 CDN 推流 + + 该接口会指定当前用户的音视频流在腾讯云 CDN 所对应的 StreamId,进而可以指定当前用户的 CDN 播放地址。 + + 例如:如果我们采用如下代码设置当前用户的主画面 StreamId 为 user_stream_001,那么该用户主画面对应的 CDN 播放地址为: + “http://yourdomain/live/user_stream_001.flv”,其中 yourdomain 为您自己备案的播放域名, + 您可以在直播[控制台](https://console.cloud.tencent.com/live) 配置您的播放域名,腾讯云不提供默认的播放域名。 + +
+  ITRTCCloud *trtcCloud = getTRTCShareInstance();
+  trtcCloud->enterRoom(params, TRTCAppSceneLIVE);
+  trtcCloud->startLocalPreview(TXView);
+  trtcCloud->startLocalAudio(TRTCAudioQuality);
+  trtcCloud->startPublishing("user_stream_001", TRTCVideoStreamTypeBig);
+ 
+ + 您也可以在设置 enterRoom 的参数 TRTCParams 时指定 streamId, 而且我们更推荐您采用这种方案。 + + @param streamId 自定义流 ID。 + @param type 仅支持 TRTCVideoStreamTypeBig 和 TRTCVideoStreamTypeSub。 + @note 您需要先在实时音视频 [控制台](https://console.cloud.tencent.com/rav/) 中的功能配置页开启“启用旁路推流”才能生效。 + - 若您选择“指定流旁路”,则您可以通过该接口将对应音视频流推送到腾讯云 CDN 且指定为填写的流 ID。 + - 若您选择“全局自动旁路”,则您可以通过该接口调整默认的流 ID。 + +
+ + 1.9 切换房间 + + 调用该接口后,用户会先退出原来的房间并快速进入 TRTCSwitchRoomConfig 中指定的新房间: + 相比于直接调用 exitRoom + enterRoom 的方式,switchRoom 接口对主播更加友好,因为 switchRoom + 不会停止主播端视频的采集和预览。 + 接口调用结果会通过 ITRTCCloudCallback 中的 onSwitchRoom(errCode, errMsg) 回调通知给您。 + + @param config 房间切换参数,请参考 {@link TRTCSwitchRoomConfig} + + + + 1.8 销毁子 TRTCCloud 实例 + + @note 此方法目前仅支持Windows平台 + + + + 1.7 创建子 TRTCCloud 实例 + + 子 TRTCCloud 实例用于进入其他房间,观看其他房间主播的音视频流,还可以在不同的房间之间切换推送音视频流。 + + 此接口主要应用于类似超级小班课这种需要进入多个房间推拉流的场景。 + +
+   ITRTCCloud *mainCloud = getTRTCShareInstance();
+   // 1、mainCloud 进房并开始推送音视频流。
+   // 2、创建子 TRTCCloud 实例并进入其他房间。
+   ITRTCCloud *subCloud = mainCloud->createSubCloud();
+   subCloud->enterRoom(params, scene);
+
+   // 3、切换房间推送音视频流。
+   // 3.1、mainCloud 停止推送音视频流。
+   mainCloud->switchRole(TRTCRoleAudience);
+   mainCloud->muteLocalVideo(true);
+   mainCloud->muteLocalAudio(true);
+   // 3.2、subCLoud 推送音视频流。
+   subCloud->switchRole(TRTCRoleAnchor);
+   subCloud->muteLocalVideo(false);
+   subCloud->muteLocalAudio(false);
+
+   // 4、subCLoud 退房。
+   subCloud->exitRoom();
+
+   // 5、销毁 subCLoud。
+   mainCloud->destroySubCloud(subCloud);
+ 
+ + @return 子 TRTCCloud 实例 + @note + - 此方法目前仅支持Windows平台 + - 同一个用户,可以使用同一个 userId 进入多个不同 roomId 的房间。 + - 两台手机不可以同时使用同一个 userId 进入同一个 roomId 的房间。 + - 通过 createSubCloud 接口创建出来的子房间 TRTCCloud 实例有一个能力限制:不能调用子实例中与本地音视频 + 相关的接口(除了 switchRole、muteLocalVideo 和 muteLocalAudio 之外), 设置美颜等接口请使用 + 原 TRTCCloud 实例对象。 + - 同一个用户,同时只能在一个 TRTCCloud 实例中推流,在不同房间同时推流会引发云端的状态混乱,导致各种 bug。 + +
+ + 1.6 设置音视频数据接收模式,需要在进房前设置才能生效 + + 为实现进房秒开的绝佳体验,SDK 默认进房后自动接收音视频。即在您进房成功的同时,您将立刻收到远端所有用户的音视频数据。 + 若您没有调用 startRemoteView,视频数据将自动超时取消。 + 若您主要用于语音聊天等没有自动接收视频数据需求的场景,您可以根据实际需求选择接收模式。 + + @param autoRecvAudio true:自动接收音频数据;false:需要调用 muteRemoteAudio 进行请求或取消。默认值:true + @param autoRecvVideo true:自动接收视频数据;false:需要调用 startRemoteView/stopRemoteView 进行请求或取消。默认值:true + + @note 需要在进房前设置才能生效。 + + + + 1.5 关闭跨房连麦 + + 跨房通话的退出结果会通过 ITRTCCloudCallback 中的 onDisconnectOtherRoom() 回调通知给您。 + + + + 1.4 请求跨房通话(主播 PK) + + TRTC 中两个不同音视频房间中的主播,可以通过“跨房通话”功能拉通连麦通话功能。使用此功能时, + 两个主播无需退出各自原来的直播间即可进行“连麦 PK”。 + + 例如:当房间“001”中的主播 A 通过 connectOtherRoom() 跟房间“002”中的主播 B 拉通跨房通话后, + 房间“001”中的用户都会收到主播 B 的 onUserEnter(B) 回调和 onUserVideoAvailable(B,true) 回调。 + 房间“002”中的用户都会收到主播 A 的 onUserEnter(A) 回调和 onUserVideoAvailable(A,true) 回调。 + + 简言之,跨房通话的本质,就是把两个不同房间中的主播相互分享,让每个房间里的观众都能看到两个主播。 + +
+                 房间 001                     房间 002
+               -------------               ------------
+  跨房通话前:| 主播 A      |             | 主播 B     |
+              | 观众 U V W  |             | 观众 X Y Z |
+               -------------               ------------
+
+                 房间 001                     房间 002
+               -------------               ------------
+  跨房通话后:| 主播 A B    |             | 主播 B A   |
+              | 观众 U V W  |             | 观众 X Y Z |
+               -------------               ------------
+ 
+ + 跨房通话的参数考虑到后续扩展字段的兼容性问题,暂时采用了 JSON 格式的参数,要求至少包含两个字段: + - roomId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 roomId 应指定为“002”。 + - userId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 userId 应指定为 B 的 userId。 + + 跨房通话的请求结果会通过 ITRTCCloudCallback 中的 onConnectOtherRoom() 回调通知给您。 + +
+   //此处用到 jsoncpp 库来格式化 JSON 字符串
+   Json::Value jsonObj;
+   jsonObj["roomId"] = 002;
+   jsonObj["userId"] = "userB";
+   Json::FastWriter writer;
+   std::string params = writer.write(jsonObj);
+   trtc.ConnectOtherRoom(params.c_str());
+ 
+ + @param params JSON 字符串连麦参数,roomId 代表目标房间号,userId 代表目标用户 ID。 + + +
+ + 1.3 切换角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom) + + 在直播场景下,一个用户可能需要在“观众”和“主播”之间来回切换。 + 您可以在进房前通过 TRTCParams 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。 + + @param role 目标角色,默认为主播: + - {@link TRTCRoleAnchor} 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。 + - {@link TRTCRoleAudience} 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。 + + + + 1.2 离开房间 + + 调用 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。 + 待资源释放完毕,SDK 会通过 ITRTCCloudCallback 中的 onExitRoom() 回调通知您。 + + 如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。 + 否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。 + + + + 移除事件回调 + + @param callback 事件回调指针 + + + +@name 设置 ITRTCCloudCallback 回调 +@{ + 设置回调接口 ITRTCCloudCallback + + 您可以通过 ITRTCCloudCallback 获得来自 SDK 的各种状态通知,详见 ITRTCCloudCallback.h 中的定义 + + @param callback 事件回调指针 + + + +@brief 释放 ITRTCCloud 单例对象。 + + + +@defgroup ITRTCCloud_cplusplus ITRTCCloud +腾讯云视频通话功能的主要接口类 +@{ +@name 创建与销毁 ITRTCCloud 单例 +@{ + @brief 用于动态加载 dll 时,获取 ITRTCCloud 对象指针。 + + @return 返回 ITRTCCloud 单例对象的指针,注意:delete ITRTCCloud*会编译错误,需要调用 + destroyTRTCCloud 释放单例指针对象。 + @note 本接口适用于Windows、Mac、iOS平台 + + + + 设置屏幕共享参数 + + @deprecated v7.9 版本弃用,请使用 selectScreenCaptureTarget(TRTCScreenCaptureSourceInfo,RECT,TRTCScreenCaptureProperty) 接口 + @param source 指定分享源 + @param captureRect 指定捕获的区域 + @param captureMouse 指定是否捕获鼠标指针 + @param highlightWindow + 指定是否高亮正在共享的窗口,以及当捕获图像被遮挡时高亮遮挡窗口提示用户移走遮挡 + + + + 恢复音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager resumePlayMusic 接口 + @param effectId 音效 Id + + + + 暂停音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + @param effectId 音效 Id + + + + 设置所有音效的音量 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / + setMusicPlayoutVolume 接口 + @note 该操作会覆盖通过 setAudioEffectVolume 指定的单独音效音量。 + + @param volume 音量大小,取值范围为0 - 100;默认值:100 + + + + 停止所有音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager stopPlayMusic 接口 + + + + 停止音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager stopPlayMusic 接口 + @param effectId 音效 ID + + + + 设置音效音量 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / + setMusicPlayoutVolume 接口 + @note 会覆盖通过 setAllAudioEffectsVolume 指定的整体音效音量。 + + @param effectId 音效 ID + @param volume 音量大小,取值范围为0 - 100;默认值:100 + + + + 播放音效 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager startPlayMusic 接口 + 每个音效都需要您指定具体的 ID,您可以通过该 ID 对音效的开始、停止、音量等进行设置。 + 支持的文件格式:aac, mp3。 + + @note 若您想同时播放多个音效,请分配不同的 ID 进行播放。因为使用同一个 ID 播放不同音效,SDK + 将会停止上一个 ID 对应的音效播放,再启动新的音效播放。 + + @param effect 音效 + + + + 设置背景音乐远端播放音量的大小 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐在远端播放时的音量大小。 + + @param volume 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + + 设置背景音乐本地播放音量的大小 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPlayoutVolume 接口 + 播放背景音乐混音时使用,用来控制背景音乐在本地播放时的音量大小。 + + @param volume 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + + 设置背景音乐播放音量的大小 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager setMusicPublishVolume / + setMusicPlayoutVolume 接口 播放背景音乐混音时使用,用来控制背景音乐播放音量的大小, + 该接口会同时控制远端播放音量的大小和本地播放音量的大小, + 因此调用该接口后,setBGMPlayoutVolume和setBGMPublishVolume设置的音量值会被覆盖 + + @param volume 音量大小,100为正常音量,取值范围为0 - 100;默认值:100 + + + + 设置 BGM 播放进度 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager seekMusicToPosInMS 接口 + @param pos 单位毫秒 + + + + 获取音乐文件总时长,单位毫秒 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager getMusicDurationInMS 接口 + @param path 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长 + @return 成功返回时长,失败返回-1 + + + + 继续播放背景音乐 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager resumePlayMusic 接口 + + + + 暂停播放背景音乐 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + + + + 停止播放背景音乐 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager pausePlayMusic 接口 + + + + 启动播放背景音乐 + + @deprecated v7.3 版本弃用,请使用 TXAudioEffectManager startPlayMusic 接口,支持并发播放多个 + BGM + + @param path 音乐文件路径,支持的文件格式:aac, mp3。 + + + + 启动屏幕分享 + + @deprecated 从 v7.2 版本开始废弃 + @note 使用 startScreenCapture(TXView rendView, TRTCVideoStreamType type, TRTCVideoEncParam* + params) 接口替代。 + + + + 设置麦克风的音量大小 + + @deprecated 从 v6.9 版本开始废弃 + @note 使用 setAudioCaptureVolume 接口替代。 + + + +停止扬声器测试 +@deprecated v8.0 版本弃用,请使用 ITXDeviceManager::stopSpeakerDeviceTest 接口 + + + + 开启扬声器测试 + + 回调接口 onTestSpeakerVolume 获取测试数据 + + 该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::startSpeakerDeviceTest 接口 + @param testAudioFilePath 音频文件的绝对路径,路径字符串使用 UTF-8 + 编码格式,支持文件格式:WAV、MP3 + + + +停止麦克风测试 +@deprecated v8.0 版本弃用,请使用 ITXDeviceManager::stopMicDeviceTest 接口 + + + + 开启麦克风测试 + + 回调接口 onTestMicVolume 获取测试数据 + + 该方法测试麦克风是否能正常工作,volume 的取值范围为0 - 100。 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::startMicDeviceTest 接口 + @param interval 反馈音量提示的时间间隔(ms),建议设置到大于 200 毫秒 + + + +停止摄像头测试 +@deprecated v8.0 版本弃用,请使用 ITXDeviceManager::stopCameraDeviceTest 接口 + + + + 开始进行摄像头测试 + + 会触发 onFirstVideoFrame 回调接口 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::startCameraDeviceTest 接口 + @note 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + @param callback 摄像头预览自定义渲染画面回调 + + + + 开始进行摄像头测试 + + 会触发 onFirstVideoFrame 回调接口 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::startCameraDeviceTest 接口 + @note 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + @param rendView 承载预览画面的 HWND + + + + 获取系统当前扬声器设备是否静音 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDeviceMute 接口 + @note 查询的是系统硬件静音状态 + + @return 静音状态 + + + + 设置系统当前扬声器设备的是否静音 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDeviceMute 接口 + @note 该接口的功能是设置系统扬声器静音,如果用户直接设置 WIN + 系统设置的扬声器静音时,该接口的设置结果会被用户的操作所覆盖。 + + @param mute 设置为 true 时,则设置扬声器设备静音 + + + + 设置系统当前扬声器设备音量 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDeviceVolume 接口 + @note 该接口的功能是调节系统播放音量,如果用户直接调节 WIN + 系统设置的播放音量时,该接口的设置结果会被用户的操作所覆盖。 + + @param volume 设置的扬声器音量,范围0 - 100 + + + + 获取系统当前扬声器设备音量 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDeviceVolume 接口 + @note 查询的是系统硬件音量大小。 + + @return 扬声器音量,范围0 - 100 + + + + 设置要使用的扬声器 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDevice 接口 + @param speakerId 从 getSpeakerDevicesList 中得到的设备 ID + + + + 获取当前的扬声器设备 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDevice 接口 + @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + + 获取系统当前麦克风设备是否静音 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDeviceMute 接口 + @note 查询的是系统硬件静音状态 + + @return 静音状态 + + + + 设置系统当前麦克风设备的是否静音 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDeviceMute 接口 + @note 该接口的功能是设置系统麦克风静音,如果用户直接设置 WIN + 系统设置的麦克风静音时,该接口的设置结果会被用户的操作所覆盖。 + + @param mute 设置为 true 时,则设置麦克风设备静音 + + + + 设置系统当前麦克风设备的音量 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDeviceVolume 接口 + @note 该接口的功能是调节系统采集音量,如果用户直接调节 WIN + 系统设置的采集音量时,该接口的设置结果会被用户的操作所覆盖。 + + @param volume 麦克风音量值,范围0 - 100 + + + + 获取系统当前麦克风设备音量 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDeviceVolume 接口 + @note 查询的是系统硬件音量大小。 + + @return 音量值,范围是0 - 100 + + + + 设置要使用的麦克风 + + 选择指定的麦克风作为录音设备,不调用该接口时,默认选择索引为0的麦克风 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDevice 接口 + @param micId 从 getMicDevicesList 中得到的设备 ID + + + + 获取当前选择的麦克风 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDevice 接口 + @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + + 获取当前使用的摄像头 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::getCurrentDevice 接口 + @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + + + + 设置要使用的摄像头 + + @deprecated v8.0 版本弃用,请使用 ITXDeviceManager::setCurrentDevice 接口 + @param deviceId 从 getCameraDevicesList 中得到的设备 ID + + + + 设定观看方优先选择的视频质量 + + 低端设备推荐优先选择低清晰度的小画面。 + 如果对方没有开启双路视频模式,则此操作无效。 + + @deprecated v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + @param type 默认观看大画面还是小画面,默认为 TRTCVideoStreamTypeBig + + + + 设置音频质量 + + 主播端的音质越高,观众端的听感越好,但传输所依赖的带宽也就越高,在带宽有限的场景下也更容易出现卡顿。 + + - {@link TRTCCloudDef#TRTCAudioQualitySpeech}, + 流畅:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。 + - {@link + TRTCCloudDef#TRTCAudioQualityDefault},默认:采样率:48k;单声道;音频裸码率:50kbps;SDK + 默认的音频质量,如无特殊需求推荐选择之。 + - {@link TRTCCloudDef#TRTCAudioQualityMusic},高音质:采样率:48k;双声道 + + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。 + @deprecated v8.0 版本弃用,请使用 startLocalAudio(TRTCAudioQuality) 接口 + @note 该方法需要在 startLocalAudio 之前进行设置,否则不会生效。 + + + + 设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的顺时针旋转角度 + - setRemoteViewRotation() + 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的旋转角度。 + - setRemoteSubStreamViewRotation() + 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的旋转角度。 + + @deprecated v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + @param userId 用户 ID + @param rotation 支持90、180、270旋转角度 + + + + 设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的显示模式 + - setRemoteViewFillMode() + 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的显示模式。 + - setRemoteSubStreamViewFillMode() + 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的显示模式。 + + @deprecated v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + @param userId 用户的 ID + @param mode + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + +停止显示远端用户的辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)。 +@deprecated v8.0 版本弃用,请使用 stopRemoteView(userId,streamType) 接口 +@param userId 对方的用户标识 + + + + 开始显示远端用户的辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享) + + - startRemoteView() 用于显示主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)。 + - startRemoteSubStreamView() 用于显示辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)。 + + @deprecated v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + @param userId 对方的用户标识 + @param rendView 渲染画面的 TXView + @note 请在 onUserSubStreamAvailable 回调后再调用这个接口。 + + + + 设置远端图像的顺时针旋转角度 + + @deprecated v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + @param userId 用户 ID + @param rotation 支持 TRTCVideoRotation90 、 TRTCVideoRotation180 以及 TRTCVideoRotation270 + 旋转角度,默认值:TRTCVideoRotation0 + + + + 设置远端图像的渲染模式 + + @deprecated v8.0 版本弃用,请使用 setRemoteRenderParams(userId,streamType,param) 接口 + @param userId 用户 ID + @param mode + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + + 设置本地摄像头预览画面的镜像模式 + + @deprecated v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + @param mirror 镜像模式,默认值:false(非镜像模式) + + + + 设置本地图像的顺时针旋转角度 + + @deprecated v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + @param rotation 支持 TRTCVideoRotation90 、 TRTCVideoRotation180 以及 TRTCVideoRotation270 + 旋转角度,默认值:TRTCVideoRotation0 + + + + 设置本地图像的填充模式 + + @deprecated v8.0 版本弃用,请使用 setLocalRenderParams(TRTCRenderParams) 接口 + @param mode + 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fit + + + + 停止显示远端视频画面,同时不再拉取该远端用户的视频数据流 + + 调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。 + + @deprecated v8.0 版本弃用,请使用 stopRemoteView(userId,streamType) 接口 + @param userId 对方的用户标识 + + + + 开始显示远端视频画面 + + 在收到 SDK 的 onUserVideoAvailable(userId, true) 通知时,可以获知该远程用户开启了视频, + 此后调用 startRemoteView(userId) 接口加载该用户的远程画面时,可以用 loading + 动画优化加载过程中的等待体验。 待该用户的首帧画面开始显示时,您会收到 + onFirstVideoFrame(userId) 事件回调。 + + @deprecated v8.0 版本弃用,请使用 startRemoteView(userId,streamType,rendView) 接口 + @param userId 对方的用户标识 + @param rendView 承载预览画面的窗口句柄 + + + +@name 弃用接口函数 +@{ + 开启本地音频的采集和上行 + + 该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。 + SDK + 并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。 + + @deprecated v8.0 版本弃用,请使用 startLocalAudio(TRTCAudioQuality) 接口 + @note TRTC SDK 并不会默认打开本地的麦克风采集。 + + + +@defgroup IDeprecatedTRTCCloud_cplusplus IDeprecatedTRTCCloud +腾讯云视频通话的 Windows C++ 专有废弃接口 +@{ + + + 2.13 获取景音乐文件的总时长(单位:毫秒) + + @param path 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长。 + @return 成功返回时长,失败返回-1 + + + + 2.12 设置背景音乐的播放进度(单位:毫秒) + + @note 请尽量避免频繁地调用该接口,因为该接口可能会再次读写音乐文件,耗时稍高。 + 当配合进度条使用时,请在进度条拖动完毕的回调中调用,而避免在拖动过程中实时调用。 + + @param id 音乐 ID + @param pts 单位: 毫秒 + + + + 2.11 获取背景音乐当前的播放进度(单位:毫秒) + + @param id 音乐 ID + @return 成功返回当前播放时间,单位:毫秒,失败返回-1 + + + + 2.10 调整背景音乐的变速效果 + + @param id 音乐 ID + @param speedRate 速度,默认值是1.0f,范围是:[0.5 ~ 2] 之间的浮点数; + + + + 2.9 调整背景音乐的音调高低 + + @param id 音乐 ID + @param pitch 音调,默认值是0.0f,范围是:[-1 ~ 1] 之间的浮点数; + + + + 2.8 设置全局背景音乐的本地和远端音量的大小 + + @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 2.7 设置背景音乐的本地音量大小,即主播可以通过此接口设置主播自己本地的背景音乐的音量大小。 + + @param id 音乐 ID + @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 2.6 设置背景音乐的远端音量大小,即主播可以通过此接口设置远端观众能听到的背景音乐的音量大小。 + + @param id 音乐 ID + @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + + 2.5 恢复播放背景音乐 + + @param id 音乐 ID + + + + 2.4 暂停播放背景音乐 + + @param id 音乐 ID + + + + 2.3 停止播放背景音乐 + + @param id 音乐 ID + + + + 2.2 开始播放背景音乐 + + 每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。 + + @note 若您想同时播放多个音乐,请分配不同的 ID 进行播放。 + 如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。 + @param musicParam 音乐参数 + + + +@} +@name 背景音乐特效函数 +@{ + 2.1 设置背景音乐的播放进度回调接口 + + @param musicId 音乐 ID + @param observer 具体参考 ITXMusicPlayObserver 中定义接口 + + + + 1.2 设置麦克风采集人声的音量 + + @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100 + + @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。 + + + +@name 人声相关特效函数 +@{ +1.1 设置人声的混响效果(KTV、小房间、大会堂、低沉、洪亮...) + + + +【字段含义】音乐结束播放时间点,单位毫秒,0表示播放至文件结尾。 + + +【字段含义】音乐开始播放时间点,单位毫秒 + + +【字段含义】播放的是否为短音乐文件 +【推荐取值】YES:需要重复播放的短音乐文件;NO:正常的音乐文件。默认值:NO + + +【字段含义】是否将音乐传到远端 +【推荐取值】YES:音乐在本地播放的同时,会上行至云端,因此远端用户也能听到该音乐;NO:音乐不会上行至云端,因此只能在本地听到该音乐。默认值:NO + + +【字段含义】音乐循环播放的次数 +【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音乐一次;1表示播放音乐两次;以此类推 + + +【字段含义】音乐文件的绝对路径 + + +【字段含义】音乐 ID +【特殊说明】SDK 允许播放多路音乐,因此需要音乐 ID 进行标记,用于控制音乐的开始、停止、音量等 + + +背景音乐已播放完毕 + + +背景音乐的播放进度 + + +背景音乐开始播放 + + +@defgroup ITXAudioEffectManager_cplusplus ITXAudioEffectManager +腾讯云视频通话功能音乐和人声设置接口 +@{ + + + 13.1 有日志打印时的回调 + + @param log 日志内容 + @param level 日志等级 参见 TRTCLogLevel + @param module 暂无具体意义,目前为固定值 TXLiteAVSDK + + + +日志相关回调 + + + * 12.4 各路音频数据混合后送入喇叭播放的音频数据 + * + * @param frame 音频数据 + * @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 + * @note - 此接口回调出的音频数据支持修改。 + * @note - 此接口回调出的音频时间帧长固定为0.02s。 + 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。 + 以SDK默认的音频播放格式48000采样率、双声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 2 × 16bit = 30720bit = 3840字节】。 + * @note - 此接口回调出的音频数据是各路音频播放数据的混合,不包含耳返的音频数据。 + + + + 12.3 混音前的每一路远程用户的音频数据(例如您要对某一路的语音进行文字转换,必须要使用这里的原始数据,而不是混音之后的数据) + + @param frame 音频数据 + @param userId 用户标识 + @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 + - 此接口回调出的音频数据是只读的,不支持修改。 + + + + * 12.1 本地麦克风采集到的音频数据回调 + * + * @param frame 音频数据 + * @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。 + * @note - 此接口回调出的音频数据支持修改。 + * @note - 此接口回调出的音频时间帧长固定为0.02s。 + 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。 + 以SDK默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。 + * @note - 此接口回调出的音频数据包含背景音、音效、混响等前处理效果。 + + + +音频数据回调 + + + 11.1 自定义视频渲染回调 + + 可以通过 setLocalVideoRenderCallback 和 setRemoteVideoRenderCallback 接口设置自定义渲染回调 + + @param userId 用户标识 + @param streamType 流类型:即摄像头还是屏幕分享 + @param frame 视频帧数据 + + @note - 在iOS和Mac平台上回调的视频帧为TRTCVideoBufferType_Buffer类型 + + + +自定义视频渲染回调 + + + 10.6 废弃接口:播放背景音乐结束 + + @param errCode 错误码 + + + + 10.5 废弃接口:播放背景音乐的进度 + + @param progressMS 已播放时间 + @param durationMS 总时间 + + + + 10.4 废弃接口:开始播放背景音乐 + + @param errCode 错误码 + + + + 10.3 废弃接口:播放音效结束回调 + + @param effectId 音效id + @param code 0表示播放正常结束;其他表示异常结束 + + + + 10.2 废弃接口:有主播离开当前房间 + + 该回调接口可以被看作是 onRemoteUserLeaveRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserLeaveRoom 进行替代。 + + @note 该接口已被废弃,不推荐使用 + + @param userId 用户标识 + @param reason 离开原因。 + + + +@} +@name Windows 专有废弃方法 +@{ + 10.1 废弃接口:有主播加入当前房间 + + 该回调接口可以被看作是 onRemoteUserEnterRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。 + + @note 该接口已被废弃,不推荐使用 + + @param userId 用户标识 + + + + 9.5 当屏幕分享停止时,SDK 会通过此回调通知 + + @param reason 停止原因,0:表示用户主动停止;1:表示屏幕分享窗口被关闭 + + + + 9.4 当屏幕分享恢复时,SDK 会通过此回调通知 + + @param reason 停止原因,0:表示用户主动恢复,1:表示屏幕分享参数设置完毕后自动恢复;2:表示屏幕分享窗口从最小化被恢复;3:表示屏幕分享窗口从隐藏被恢复 + + + + 9.3 当屏幕分享暂停时,SDK 会通过此回调通知 + + @param reason 停止原因,0:表示用户主动暂停;1:表示设置屏幕分享参数导致的暂停;2:表示屏幕分享窗口被最小化导致的暂停;3:表示屏幕分享窗口被隐藏导致的暂停 + + + +9.2 当屏幕分享开始时,SDK 会通过此回调通知 + + + +@} +@name 屏幕分享回调 +@{ +9.1 当屏幕分享窗口被遮挡无法正常捕获时,SDK 会通过此回调通知,可在此回调里通知用户移开遮挡窗口 +目前只支持Windows平台 + + + + 8.5 设置云端的混流转码参数的回调,对应于 TRTCCloud 中的 setMixTranscodingConfig() 接口 + + @param errCode 0表示成功,其余值表示失败 + @param errMsg 具体错误原因 + + + + 8.4 停止旁路推流到 CDN 完成的回调 + + 对应于 TRTCCloud 中的 stopPublishCDNStream() 接口 + + + + + 8.3 启动旁路推流到 CDN 完成的回调 + + 对应于 TRTCCloud 中的 startPublishCDNStream() 接口 + + @note Start 回调如果成功,只能说明转推请求已经成功告知给腾讯云,如果目标 CDN 有异常,还是有可能会转推失败。 + + + + 8.2 停止向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 stopPublishing() 接口 + + @param err 0表示成功,其余值表示失败 + @param errMsg 具体错误原因 + + + +@} +@name CDN 旁路转推回调 +@{ + 8.1 开始向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 startPublishing() 接口 + + @param err 0表示成功,其余值表示失败 + @param errMsg 具体错误原因 + + + + 7.3 收到 SEI 消息的回调 + + 当房间中的某个用户使用 sendSEIMsg 发送数据时,房间中的其它用户可以通过 onRecvSEIMsg 接口接收数据。 + + @param userId 用户标识 + @param message 数据 + @param messageSize 数据大小 + + + + 7.2 自定义消息丢失回调 + + 实时音视频使用 UDP 通道,即使设置了可靠传输(reliable)也无法确保100@%不丢失,只是丢消息概率极低,能满足常规可靠性要求。 + 在发送端设置了可靠传输(reliable)后,SDK 都会通过此回调通知过去时间段内(通常为5s)传输途中丢失的自定义消息数量统计信息。 + + @note 只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调 + @param userId 用户标识 + @param cmdID 命令 ID + @param errCode 错误码 + @param missed 丢失的消息数量 + + + +@} +@name 自定义消息的接收回调 +@{ + 7.1 收到自定义消息回调 + + 当房间中的某个用户使用 sendCustomCmdMsg 发送自定义消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 接口接收消息 + + @param userId 用户标识 + @param cmdID 命令 ID + @param seq 消息序号 + @param message 消息数据 + @param messageSize 消息数据大小 + + + + 6.8 当前音频播放设备音量变化通知 + + @note 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭 + + @param volume 音量值,取值范围0 - 100 + @param muted 当前音频播放设备是否被静音,true:静音;false:取消静音 + + + + 6.7 当前音频采集设备音量变化通知 + + @note 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭 + + @param volume 音量值,取值范围0 - 100 + @param muted 当前采集音频设备是否被静音,true:静音;false:取消静音 + + + + 6.6 扬声器测试音量回调 + + 扬声器测试接口 startSpeakerDeviceTest 会触发这个回调 + + @param volume 音量值,取值范围0 - 100 + + + + 6.5 麦克风测试音量回调 + + 麦克风测试接口 startMicDeviceTest 会触发这个回调 + + @param volume 音量值,取值范围0 - 100 + + + + 6.4 本地设备通断回调 + + @param deviceId 设备 ID + @param type 设备类型 + @param state 事件类型 + + + + 6.3 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量 + + 您可以通过调用 TRTCCloud 中的 enableAudioVolumeEvaluation 接口来开关这个回调或者设置它的触发间隔。 + 需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调, + 如果没有人说话,则 userVolumes 为空,totalVolume 为0。 + + @param userVolumes 所有正在说话的房间成员的音量,取值范围0 - 100。 + @param userVolumesCount 房间成员数量 + @param totalVolume 所有远端成员的总音量, 取值范围0 - 100。 + @note userId 为 null 时表示自己的音量,userVolumes 内仅包含正在说话(音量不为0)的用户音量信息。 + + + +6.2 麦克风准备就绪 + + + +@} +@name 硬件设备事件回调 +@{ +6.1 摄像头准备就绪 + + + + 5.4 服务器测速的回调,SDK 对多个服务器 IP 做测速,每个 IP 的测速结果通过这个回调通知 + + @param currentResult 当前完成的测速结果 + @param finishedCount 已完成测速的服务器数量 + @param totalCount 需要测速的服务器总数量 + + + +5.3 SDK 跟服务器的连接恢复 + + + +5.2 SDK 尝试重新连接到服务器 + + + +@} +@name 服务器事件回调 +@{ +5.1 SDK 跟服务器的连接断开 + + + + 4.2 技术指标统计回调 + + 如果您是熟悉音视频领域相关术语,可以通过这个回调获取 SDK 的所有技术指标。 + 如果您是首次开发音视频相关项目,可以只关注 onNetworkQuality 回调。 + + @param statis 统计数据,包括本地和远程的 + @note 每2秒回调一次 + + + +@} +@name 统计和质量回调 +@{ + 4.1 网络质量:该回调每2秒触发一次,统计当前网络的上行和下行质量 + + @note userId == null 代表自己当前的视频质量 + + @param localQuality 上行网络质量 + @param remoteQuality 下行网络质量 + @param remoteQualityCount 下行网络质量的数组大小 + + + + 3.9 首帧本地音频数据已经被送出 + + SDK 会在 enterRoom() 并 startLocalAudio() 成功后开始麦克风采集,并将采集到的声音进行编码。 + 当 SDK 成功向云端送出第一帧音频数据后,会抛出这个回调事件。 + + + + 3.8 首帧本地视频数据已经被送出 + + SDK 会在 enterRoom() 并 startLocalPreview() 成功后开始摄像头采集,并将采集到的画面进行编码。 + 当 SDK 成功向云端送出第一帧视频数据后,会抛出这个回调事件。 + + @param streamType 视频流类型,主画面、小画面或辅流画面(屏幕分享) + + + + 3.7 开始播放远程用户的首帧音频(本地声音暂不通知) + + @param userId 远程用户 ID。 + + + + 3.6 开始渲染本地或远程用户的首帧画面 + + 如果 userId 为 null,表示开始渲染本地采集的摄像头画面,需要您先调用 startLocalPreview 触发。 + 如果 userId 不为 null,表示开始渲染远程用户的首帧画面,需要您先调用 startRemoteView 触发。 + + @note 只有当您调用 startLocalPreview()、startRemoteView() 或 startRemoteSubStreamView() 之后,才会触发该回调。 + + @param userId 本地或远程用户 ID,如果 userId == null 代表本地,userId != null 代表远程。 + @param streamType 视频流类型:摄像头或屏幕分享。 + @param width 画面宽度 + @param height 画面高度 + + + + 3.5 用户是否开启音频上行 + + @param userId 用户标识 + @param available 声音是否开启 + + + + 3.4 用户是否开启屏幕分享 + + @param userId 用户标识 + @param available 屏幕分享是否开启 + + + + 3.3 用户是否开启摄像头视频 + + 当您收到 onUserVideoAvailable(userId, YES) 通知时,表示该路画面已经有可用的视频数据帧到达。 + 此时,您需要调用 startRemoteView(userId) 接口加载该用户的远程画面。 + 然后,您还会收到名为 onFirstVideoFrame(userId) 的首帧画面渲染回调。 + + 当您收到 onUserVideoAvailable(userId, NO) 通知时,表示该路远程画面已被关闭, + 可能由于该用户调用了 muteLocalVideo() 或 stopLocalPreview()。 + + @param userId 用户标识 + @param available 画面是否开启 + + + + 3.2 有用户离开当前房间 + + 与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景下,该通知的行为会有差别: + - 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户的离开都会触发该通知。 + - 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):只有主播离开房间时才会触发该通知,观众离开房间不会触发该通知。 + + @param userId 用户标识 + @param reason 离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。 + + + +@} +@name 成员事件回调 +@{ + 3.1 有用户加入当前房间 + + 出于性能方面的考虑,在两种不同的应用场景下,该通知的行为会有差别: + - 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户进入房间都会触发该通知。 + - 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):该场景不限制观众的数量,如果任何用户进出都抛出回调会引起很大的性能损耗,所以该场景下只有主播进入房间时才会触发该通知,观众进入房间不会触发该通知。 + + + @note 注意 onRemoteUserEnterRoom 和 onRemoteUserLeaveRoom 只适用于维护当前房间里的“成员列表”,如果需要显示远程画面,建议使用监听 onUserVideoAvailable() 事件回调。 + + @param userId 用户标识 + + + +2.6 切换房间 (switchRoom) 的结果回调 + + + +2.5 结束跨房通话(主播 PK)的结果回调 + + + + 2.4 请求跨房通话(主播 PK)的结果回调 + + 调用 TRTCCloud 中的 connectOtherRoom() 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。 + 调用者会收到 onConnectOtherRoom() 回调来获知跨房通话是否成功, + 如果成功,两个房间中的所有用户都会收到 PK 主播的 onUserVideoAvailable() 回调。 + + @param userId 要 PK 的目标主播 userId。 + @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。 + @param errMsg 错误信息。 + + + + 2.3 切换角色的事件回调 + + 调用 TRTCCloud 中的 switchRole() 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程, + 待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调。 + + @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。 + @param errMsg 错误信息。 + + + + 2.2 离开房间的事件回调 + + 调用 TRTCCloud 中的 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。 + 待资源释放完毕,SDK 会通过 onExitRoom() 回调通知到您。 + + 如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。 + 否则可能会遇到例如摄像头、麦克风设备被强占等各种异常问题。 + + @param reason 离开房间原因,0:主动调用 exitRoom 退房;1:被服务器踢出当前房间;2:当前房间整个被解散。 + + + + 1.2 警告回调:用于告知您一些非严重性问题,例如出现了卡顿或者可恢复的解码失败。 + + @param warningCode 警告码 + @param warningMsg 警告信息 + @param extraInfo 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题 + + + +@name 错误事件和警告事件 +@{ + 1.1 错误回调:SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。 + + @param errCode 错误码 + @param errMsg 错误信息 + @param extraInfo 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题 + + + +@defgroup TRTCCloudCallback_cplusplus TRTCCloudCallback +腾讯云视频通话功能的回调接口类 +@{ +腾讯云视频通话功能的回调接口类 + + + +5.24 设备列表和设备 Item 信息 + +以下定义仅用于兼容原有接口,具体定义参见 ITXDeviceManager.h 文件 + + + + 5.23 屏幕分享参数 + + 您可以通过设置结构体内的参数控制屏幕分享边框的颜色、宽度、是否采集鼠标等参数 + + + +@brief 遍历完窗口列表后,调用release释放资源。 + + + +@return 窗口信息 + + + +@return 窗口个数 + + + +5.22 屏幕分享窗口列表 + + + + 5.21 屏幕分享窗口信息 + + 您可以通过 getScreenCaptureSources() 枚举可共享的窗口列表,列表通过 ITRTCScreenCaptureSourceList 返回 + + + +5.20 用于存储屏幕分享窗口缩略图和图标的结构体 + + + +数组 remoteStatisticsArray 的大小 + + +远端成员的音视频统计信息,可能有主画面、小画面以及辅路画面等多路的情况,因此是一个数组 + + +数组 localStatisticsArray 的大小 + + +本地的音视频统计信息,可能有主画面、小画面以及辅路画面等多路的情况,因此是一个数组 + + +总发送字节总数(包含信令和音视频) + + +总接收字节数(包含信令和音视频) + + +延迟(毫秒), +指 SDK 到腾讯云服务器的一次网络往返时间,该值越小越好。 +一般低于50ms的 rtt 相对理想,而高于100ms的 rtt 会引入较大的通话延时。 +由于数据上下行共享一条网络连接,所以 local 和 remote 的 rtt 相同。 + + +当前系统的 CPU 使用率(%) + + +当前 App 的 CPU 使用率(%) + + +S -> C 下行丢包率(%), + * 该值越小越好,例如,丢包率为0表示网络很好, + * 丢包率为30@%则意味着 SDK 向服务器发送的数据包中会有30@%丢失在下行传输中。 + + + +C -> S 上行丢包率(%), + * 该值越小越好,例如,丢包率为0表示网络很好, + * 丢包率为30@%则意味着 SDK 向服务器发送的数据包中会有30@%丢失在上行传输中。 + + + +5.19 统计数据 + + + +该线路的总丢包率(%) + * + * 这个值越小越好,例如,丢包率为0表示网络很好。 + * 丢包率是该线路的 userId 从上行到服务器再到下行的总丢包率。 + * 如果 downLoss 为0,但是 finalLoss 不为0,说明该 userId 上行时出现了无法恢复的丢包。 + + + +5.18 远端成员的音视频统计信息 + + + +5.17 自己本地的音视频统计信息 + + + +【字段含义】房间签名 [选填],当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。 +【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。 + + +【字段含义】用户签名 [选填],当前 userId 对应的验证签名,相当于登录密码。不填时,SDK 会继续使用旧的 userSig, + 但用户必须保证旧的 userSig 仍在有效期内,否则会造成进房失败等后果。 +【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。 + + +【字段含义】字符串房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。 + + +【字段含义】数字房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。 +【推荐取值】取值范围:1 - 4294967294。 +【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。 + + +5.16 切换房间参数 + + + +【字段含义】音效音量 +【推荐取值】取值范围为0 - 100;默认值:100 + + +【字段含义】音效是否上行 +【推荐取值】YES:音效在本地播放的同时,会上行至云端,因此远端用户也能听到该音效;NO:音效不会上行至云端,因此只能在本地听到该音效。默认值:NO + + +【字段含义】循环播放次数 +【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音效一次;1表示播放音效两次;以此类推 + + +【字段含义】音效路径,支持的文件格式:aac, mp3。 + + +【字段含义】音效 ID, +【特殊说明】SDK 允许播放多路音效,因此需要音效 ID 进行标记,用于控制音效的开始、停止、音量等 + + +5.15 音效 + + + +【字段含义】文件路径(必填),录音文件的保存路径。该路径需要用户自行指定,请确保路径存在且可写。 +【特别说明】该路径需精确到文件名及格式后缀,格式后缀决定录音文件的格式,目前支持的格式有 PCM、WAV 和 AAC。 + 例如,指定路径为 path/to/audio.aac,则会生成一个 AAC 格式的文件。 + 请指定一个有读写权限的合法路径,否则录音文件无法生成。 + + + 5.14 录音参数 + + 请正确填写参数,确保录音文件顺利生成。 + + + +旁路转推的 URL + + +腾讯云直播 bizid,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取 + + +腾讯云 AppID,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取 + + +5.13 CDN 旁路推流参数 + + + +【字段含义】输出到 CDN 上的直播流 ID + 如不设置该参数,SDK 会执行默认逻辑,即房间里的多路流会混合到该接口调用者的视频流上,也就是 A+B =>A; + 如果设置该参数,SDK 会将房间里的多路流混合到您指定的直播流 ID 上,也就是 A+B =>C。 +【推荐取值】默认值:null,即房间里的多路流会混合到该接口调用者的视频流上。 + + +【字段含义】 数组 mixUsersArray 的大小 + + +【字段含义】每一路子画面的位置信息 + + +【字段含义】最终转码后的音频声道数 +【推荐取值】默认值:1。取值范围为 [1,2] 中的整型。 + + +【字段含义】最终转码后的音频码率。 +【推荐取值】默认值:64kbps,取值范围是 [32,192]。 + + +【字段含义】最终转码后的音频采样率。 +【推荐取值】默认值:48000Hz。支持12000HZ、16000HZ、22050HZ、24000HZ、32000HZ、44100HZ、48000HZ。 + + +【字段含义】混合后画面的底色颜色,默认为黑色,格式为十六进制数字,比如:“0x61B9F1” 代表 RGB 分别为(97,158,241)。 +【推荐取值】默认值:0x000000,黑色 + + +【字段含义】最终转码后的视频分辨率的关键帧间隔(又称为 GOP)。 +【推荐取值】默认值:2,单位为秒,取值范围是 [1,8]。 + + +【字段含义】最终转码后的视频分辨率的帧率(FPS)。 +【推荐取值】默认值:15fps,取值范围是 (0,30]。 + + +【字段含义】最终转码后的视频分辨率的码率(kbps)。 +【推荐取值】如果填0,后台会根据videoWidth和videoHeight来估算码率,您也可以参考枚举定义TRTCVideoResolution_640_480的注释。 + + +【字段含义】最终转码后的视频分辨率的高度。 +【推荐取值】推荐值:640px ,如果你是纯音频推流,请将 width × height 设为 0px × 0px,否则混流后会携带一条画布背景的视频流。 + + +【字段含义】最终转码后的视频分辨率的宽度。 +【推荐取值】推荐值:360px ,如果你是纯音频推流,请将 width × height 设为 0px × 0px,否则混流后会携带一条画布背景的视频流。 + + +【字段含义】腾讯云直播 bizid +【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】后,在“直播信息”中获取 + + +【字段含义】腾讯云直播 AppID +【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】后,在“直播信息”中获取 + + +【字段含义】转码 config 模式 + + + 5.12 云端混流(转码)配置 + + 包括最终编码质量和各路画面的摆放位置 + + + + 5.11 混流参数配置模式 + + + + +预排版模式,通过占位符提前对各路画面进行排布 +此模式下,您依然需要设置 mixUsers 参数,但可以将 userId 设置为占位符,可选的占位符有: +- "$PLACE_HOLDER_REMOTE$" : 指代远程用户的画面,可以设置多个。 +- "$PLACE_HOLDER_LOCAL_MAIN$" : 指代本地摄像头画面,只允许设置一个。 +- "$PLACE_HOLDER_LOCAL_SUB$" : 指代本地屏幕分享画面,只允许设置一个。 +但是您可以不需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调进行实时调整, +只需要在进房成功后调用一次 setMixTranscodingConfig() 即可,之后 SDK 会自动将真实的 userId 补位到您设置的占位符上。 + + +纯音频模式,适用于语音通话(AudioCall)和语音聊天室(VoiceChatRoom)等纯音频场景。 +只需要在进房后通过 setMixTranscodingConfig() 接口设置一次,之后 SDK 就会自动把房间内所有上麦用户的声音混流到当前用户的直播流上。 +此模式下,您无需设置 TRTCTranscodingConfig 中的 mixUsers 参数,只需设置 audioSampleRate、audioBitrate 和 audioChannels 等参数。 + + +全手动模式,灵活性最高,可以自由组合出各种混流方案,但易用性最差。 +此模式下,您需要填写 TRTCTranscodingConfig 中的所有参数,并需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调, +以便根据当前房间中各个上麦用户的音视频状态不断地调整 mixUsers 参数,否则会导致混流失败。 + + +非法值 + + +参与混合的是主路画面(TRTCVideoStreamTypeBig)或屏幕分享(TRTCVideoStreamTypeSub)画面 + + +该用户是不是只开启了音频 + + +图层层次(1 - 15)不可重复 + + +图层位置坐标以及大小,左上角为坐标原点(0,0) (绝对像素值) + + +参与混流的 roomId,跨房流传入的实际 roomId,当前房间流传入 roomId = nullptr + + +参与混流的 userId + + + 5.10 云端混流中每一路子画面的位置信息 + + TRTCMixUser 用于指定每一路(即每一个 userId)视频画面的具体摆放位置 + + + +延迟(毫秒),指当前设备到腾讯云服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms + + +下行丢包率,范围是0 - 1.0,例如,0.2表示每从服务器收取10个数据包可能会在中途丢失2个。 + + +上行丢包率,范围是0 - 1.0,例如,0.3表示每向服务器发送10个数据包可能会在中途丢失3个。 + + +网络质量,内部通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分便越高 + + +服务器 IP 地址 + + + 5.9 网络测速结果 + + 您可以在用户进入房间前通过 TRTCCloud 的 startSpeedTest 接口进行测速 (注意:请不要在通话中调用), + 测速结果会每2 - 3秒钟返回一次,每次返回一个 IP 地址的测试结果。 + + @note - quality 是内部通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分便越高。 + @note - upLostRate 是指上行丢包率。例如,0.3表示每向服务器发送10个数据包可能会在中途丢失3个。 + @note - downLostRate 是指下行丢包率。例如,0.2表示每从服务器收取10个数据包可能会在中途丢失2个。 + @note - rtt 是指当前设备到腾讯云服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms + + + + 5.8 音频帧数据 + + + + + 5.7 视频帧数据 + + + + +说话者的音量, 取值范围0 - 100 + + +说话者的 userId,字符编码格式为 UTF-8 + + + 5.6 音量大小 + + 表示语音音量的评估大小,通过这个数值,您可以在 UI 界面上用图标表征 userId 是否有在说话。 + + + + 5.5 视频质量 + + 表示视频质量的好坏,通过这个数值,您可以在 UI 界面上用图标表征 userId 的通话线路质量 + + + +【字段含义】视频分辨率(云端控制 - 客户端控制) +【推荐取值】云端控制 +【特别说明】 + - Server 模式(默认):云端控制模式,若无特殊原因,请直接使用该模式 + - Client 模式:客户端控制模式,用于 SDK 开发内部调试,客户请勿使用 + + +【字段含义】弱网下是“保清晰”或“保流畅” +【特别说明】 + - 弱网下保流畅:在遭遇弱网环境时,画面会变得模糊,且出现较多马赛克,但可以保持流畅不卡顿。 + - 弱网下保清晰:在遭遇弱网环境时,画面会尽可能保持清晰,但可能容易出现卡顿 + + + 5.4 网络流控相关参数 + + 网络流控相关参数,该设置决定了SDK在各种网络环境下的调控方向(比如弱网下是“保清晰”或“保流畅”) + + + + 5.3 画面渲染参数 + + 您可以通过设置此参数来控制画面的旋转、填充、镜像模式 + + + +【字段含义】是否允许调整分辨率 +【推荐取值】 + - 手机直播建议选择 false。 + - 视频通话模式,若更关注流畅性,建议选择 true,此时若遇到带宽有限的弱网,SDK 会自动降低分辨率以保障更好的流畅度(仅针对 TRTCVideoStreamTypeBig 生效)。 + - 默认值:false。 +【特别说明】若有录制需求,选择 true 时,请确保通话过程中,调整分辨率不会影响您的录制效果。 + + +【字段含义】最低视频码率,SDK 会在网络不佳的情况下主动降低视频码率,最低会降至 +minVideoBitrate 所设定的数值。 【推荐取值】 + - 如果您追求“允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 + 60%; + - 如果您追求“允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为 200kbps; + - 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK + 的自适应调节能力; + - 默认值:0,此时最低码率由 SDK 根据分辨率情况,自动设置合适的数值。 +【特别说明】 + - 当您把分辨率设置的比较高时,minVideoBitrate + 不适合设置的太低,否则会出现画面模糊和大范围的马赛克宏块。 + 比如把分辨率设置为 720p,把码率设置为 + 200kbps,那么编码出的画面将会出现大范围区域性马赛克。 + + +【字段含义】视频上行码率 +【推荐取值】推荐设置请参考本文件前半部分 TRTCVideoResolution 定义处的注释说明 +【特别说明】码率太低会导致视频中出现大量马赛克 + + +【字段含义】视频采集帧率 +【推荐取值】15fps 或 20fps。5fps以下,卡顿感明显。10fps以下,会有轻微卡顿感。20fps以上,则过于浪费(电影的帧率为24fps)。 +【特别说明】很多 Android 手机的前置摄像头并不支持15fps以上的采集帧率,部分过于突出美颜功能的 Android 手机前置摄像头的采集帧率可能低于10fps。 + + +【字段含义】分辨率模式(横屏分辨率 - 竖屏分辨率) +【推荐取值】手机直播建议选择 Portrait,Window 和 Mac 建议选择 Landscape。 +【特别说明】如果 videoResolution 指定分辨率 640 × 360,resMode 指定模式为 Portrait,则最终编码出的分辨率为360 × 640。 + + +【字段含义】 视频分辨率 +【推荐取值】 + - 视频通话建议选择360 × 640及以下分辨率,resMode 选择 Portrait。 + - 手机直播建议选择540 × 960,resMode 选择 Portrait。 + - Window 和 iMac 建议选择640 × 360及以上分辨率,resMode 选择 Landscape。 +【特别说明】 + TRTCVideoResolution 默认只能横屏模式的分辨率,例如640 × 360。 + 如需使用竖屏分辨率,请指定 resMode 为 Portrait,例如640 × 360结合 Portrait 则为360 × 640。 + + + 5.2 视频编码参数 + + 该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量)。 + + + +【字段含义】业务数据(非必填),部分高级特性才需要使用该字段。 +【推荐取值】不建议使用 + + +【字段含义】房间签名(非必填),当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。 +【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。 + + +【字段含义】设置云端录制完成后的回调消息中的 "userdefinerecordid" 字段内容,便于您更方便的识别录制回调。 +【推荐取值】限制长度为64字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。 +【参考文档】[云端录制](https://cloud.tencent.com/document/product/647/16823)。 + + +【字段含义】绑定腾讯云直播 CDN 流 ID[非必填],设置之后,您就可以在腾讯云直播 CDN 上通过标准直播方案(FLV或HLS)播放该用户的音视频流。 +【推荐取值】限制长度为64字节,可以不填写,一种推荐的方案是使用 “sdkappid_roomid_userid_main” 作为 streamid,这样比较好辨认且不会在您的多个应用中发生冲突。 +【特殊说明】要使用腾讯云直播 CDN,您需要先在[控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启“启动自动旁路直播”开关。 +【参考文档】[CDN 旁路直播](https://cloud.tencent.com/document/product/647/16826)。 + + +【字段含义】直播场景下的角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom),视频通话场景下指定无效。 +【推荐取值】默认值:主播(TRTCRoleAnchor) + + +【字段含义】房间号码(必填),在同一个房间内的用户可以看到彼此并进行视频通话。 +【推荐取值】您可以自定义设置该参数值,但不可重复。如果您的用户帐号 ID (userId)为数字类型,可直接使用创建者的用户 ID 作为 roomId。 + + +【字段含义】用户签名(必填),当前 userId 对应的验证签名,相当于登录密码。 +【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。 + + +【字段含义】用户标识(必填),当前用户的 userId,相当于用户名,使用 UTF-8 编码。 +【推荐取值】如果一个用户在您的帐号系统中的 ID 为“abc”,则 userId 即可设置为“abc”。 + + +【字段含义】应用标识(必填),腾讯视频云基于 sdkAppId 完成计费统计。 +【推荐取值】在 [实时音视频控制台](https://console.cloud.tencent.com/rav/) 创建应用后可在帐号信息页面中得到该 ID。 + + + 5.1 进房相关参数 + + 只有该参数填写正确,才能顺利调用 enterRoom 进入 roomId 所指定的音视频房间。 + + + +4.5 屏幕分享目标信息 + + + +4.4 水印图片的源类型 + + + +4.3 设备类型 + +以下定义仅用于兼容原有接口,具体定义参见 ITXDeviceManager.h 文件 + + + +4.2 设备操作 + + + +4.1 Log 级别 + + + + 3.2 声音音质 + + 音频音质用来衡量声音的保真程度,TRTCAudioQualitySpeech 适用于通话场景,TRTCAudioQualityMusic 适用于高音质音乐场景。 + + + +高音质:采样率:48k;双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。 + + +默认音质:采样率:48k;单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。 + + +流畅音质:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。 + + + 3.1 音频帧的格式 + + + + + 2.4 画质偏好 + + 指当 TRTC SDK 在遇到弱网络环境时,您期望“保清晰”或“保流畅”: + + - Smooth:弱网下保流畅。即在遭遇弱网环境时首先确保声音的流畅和优先发送,画面会变得模糊且会有较多马赛克,但可以保持流畅不卡顿。 + - Clear:弱网下保清晰。即在遭遇弱网环境时,画面会尽可能保持清晰,但可能会更容易出现卡顿。 + + + + 2.3 流控模式 + + TRTC SDK 内部需要时刻根据网络情况调整内部的编解码器和网络模块,以便能够对网络的变化做出反应。 + 为了支持快速算法升级,SDK 内部设置了两种不同的流控模式: + - ModeServer:云端控制,默认模式,推荐选择。 + - ModeClient:本地控制,用于 SDK 开发内部调试,客户请勿使用。 + + @note 推荐您使用云端控制,这样每当我们升级 Qos 算法时,您无需升级 SDK 即可体验更好的效果。 + + + + 2.2 角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom) + + 在直播场景中,多数用户仅为观众,个别用户是主播,这种角色区分有利于 TRTC 进行更好的定向优化。 + + - Anchor:主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。 + - Audience:观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。 + + + + 2.1 应用场景 + + TRTC 可用于视频会议和在线直播等多种应用场景,针对不同的应用场景,TRTC SDK 的内部会进行不同的优化配置: + - TRTCAppSceneVideoCall :视频通话场景,适合[1对1视频通话]、[300人视频会议]、[在线问诊]、[视频聊天]、[远程面试]等。 + - TRTCAppSceneLIVE :视频互动直播,适合[视频低延时直播]、[十万人互动课堂]、[视频直播 PK]、[视频相亲房]、[互动课堂]、[远程培训]、[超大型会议]等。 + - TRTCAppSceneAudioCall :语音通话场景,适合[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等。 + - TRTCAppSceneVoiceChatRoom:语音互动直播,适合:[语音低延时直播]、[语音直播连麦]、[语聊房]、[K 歌房]、[FM 电台]等。 + + + + 1.10 画面渲染镜像类型 + + TRTC 的画面镜像提供下列设置模式 + + + +1.9 视频数据包装格式 + + + + 1.8 视频像素格式 + + TRTC SDK 提供针对视频的自定义采集和自定义渲染功能,在自定义采集功能中,您可以用下列枚举值描述您采集的视频像素格式。 + 在自定义渲染功能中,您可以指定您期望 SDK 回调的视频像素格式。 + + + + 1.7 美颜(磨皮)算法 + + TRTC SDK 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案。 + + + + 1.6 视频画面旋转方向 + + TRTC SDK 提供了对本地和远程画面的旋转角度设置 API,下列的旋转角度都是指顺时针方向的。 + + + + + 1.5 视频画面填充模式 + + 如果画面的显示分辨率不等于画面的原始分辨率,就需要您设置画面的填充模式: + - TRTCVideoFillMode_Fill,图像铺满屏幕,超出显示视窗的视频部分将被裁剪,画面显示可能不完整。 + - TRTCVideoFillMode_Fit,图像长边填满屏幕,短边区域会被填充黑色,但画面的内容肯定是完整的。 + + + +图像长边填满屏幕,短边区域会被填充黑色 + + +图像铺满屏幕,超出显示视窗的视频部分将被裁剪 + + + 1.4 画质级别 + + TRTC SDK 对画质定义了六种不同的级别,Excellent 表示最好,Down 表示不可用。 + + + + 1.3 视频流类型 + + TRTC 内部有三种不同的音视频流,分别为: + - 主画面:最常用的一条线路,一般用来传输摄像头的视频数据。 + - 小画面:跟主画面的内容相同,但是分辨率和码率更低。 + - 辅流画面:一般用于屏幕分享或远程播片(例如老师播放视频给学生观看)。 + + @note - 如果主播的上行网络和性能比较好,则可以同时送出大小两路画面。 + @note - SDK 不支持单独开启小画面,小画面必须依附于主画面而存在。 + + + + 1.2 视频分辨率模式 + + - 横屏分辨率:TRTCVideoResolution_640_360 + TRTCVideoResolutionModeLandscape = 640 × 360 + - 竖屏分辨率:TRTCVideoResolution_640_360 + TRTCVideoResolutionModePortrait = 360 × 640 + + + +窗口尺寸和位置结构体 + +@defgroup TRTCTypeDef_cplusplus 关键类型定义 +腾讯云视频通话功能的关键类型定义 +@{ + 1.1 视频分辨率 + + 此处仅定义横屏分辨率,如需使用竖屏分辨率(例如360 × 640),需要同时指定 TRTCVideoResolutionMode 为 Portrait。 + + + + 渲染控件 + TXView根据编译平台的不同,做不同的类型转换,来保证兼容性 + + + + +停止扬声器测试 +@return 0:操作成功 负数:失败 +@note 此接口只支持Mac和Windows平台 + + + + 开始扬声器测试 + + 该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。 + @param filePath 声音文件的路径 + @return 0:操作成功 负数:失败 + @note 此接口只支持Mac和Windows平台 + + + +结束麦克风测试 +@return 0:操作成功 负数:失败 +@note 此接口只支持Mac和Windows平台 + + + + 开始麦克风测试 + + @param interval 音量回调间隔 + @return 0:操作成功 负数:失败 + @note 此接口只支持Mac和Windows平台 + + + +结束摄像头测试 +@return 0:操作成功 负数:失败 +@note 此接口只支持Mac和Windows平台 + + + + 开始进行摄像头测试 + 会触发 onFirstVideoFrame 回调接口 + + @param callback 摄像头预览自定义渲染画面回调 + @return 0:操作成功 负数:失败 + @note - 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + - 此接口只支持Windows平台 + + + + 开始摄像头测试 + + @param view 预览控件所在的父控件 + @return 0:操作成功 负数:失败 + @note - 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。 + - 此接口只支持Mac和Windows平台 + + + + 查询当前设备是否静音 + + @param type 设备类型,根据设备类型获取当前设备状态。详见TXMediaDeviceType定义。 + @return true : 当前设备已静音;false : 当前设备未静音 + @note type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker + + + + 设置当前设备是否静音 + + @param type 设备类型,根据设备类型设置当前设备状态。详见TXMediaDeviceType定义。 + @param mute 是否静音/禁画 + @return 0:操作成功 负数:失败 + @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker + - 此接口只支持Mac和Windows平台 + + + + 获取当前设备的音量 + + @param type 设备类型,根据设备类型获取当前设备音量。详见TXMediaDeviceType定义。 + + @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker + - 此接口只支持Mac和Windows平台 + + + + 设置当前设备的音量 + + @param type 设备类型,根据设备类型获取当前设备音量。详见TXMediaDeviceType定义。 + @param volume 音量大小 + @return 0:操作成功 负数:失败 + @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker + - 此接口只支持Mac和Windows平台 + + + + 获取当前使用的设备 + + @param type 设备类型,根据设备类型获取当前设备信息。详见TXMediaDeviceType定义。 + @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称 + @note 此接口只支持Mac和Windows平台 + + + + 指定当前设备 + + @param type 设备类型,根据设备类型指定当前设备。详见TXMediaDeviceType定义。 + @param deviceId 从 getDevicesList 中得到的设备 ID + @return 0:操作成功 负数:失败 + @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker、TXMediaDeviceTypeCamera + - 此接口只支持Mac和Windows平台 + + + + 获取设备列表 + + @param type 设备类型,指定需要获取哪种设备的列表。详见TXMediaDeviceType定义。 + + @note - 如果 delete ITXDeviceCollection* 指针会编译错误,SDK 维护 ITXDeviceCollection 对象的生命周期。 + - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker、TXMediaDeviceTypeCamera + - 此接口只支持Mac和Windows平台 + + + +@brief 获取完设备信息后,调用release释放资源。 + + + +@return 设备PID,字符编码格式是UTF-8 + + + +@return 设备名称,字符编码格式是UTF-8 + + + +设备 Item 信息 + + + +@brief 遍历完设备后,调用release释放资源。 + + + +@return 设备PID,字符编码格式是UTF-8 + + + +@return 设备名称,字符编码格式是UTF-8 + + + +@return 设备个数 + + + +设备列表 + + + +设备类型 + + + + 声音播放路由(仅适用于移动端设备) + + 一般手机都有两个扬声器,设置音频路由的作用就是要决定声音从哪个扬声器播放出来: + - Speakerphone:扬声器,位于手机底部,声音偏大,适合外放音乐。 + - Earpiece:听筒,位于手机顶部,声音偏小,适合通话。 + + + +@defgroup ITXDeviceManager_cplusplus ITXDeviceManager +腾讯云视频通话功能的设备管理接口类 +@{ + 系统音量类型(仅适用于移动端设备) + + 智能手机一般具备两种系统音量类型,即通话音量类型和媒体音量类型。 + - 通话音量:手机专门为通话场景设计的音量类型,使用手机自带的回声抵消功能,音质相比媒体音量类型较差, + 无法通过音量按键将音量调成零,但是支持蓝牙耳机上的麦克风。 + + - 媒体音量:手机专门为音乐场景设计的音量类型,音质相比于通话音量类型要好,通过通过音量按键可以将音量调成零。 + 使用媒体音量类型时,如果要开启回声抵消(AEC)功能,SDK 会开启内置的声学处理算法对声音进行二次处理。 + 在媒体音量模式下,蓝牙耳机无法使用自带的麦克风采集声音,只能使用手机上的麦克风进行声音采集。 + + SDK 目前提供了三种系统音量类型的控制模式,分别为: + - Auto:“麦上通话,麦下媒体”,即主播上麦时使用通话音量,观众不上麦则使用媒体音量,适合在线直播场景。 + 如果您在 enterRoom 时选择的场景为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom,SDK 会自动选择该模式。 + + - VOIP:全程使用通话音量,适合多人会议场景。 + 如果您在 enterRoom 时选择的场景为 TRTCAppSceneVideoCall 或 TRTCAppSceneAudioCall,SDK 会自动选择该模式。 + + - Media:通话全程使用媒体音量,不常用,适合个别有特殊需求(如主播外接声卡)的应用场景。 + + + + +通话全程使用媒体音量,不常用,适合个别有特殊需求(如主播外接声卡)的应用场景。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/ClientDemo/TRTC_SDK/Win64/lib/TRAE.dll b/ClientDemo/TRTC_SDK/Win64/lib/TRAE.dll new file mode 100644 index 0000000..10e8aa2 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/TRAE.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-file-l1-2-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-file-l1-2-0.dll new file mode 100644 index 0000000..13bed22 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-file-l1-2-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-file-l2-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-file-l2-1-0.dll new file mode 100644 index 0000000..9876b4a Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-file-l2-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-localization-l1-2-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-localization-l1-2-0.dll new file mode 100644 index 0000000..4c966f3 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-localization-l1-2-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-processthreads-l1-1-1.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-processthreads-l1-1-1.dll new file mode 100644 index 0000000..208f602 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-processthreads-l1-1-1.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-synch-l1-2-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-synch-l1-2-0.dll new file mode 100644 index 0000000..3f0bf0f Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-synch-l1-2-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-timezone-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-timezone-l1-1-0.dll new file mode 100644 index 0000000..eb5fc8e Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-timezone-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-xstate-l2-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-xstate-l2-1-0.dll new file mode 100644 index 0000000..472cfcb Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-core-xstate-l2-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-convert-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-convert-l1-1-0.dll new file mode 100644 index 0000000..3840307 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-convert-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-environment-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-environment-l1-1-0.dll new file mode 100644 index 0000000..7ef063b Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-environment-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-filesystem-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-filesystem-l1-1-0.dll new file mode 100644 index 0000000..c50cd67 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-filesystem-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-heap-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-heap-l1-1-0.dll new file mode 100644 index 0000000..1392eff Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-heap-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-locale-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-locale-l1-1-0.dll new file mode 100644 index 0000000..8255241 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-locale-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-math-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-math-l1-1-0.dll new file mode 100644 index 0000000..6473c9b Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-math-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-runtime-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-runtime-l1-1-0.dll new file mode 100644 index 0000000..47d0913 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-runtime-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-stdio-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-stdio-l1-1-0.dll new file mode 100644 index 0000000..30eeeab Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-stdio-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-string-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-string-l1-1-0.dll new file mode 100644 index 0000000..563d7c8 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-string-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-time-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-time-l1-1-0.dll new file mode 100644 index 0000000..daf93ea Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-time-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-utility-l1-1-0.dll b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-utility-l1-1-0.dll new file mode 100644 index 0000000..83d2a51 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/api-ms-win-crt-utility-l1-1-0.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/liteav.dll b/ClientDemo/TRTC_SDK/Win64/lib/liteav.dll new file mode 100644 index 0000000..65ccbc5 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/liteav.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/liteav.lib b/ClientDemo/TRTC_SDK/Win64/lib/liteav.lib new file mode 100644 index 0000000..973d20f Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/liteav.lib differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/msvcp140.dll b/ClientDemo/TRTC_SDK/Win64/lib/msvcp140.dll new file mode 100644 index 0000000..8e3df96 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/msvcp140.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/ucrtbase.dll b/ClientDemo/TRTC_SDK/Win64/lib/ucrtbase.dll new file mode 100644 index 0000000..9f56094 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/ucrtbase.dll differ diff --git a/ClientDemo/TRTC_SDK/Win64/lib/vcruntime140.dll b/ClientDemo/TRTC_SDK/Win64/lib/vcruntime140.dll new file mode 100644 index 0000000..2168671 Binary files /dev/null and b/ClientDemo/TRTC_SDK/Win64/lib/vcruntime140.dll differ diff --git a/ClientDemo/TXLiteAVVideoView.cs b/ClientDemo/TXLiteAVVideoView.cs new file mode 100644 index 0000000..e2c5275 --- /dev/null +++ b/ClientDemo/TXLiteAVVideoView.cs @@ -0,0 +1,492 @@ +using ManageLiteAV; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace JianGongYun.TRTC.Components +{ + public class TXLiteAVVideoView : Canvas, IDisposable + { + private bool mOccupy = false; // view 是否已被占用 + private bool mLocalView = false; // 是否为本地画面 + private bool mPause = false; + private bool mFirstFrame = false; + + private string mUserId; + private TRTCVideoStreamType mStreamType; + private TRTCVideoFillMode mRenderMode = TRTCVideoFillMode.TRTCVideoFillMode_Fit; // 0:填充,1:适应 + + private volatile FrameBufferInfo mArgbFrame = new FrameBufferInfo(); // 帧缓存 + + // 位图缓存,防止GC频繁 + private WriteableBitmap mWriteableBitmap; + private Int32Rect mInt32Rect; + private Pen mPen; + + public TXLiteAVVideoView() + { + mPen = new Pen { Brush = Brushes.DarkGray, Thickness = 1 }; + } + + /// + /// 设置 View 绑定参数 + /// + /// 需要渲染画面的 userId,如果是本地画面,则传空字符串。 + /// 渲染类型 + /// TRTCCloud 实例,用户注册视频数据回调。 + /// 渲染本地画面,SDK 返回的 userId 为"" + /// true:绑定成功,false:绑定失败 + public bool RegEngine(string userId, TRTCVideoStreamType type, ITRTCCloud engine, bool local = false) + { + if (mOccupy) return false; + mLocalView = local; + mUserId = userId; + mStreamType = type; + int count = TXLiteAVVideoViewManager.GetInstance().Count; + if (engine != null) + { + if (count == 0) + { + engine.setLocalVideoRenderCallback(TRTCVideoPixelFormat.TRTCVideoPixelFormat_BGRA32, + TRTCVideoBufferType.TRTCVideoBufferType_Buffer, TXLiteAVVideoViewManager.GetInstance()); + } + if (!mLocalView) + { + engine.setRemoteVideoRenderCallback(userId, TRTCVideoPixelFormat.TRTCVideoPixelFormat_BGRA32, + TRTCVideoBufferType.TRTCVideoBufferType_Buffer, TXLiteAVVideoViewManager.GetInstance()); + } + } + if (mLocalView) + TXLiteAVVideoViewManager.GetInstance().AddView("", type, this); + else + TXLiteAVVideoViewManager.GetInstance().AddView(userId, type, this); + lock (mArgbFrame) + ReleaseBuffer(mArgbFrame); + mOccupy = true; + this.InvalidateVisual(); + return true; + } + + /// + /// 移除 View 绑定参数 + /// + /// TRTCCloud 实例,用户注册视频数据回调。 + public void RemoveEngine(ITRTCCloud engine) + { + if (mLocalView) + TXLiteAVVideoViewManager.GetInstance().RemoveView("", mStreamType, this); + else + TXLiteAVVideoViewManager.GetInstance().RemoveView(mUserId, mStreamType, this); + int count = TXLiteAVVideoViewManager.GetInstance().Count; + if (engine != null) + { + if (count == 0) + { + engine.setLocalVideoRenderCallback(TRTCVideoPixelFormat.TRTCVideoPixelFormat_Unknown, + TRTCVideoBufferType.TRTCVideoBufferType_Unknown, null); + } + if (!mLocalView && !TXLiteAVVideoViewManager.GetInstance().HasUserId(mUserId)) + { + engine.setRemoteVideoRenderCallback(mUserId, TRTCVideoPixelFormat.TRTCVideoPixelFormat_Unknown, + TRTCVideoBufferType.TRTCVideoBufferType_Unknown, null); + } + } + lock (mArgbFrame) + ReleaseBuffer(mArgbFrame); + mUserId = ""; + mOccupy = false; + mLocalView = false; + mFirstFrame = false; + mRenderMode = TRTCVideoFillMode.TRTCVideoFillMode_Fit; + //this.OnViewRemove?.Invoke(); + this.InvalidateVisual(); + } + + /// + /// 设置 View 的渲染模式 + /// + /// 渲染模式 + public void SetRenderMode(TRTCVideoFillMode mode) + { + mRenderMode = mode; + } + + /// + /// 判断 View 是否被占用 + /// + /// true:当前 View 已被占用,false:当前 View 未被占用 + public bool IsViewOccupy() + { + return mOccupy; + } + + /// + /// 暂停渲染,显示默认图片 + /// + /// 是否暂停 + public void SetPause(bool pause) + { + if (mPause != pause) + { + mPause = pause; + if (mPause) + { + this.Background = new SolidColorBrush(Color.FromArgb(0xFF, 0x20, 0x20, 0x20)); + } + else + { + this.Background = new SolidColorBrush(Color.FromArgb(0xFF, 0x00, 0x00, 0x00)); + // 避免刷新最后一帧数据 + lock (mArgbFrame) + ReleaseBuffer(mArgbFrame); + } + this.InvalidateVisual(); + } + } + + /// + /// 清除所有映射信息 + /// + public static void RemoveAllRegEngine() + { + TXLiteAVVideoViewManager.GetInstance().RemoveAllView(); + } + + public bool AppendVideoFrame(byte[] data, int width, int height, TRTCVideoPixelFormat videoFormat, TRTCVideoRotation rotation) + { + if (!mFirstFrame) + mFirstFrame = true; + + OnRenderVideoFrameHandler?.Invoke(data, width, height); + + if (mPause) + return false; + if (data == null || data.Length <= 0) + return false; + // data 数据有误 + if (videoFormat == TRTCVideoPixelFormat.TRTCVideoPixelFormat_BGRA32 && width * height * 4 != data.Length) + return false; + // 暂时不支持其他 YUV 类型 + if (videoFormat == TRTCVideoPixelFormat.TRTCVideoPixelFormat_I420 && width * height * 3 / 2 != data.Length) + return false; + + // 目前只实现了 BGRA32 的数据类型,如需其他类型请重写,并设置回调的数据类型 + if (videoFormat == TRTCVideoPixelFormat.TRTCVideoPixelFormat_BGRA32) + { + lock (mArgbFrame) + { + if (mArgbFrame.data == null || mArgbFrame.width != width || mArgbFrame.height != height) + { + ReleaseBuffer(mArgbFrame); + mArgbFrame.width = width; + mArgbFrame.height = height; + mArgbFrame.data = new byte[data.Length]; + } + Buffer.BlockCopy(data, 0, mArgbFrame.data, 0, (int)data.Length); + mArgbFrame.newFrame = true; + mArgbFrame.rotation = rotation; + } + } + + // 回到主线程刷新当前画面 + this.Dispatcher.Invoke(new Action(() => + { + this.InvalidateVisual(); + })); + + return true; + } + + protected override void OnRender(DrawingContext dc) + { + bool needDrawFrame = true; + if (mPause) + needDrawFrame = false; + if (mArgbFrame.data == null) + needDrawFrame = false; + if (!needDrawFrame) + { + return; + } + + lock (mArgbFrame) + { + if (mArgbFrame.data == null) + return; + if (mRenderMode == TRTCVideoFillMode.TRTCVideoFillMode_Fill) + { + RenderFillMode(dc, mArgbFrame.data, mArgbFrame.width, mArgbFrame.height, (int)mArgbFrame.rotation * 90); + } + else if (mRenderMode == TRTCVideoFillMode.TRTCVideoFillMode_Fit) + { + RenderFitMode(dc, mArgbFrame.data, mArgbFrame.width, mArgbFrame.height, (int)mArgbFrame.rotation * 90); + } + } + } + + //public event Action OnRenderVideoFrameHandler; + /// + /// 渲染回调byte[] data,int width, int height + /// + public event Action OnRenderVideoFrameHandler; + //public event Action OnViewRemove; + + private void RenderFillMode(DrawingContext dc, byte[] data, int width, int height, int rotation) + { + int viewWidth = (int)this.ActualWidth, viewHeight = (int)this.ActualHeight; + PixelFormat pixelFormat = PixelFormats.Pbgra32; + int bytesPerPixel = (pixelFormat.BitsPerPixel + 7) / 8; + int stride = bytesPerPixel * width; + if (mWriteableBitmap == null || mWriteableBitmap.PixelWidth != width || mWriteableBitmap.PixelHeight != height) + { + mWriteableBitmap = new WriteableBitmap(width, height, 96, 96, pixelFormat, null); + mInt32Rect = new Int32Rect(0, 0, width, height); + } + mWriteableBitmap.Lock(); + Marshal.Copy(data, 0, mWriteableBitmap.BackBuffer, data.Length); + mWriteableBitmap.AddDirtyRect(mInt32Rect); + mWriteableBitmap.Unlock(); + + ImageBrush brush = new ImageBrush(mWriteableBitmap); + if (rotation > 0) + { + Matrix transform = Matrix.Identity; + double scale = (double)viewWidth / (double)viewHeight; + if (rotation == 90 || rotation == 270) + transform.ScaleAt(scale, scale, 0.5, 0.5); + transform.RotateAt(rotation, 0.5, 0.5); + brush.RelativeTransform = new MatrixTransform(transform); + } + brush.Stretch = Stretch.UniformToFill; + Rect rect = new Rect(0, 0, viewWidth, viewHeight); + dc.DrawRectangle(brush, mPen, rect); + } + + + + private void RenderFitMode(DrawingContext dc, byte[] data, int width, int height, int rotation) + { + int viewWidth = (int)this.ActualWidth, viewHeight = (int)this.ActualHeight; + PixelFormat pixelFormat = PixelFormats.Pbgra32; + int bytesPerPixel = (pixelFormat.BitsPerPixel + 7) / 8; + int stride = bytesPerPixel * width; + if (mWriteableBitmap == null || mWriteableBitmap.PixelWidth != width || mWriteableBitmap.PixelHeight != height) + { + mWriteableBitmap = new WriteableBitmap(width, height, 96, 96, pixelFormat, null); + mInt32Rect = new Int32Rect(0, 0, width, height); + } + mWriteableBitmap.Lock(); + Marshal.Copy(data, 0, mWriteableBitmap.BackBuffer, data.Length); + mWriteableBitmap.AddDirtyRect(mInt32Rect); + mWriteableBitmap.Unlock(); + + //OnRenderVideoFrameHandler?.Invoke(mWriteableBitmap); + + ImageBrush brush = new ImageBrush(mWriteableBitmap); + if (rotation > 0) + { + Matrix transform = Matrix.Identity; + double scale = (double)viewHeight / (double)viewWidth; + if (rotation == 90 || rotation == 270) + transform.ScaleAt(1, scale, 0.5, 0.5); + transform.RotateAt(rotation, 0.5, 0.5); + brush.RelativeTransform = new MatrixTransform(transform); + } + brush.Stretch = Stretch.Uniform; + Rect rect = new Rect(0, 0, viewWidth, viewHeight); + dc.DrawRectangle(brush, mPen, rect); + } + + private void ReleaseBuffer(FrameBufferInfo info) + { + if (info.data != null) + info.data = null; + info.width = 0; + info.height = 0; + info.newFrame = false; + info.rotation = TRTCVideoRotation.TRTCVideoRotation0; + } + + #region Dispose + private bool disposed = false; + + public void Dispose() + { + this.Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposed) return; + if (disposing) + { + ReleaseBuffer(mArgbFrame); + mWriteableBitmap = null; + } + disposed = true; + } + + ~TXLiteAVVideoView() + { + this.Dispose(false); + } + #endregion + } + + public class TXLiteAVVideoViewManager : ITRTCVideoRenderCallback + { + private volatile Dictionary mMapViews; + + public static TXLiteAVVideoViewManager sInstance; + + private static Object mLocker = new Object(); + + public static TXLiteAVVideoViewManager GetInstance() + { + if (sInstance == null) + { + lock (mLocker) + { + if (sInstance == null) + sInstance = new TXLiteAVVideoViewManager(); + } + } + return sInstance; + } + + private TXLiteAVVideoViewManager() + { + mMapViews = new Dictionary(); + } + + private string GetKey(string userId, TRTCVideoStreamType type) + { + return String.Format("{0}_{1}", userId, type); + } + + // 主要用于判断当前 user 是否还有存在流画面,存在则不移除监听。 + public bool HasUserId(string userId) + { + bool exit = false; + lock (mMapViews) + { + exit = mMapViews.ContainsKey(GetKey(userId, TRTCVideoStreamType.TRTCVideoStreamTypeBig)) || + mMapViews.ContainsKey(GetKey(userId, TRTCVideoStreamType.TRTCVideoStreamTypeSub)); + } + return exit; + } + + public void AddView(string userId, TRTCVideoStreamType type, TXLiteAVVideoView view) + { + lock (mMapViews) + { + bool find = false; + foreach (var item in mMapViews) + { + if (item.Key.Equals(GetKey(userId, type))) + { + find = true; + break; + } + } + if (!find) + { + mMapViews.Add(GetKey(userId, type), view); + } + } + } + + public void RemoveView(string userId, TRTCVideoStreamType type, TXLiteAVVideoView view) + { + lock (mMapViews) + { + foreach (var item in mMapViews.ToList()) + { + if (item.Key.Equals(GetKey(userId, type))) + { + if (item.Value != null) + { + item.Value.Dispose(); + } + mMapViews.Remove(item.Key); + break; + } + } + } + } + + public void RemoveAllView() + { + lock (mMapViews) + mMapViews.Clear(); + } + + public int Count + { + get + { + lock (mMapViews) + return mMapViews.Count; + } + } + + //public event Action OnRenderVideoFrameHandler; + /// + /// 自定义渲染回调,只能存在一个回调 + /// + /// + /// + /// + public void onRenderVideoFrame(string userId, TRTCVideoStreamType streamType, TRTCVideoFrame frame) + { + //OnRenderVideoFrameHandler?.Invoke(userId, streamType, frame); + // 大小视频是占一个视频位,底层支持动态切换。 + if (streamType == TRTCVideoStreamType.TRTCVideoStreamTypeSmall) + streamType = TRTCVideoStreamType.TRTCVideoStreamTypeBig; + TXLiteAVVideoView view = null; + lock (mMapViews) + { + foreach (var item in mMapViews) + { + if (item.Key.Equals(GetKey(userId, streamType)) && item.Value != null) + { + view = item.Value; + break; + } + } + } + if (view != null) + view.AppendVideoFrame(frame.data, (int)frame.width, (int)frame.height, frame.videoFormat, frame.rotation); + } + } + + class FrameBufferInfo + { + public byte[] data { get; set; } + + public int width { get; set; } + + public int height { get; set; } + + public bool newFrame { get; set; } + + public TRTCVideoRotation rotation { get; set; } + + public FrameBufferInfo() + { + rotation = TRTCVideoRotation.TRTCVideoRotation0; + newFrame = false; + width = 0; + height = 0; + data = null; + } + } +} diff --git a/ClientDemo/Util.cs b/ClientDemo/Util.cs new file mode 100644 index 0000000..f1b9559 --- /dev/null +++ b/ClientDemo/Util.cs @@ -0,0 +1,95 @@ +using ManageLiteAV; +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace JianGongYun.TRTC.Utils +{ + public static class Util + { + public static string UTF16To8(string str) + { + byte[] utf16Bytes = Encoding.Unicode.GetBytes(str); + byte[] utf8Bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, utf16Bytes); + return Encoding.UTF8.GetString(utf8Bytes); + } + + public static bool IsSys64bit() + { + return IntPtr.Size == 8; + } + + public static string GetRandomString(int iLength) + { + string buffer = "0123456789"; + StringBuilder sb = new StringBuilder(); + Random r = new Random(iLength); + int range = buffer.Length; + for (int i = 0; i < iLength; i++) + { + sb.Append(buffer.Substring(r.Next(range), 1)); + } + return sb.ToString(); + } + + public static string MD5(string str) + { + MD5 md5 = System.Security.Cryptography.MD5.Create(); + byte[] byteOld = Encoding.UTF8.GetBytes(str); + byte[] byteNew = md5.ComputeHash(byteOld); + StringBuilder sb = new StringBuilder(); + foreach (byte b in byteNew) + { + // 将字节转换成16进制表示的字符串 + sb.Append(b.ToString("x2")); + } + return sb.ToString(); + } + + public static bool IsTestEnv() + { + string path = Environment.CurrentDirectory + "\\ShowTestEnv.txt"; + return File.Exists(path); + } + + public static string ConvertMSToTime(int lCurMS, int lDurationMS) + { + string strTime = "00:00/00:00"; + + int nTotalDurationSecond = lDurationMS / 1000; + int nDurationMinute = nTotalDurationSecond / 60; + int nDurationSecond = nTotalDurationSecond % 60; + + int nTotalCurSecond = lCurMS / 1000; + int nCurMinute = nTotalCurSecond / 60; + int nCurSecond = nTotalCurSecond % 60; + + string format = "{0:00}:{1:00}/{2:00}:{3:00}"; + + strTime = string.Format(format, nCurMinute, nCurSecond, nDurationMinute, nDurationSecond); + + return strTime; + } + + /// + /// 把trtc的图片buffer复制给wpf的writeableBitmap + /// + /// + public static WriteableBitmap ToWriteableBitmap(this TRTCImageBuffer data) + { + var writeableBitmap = new WriteableBitmap((int)data.width, (int)data.height, 96, 96, PixelFormats.Pbgra32, null); + writeableBitmap.Lock(); + Marshal.Copy(data.buffer, 0, writeableBitmap.BackBuffer, (int)data.length); + writeableBitmap.AddDirtyRect(new System.Windows.Int32Rect(0, 0, (int)data.width, (int)data.height)); + writeableBitmap.Unlock(); + return writeableBitmap; + } + + public static string TimeStr() => DateTime.Now.ToString("yyyyMMddHHmmssfff"); + } +} diff --git a/ClientDemo/packages.config b/ClientDemo/packages.config new file mode 100644 index 0000000..e3c23b0 --- /dev/null +++ b/ClientDemo/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/JianGongYun.sln b/JianGongYun.sln index 00d9aa3..b21d04c 100644 --- a/JianGongYun.sln +++ b/JianGongYun.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 16.0.30717.126 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JianGongYun", "JianGongYun\JianGongYun.csproj", "{0B346099-B101-4426-800A-6FB1D4308F34}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientDemo", "ClientDemo\ClientDemo.csproj", "{5C83270B-1086-494D-BCAF-0E773CC598AB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -27,6 +29,18 @@ Global {0B346099-B101-4426-800A-6FB1D4308F34}.Release|x64.Build.0 = Release|x64 {0B346099-B101-4426-800A-6FB1D4308F34}.Release|x86.ActiveCfg = Release|x86 {0B346099-B101-4426-800A-6FB1D4308F34}.Release|x86.Build.0 = Release|x86 + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Debug|x64.ActiveCfg = Debug|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Debug|x64.Build.0 = Debug|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Debug|x86.ActiveCfg = Debug|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Debug|x86.Build.0 = Debug|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Release|Any CPU.Build.0 = Release|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Release|x64.ActiveCfg = Release|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Release|x64.Build.0 = Release|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Release|x86.ActiveCfg = Release|Any CPU + {5C83270B-1086-494D-BCAF-0E773CC598AB}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/JianGongYun/TRTC/ViewModels/LiveWindowViewModel.cs b/JianGongYun/TRTC/ViewModels/LiveWindowViewModel.cs index 5fae0a2..1b68427 100644 --- a/JianGongYun/TRTC/ViewModels/LiveWindowViewModel.cs +++ b/JianGongYun/TRTC/ViewModels/LiveWindowViewModel.cs @@ -247,6 +247,7 @@ namespace JianGongYun.TRTC.ViewModels { //Console.WriteLine("get LiveScreens"); _LiveScreens.Clear(); + LiveClassroom.lTRTCCloud.removeAllExcludedShareWindow(); //Console.WriteLine("get LiveScreens Clear"); var temp = LiveClassroom.lTRTCCloud.getScreenCaptureSources(ref thumbSize, ref iconSize); var count = temp.getCount(); @@ -256,6 +257,7 @@ namespace JianGongYun.TRTC.ViewModels var info = temp.getSourceInfo(i); if (string.IsNullOrWhiteSpace(info.sourceName) || excluded.Contains(info.sourceName)) { + LiveClassroom.lTRTCCloud.addExcludedShareWindow(info.sourceId); continue; } //var icon = Util.ToWriteableBitmap(ref info.iconBGRA);