Răsfoiți Sursa

调用 startAndPublishDefaultDevices 来启动推流

yourname 7 luni în urmă
părinte
comite
07c16695d4
3 a modificat fișierele cu 20 adăugiri și 7 ștergeri
  1. 6 5
      client/mobile/pages_classroom.tsx
  2. 14 1
      client/share/aliyun-rtc-sdk.d.ts
  3. 0 1
      server/app.tsx

+ 6 - 5
client/mobile/pages_classroom.tsx

@@ -1,5 +1,7 @@
 import React, { useState, useEffect, useRef, createContext, useContext } from 'react';
+// @ts-types="../share/aliyun-rtc-sdk.d.ts"
 import AliRtcEngine, { AliRtcSubscribeState, AliRtcVideoTrack, AliRtcSdkChannelProfile } from 'aliyun-rtc-sdk';
+// import AliRtcEngine, { AliRtcSubscribeState, AliRtcVideoTrack, AliRtcSdkChannelProfile } from '../share/aliyun-rtc-sdk.js';
 import { ToastContainer, toast } from 'react-toastify';
 
 // 从 SDK 中提取需要的类型
@@ -806,11 +808,9 @@ export const ClassroomPage = () => {
         await aliRtcEngine.current?.setLocalViewConfig('localPreviewer', AliRtcVideoTrack.AliRtcVideoTrackCamera);
         await aliRtcEngine.current?.enableLocalVideo(true)
         await aliRtcEngine.current?.startPreview();
-        setTimeout(()=>{
-          showToast('info', '开始推流');
-          aliRtcEngine.current?.publishLocalVideoStream(true)
-          aliRtcEngine.current?.startAndPublishDefaultDevices()
-        },1000 * 5)
+        await aliRtcEngine.current?.publishLocalVideoStream(true)
+        await aliRtcEngine.current?.startAndPublishDefaultDevices()
+   
       }
       setIsCameraOn(!isCameraOn);
     } catch (err) {
@@ -866,6 +866,7 @@ export const ClassroomPage = () => {
           'screenPreviewer',
           AliRtcVideoTrack.AliRtcVideoTrackScreen
         );
+        await aliRtcEngine.current?.startAndPublishDefaultDevices()
         // await aliRtcEngine.current?.startPreviewScreen({
         //   audio: isAudioOn,  // 根据音频状态决定是否共享音频
         //   videoTrack: undefined,  // 使用默认视频轨道

+ 14 - 1
client/share/aliyun-rtc-sdk.d.ts

@@ -323,7 +323,20 @@ declare class AliRtcEngine_2 extends default_2<AliRtcEngineEventListener> {
      * @note 该接口只可以在加入频道之前调用,会议中不可以重新设置,离开频道后可以重新设置
      */
     setChannelProfile(channelProfile: AliRtcSdkChannelProfile): void;
-    private startAndPublishDefaultDevices;
+    // private startAndPublishDefaultDevices;
+    /**
+     * 自动启动并发布默认设备
+     * @param options 配置选项
+     * @param options.audioOnly 是否仅音频模式,为true时不会启动摄像头
+     * @returns Promise<void>
+     * @description
+     * 1. 自动检测并启动默认摄像头(非仅音频模式时)
+     * 2. 自动启动默认麦克风
+     * 3. 预览所有设备
+     * 4. 自动发布所有流
+     * 注意:如果设备已启动,会跳过相应步骤
+     */
+    startAndPublishDefaultDevices: (options?: { audioOnly?: boolean }) => Promise<void>;
     /**
      * 设置用户角色
      * @param {AliRtcSdkClientRole} clientRole 用户角色类型,默认值为 {@link AliRtcSdkClientRole.AliRtcSdkLive}(观众角色)

+ 0 - 1
server/app.tsx

@@ -401,7 +401,6 @@ export default function({ apiClient, app, moduleDir }: ModuleParams) {
               </>
             )}
             <script src="https://g.alicdn.com/apsara-media-box/imp-interaction/1.6.1/alivc-im.iife.js"></script>
-            <script src="https://g.alicdn.com/apsara-media-box/imp-web-rtc/6.14.1/aliyun-rtc-sdk.js"></script>
           </head>
           <body className="bg-gray-50">
             <div id="root"></div>