มีบทความนี้ให้บริการที่นี่ด้วย(ภาษาญี่ปุ่น)
https://cloud.flect.co.jp/entry/2020/06/01/115652

(บทความใหม่ 20 ต.ค./2020):
Faceswap และพื้นหลังเสมือนจริงบนเบราว์เซอร์ของคุณ

ในบทความที่แล้ว ฉันได้อธิบายวิธีสร้างพื้นหลังเสมือนสำหรับ Amazon Chime SDK



ฉันอยากจะพูดคุยเกี่ยวกับ Amazon Chime SDK ต่อไปในโพสต์นี้

คุณรู้ไหมว่า Amazon ประกาศฟีเจอร์ใหม่เพิ่มเติมใน Amazon Chime SDK เมื่อวันก่อน



คุณสมบัตินี้ช่วยให้ผู้เข้าร่วมการประชุมสามารถแลกเปลี่ยนข้อความข้อมูลโดยใช้ช่องทางการสื่อสารข้อมูลที่ใช้โดย Amazon Chime ตามที่กล่าวไว้ในประกาศ สิ่งนี้ช่วยให้เราสามารถใช้ไวท์บอร์ดและอิโมจิกับผู้เข้าร่วมในห้องประชุมได้อย่างง่ายดาย และยังสามารถใช้เพื่อควบคุมสถานะของห้องประชุมได้ เช่น การบังคับให้ผู้เข้าร่วมปิดเสียง

ฉันจึงอยากจะแสดงวิธีสร้างไวท์บอร์ดโดยใช้ฟีเจอร์นี้

นี่คือพฤติกรรมของไวท์บอร์ดที่ฉันทำในครั้งนี้

Amazon Chime และการส่งสัญญาณ

คุณสมบัติเพิ่มเติมของ Amazon Chime SDK ใช้การสื่อสารการส่งสัญญาณที่มีอยู่แล้วใน Amazon Chime การประชุมทางวิดีโอของ Amazon Chime ทำได้โดยใช้เทคโนโลยีที่เรียกว่า WebRTC และใน WebRTC จะใช้การสื่อสารแบบส่งสัญญาณเพื่อควบคุมเซสชัน

โดยเฉพาะอย่างยิ่ง WebRTC ใช้สำหรับการสื่อสาร P2P ระหว่างเบราว์เซอร์ และการสื่อสารการส่งสัญญาณใช้เพื่อระบุปลายทางของอีกฝ่ายหรือเพื่อแลกเปลี่ยนคีย์สำหรับการสื่อสารแบบเข้ารหัสเพื่อเริ่มการสื่อสารนี้

และถึงแม้จะเรียกว่าการสื่อสาร P2P แต่ก็จำเป็นต้องผ่านเซิร์ฟเวอร์รีเลย์ที่เรียกว่า TURN เมื่อสื่อสารผ่านไฟร์วอลล์ การแลกเปลี่ยนข้อมูลเกี่ยวกับเส้นทางเหล่านี้ก็กระทำผ่านการสื่อสารสัญญาณเช่นกัน

หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ WebRTC และความสัมพันธ์กับการส่งสัญญาณ โปรดดูที่ หน้านี้

Amazon Chime มีเซิร์ฟเวอร์รีเลย์ที่ได้รับการจัดการและช่องสัญญาณเพื่อให้เริ่มการประชุมทางวิดีโอในสภาพแวดล้อมเครือข่ายต่างๆ ได้อย่างง่ายดาย คุณลักษณะใหม่ใช้ประโยชน์จากเส้นทางการสื่อสารที่ได้รับการจัดการสำหรับการส่งสัญญาณนี้เพื่อให้สามารถแลกเปลี่ยนข้อความข้อมูลได้ตามต้องการ ดังนั้นนักพัฒนาจึงสามารถเพิ่มสิ่งต่างๆ เช่น ไวท์บอร์ดที่ใช้ร่วมกันลงในระบบการประชุมทางวิดีโอได้อย่างง่ายดาย โดยไม่ต้องจัดเตรียมเซิร์ฟเวอร์สำหรับการส่งข้อความ

ภาพรวม API ใหม่

วิธีการใหม่สามวิธีที่นำเสนอมีดังนี้

ฟังก์ชั่นนี้ส่งข้อความข้อมูลด้วย "หัวข้อ"

ประการแรก ลูกค้าแต่ละรายจะลงทะเบียนฟังก์ชันการติดต่อกลับซึ่งกำหนดกระบวนการสำหรับแต่ละหัวข้อ จากนั้น เมื่อผู้ส่งส่งข้อความข้อมูลด้วย Topic ลูกค้าจะได้รับข้อความข้อมูลและเรียกใช้ฟังก์ชันการโทรกลับที่สอดคล้องกับ Topic เราไม่ทราบรายละเอียดของการประมวลผลภายใน โดยเฉพาะอย่างยิ่งกระแสข้อมูล แต่อาจทำงานบน "โมเดลการเผยแพร่/สมัครสมาชิก" ทั่วไป

หลังจากใช้งานในครั้งนี้ ฉันพบว่ามันเป็นคุณสมบัติที่ใช้งานง่ายมาก

โปรดทราบว่าฟังก์ชันนี้อาจไม่สามารถรับข้อความข้อมูลได้แม้ว่าผู้เผยแพร่ข้อความข้อมูลจะสมัครรับหัวข้อของข้อความข้อมูลแล้ว ดังนั้นคุณอาจต้องใช้ความระมัดระวัง ฉันคิดว่าข้อดีของรูปแบบการเผยแพร่/สมัครสมาชิกคือช่วยให้ผู้เผยแพร่และสมาชิกสามารถเพิกเฉยต่อความสัมพันธ์ของกันและกันได้โดยสิ้นเชิง ดังนั้นการที่ผู้เผยแพร่ไม่สามารถรับข้อมูลได้เมื่อพวกเขาอยู่ในซอฟต์แวร์เดียวกัน (เซสชัน) จึงมีข้อบกพร่องเพียงเล็กน้อยเท่านั้น .

  1. SendDataMessage
    https://aws.github.io/amazon-chime-sdk-js/interfaces/audiovideofacade.html#realtimesenddatamessage
  2. สมัครสมาชิก
    https://aws.github.io/amazon-chime-sdk-js/interfaces/audiovideofacade.html#realtimesubscribetoreceivedatamessage
  3. ยกเลิกการสมัคร
    https://aws.github.io/amazon-chime-sdk-js/interfaces/audiovideofacade.html#realtimeunsubscribefromreceivedatamessage

ไวท์บอร์ดที่ใช้ร่วมกัน

ต่อไปนี้เป็นขั้นตอนทั่วไปของไวท์บอร์ดที่ใช้ร่วมกันที่เราสร้างขึ้น

  1. ตรวจจับเหตุการณ์เมาส์/เหตุการณ์การสัมผัสบนผืนผ้าใบของเบราว์เซอร์ของผู้เผยแพร่ (HTMLCanvasEelemnt) และระบุพิกัด
  2. วาดภาพบนผืนผ้าใบของผู้จัดพิมพ์
  3. ส่งพิกัดไปยังนายหน้า (Chime) เป็นข้อความข้อมูล (real-timeSendDataMessage)
  4. การส่งพิกัดจากนายหน้าไปยังสมาชิกแต่ละราย
  5. วาดภาพบนผืนผ้าใบของสมาชิกแต่ละคน

ตามที่กล่าวไว้ก่อนหน้านี้ ผู้เผยแพร่ไม่สามารถรับข้อความข้อมูลที่ส่งได้ ดังนั้นจึงต้องวาดบนผืนผ้าใบของตัวเองก่อนที่จะส่งข้อความข้อมูล เมื่อสร้างแอพพลิเคชั่นที่ต้องการสะท้อนการทำงานของผู้ใช้ใน UI โดยไม่ชักช้า เช่น ไวท์บอร์ด จะดีกว่าสำหรับประสบการณ์ผู้ใช้ที่สะท้อนการทำงานของผู้ใช้ใน UI ก่อนที่จะส่งข้อความข้อมูล ดังนั้นผมคิดว่ามันจะคล้ายกันไม่ว่า Publisher จะเป็นอย่างไร สามารถรับข้อความข้อมูลได้หรือไม่
นอกจากนี้ เนื่องจากผู้เผยแพร่ไม่สามารถรับข้อความข้อมูลที่ส่งได้ จึงอาจใช้งานได้ง่ายกว่าเนื่องจากผู้เผยแพร่ไม่จำเป็นต้องละทิ้งข้อมูลที่ได้รับ

การดำเนินการ

ติดตาม

นี่คือตัวอย่างของฟังก์ชัน wrapper ที่ลงทะเบียนหัวข้อและฟังก์ชันโทรกลับที่เกี่ยวข้องที่จะสมัครสมาชิกโดย realtimeSubscribeToReceiveDataMessage ที่นี่ เรากำหนดฟังก์ชันการโทรกลับที่เรียก app.app.receivedDataMessage เมื่อเราได้รับข้อความข้อมูลและใช้เป็นอาร์กิวเมนต์ โปรดทราบว่าสามารถกำหนด app.app.receivedDataMessage ได้ที่อื่นเพื่อการประมวลผลตามอำเภอใจ

export const setRealtimeSubscribeToReceiveDataMessage = (app:App, audioVideo:AudioVideoFacade, topic:string) =>{
    const receiveDataMessageHandler = (dataMessage: DataMessage): void => {
        app.receivedDataMessage(dataMessage)
    }
    audioVideo.realtimeSubscribeToReceiveDataMessage(topic, receiveDataMessageHandler)
}

ส่งข้อความข้อมูล

นี่คือตัวอย่างวิธีการส่งข้อความข้อมูลโดยใช้ realtimeSendDataMessage
ในการวาดบนไวท์บอร์ด พิกัดของจุดเริ่มต้นและจุดสิ้นสุด ข้อมูลเส้นขีด ความหนาของเส้น ฯลฯ จะถูก JOSNized และส่ง

    sendDrawsingBySignal = (targetId: string, mode:string, startXR:number, startYR:number, endXR:number, endYR:number, stroke:string, lineWidth:number)=>{
        const gs = this.props as GlobalState
        const message={
            action: 'sendmessage',
            data: JSON.stringify({ 
                cmd         : MessageType.Drawing,
                targetId    : targetId, 
                startTime   : Date.now(),
                mode        : mode,
                startXR     : startXR,
                startYR     : startYR,
                endXR       : endXR,
                endYR       : endYR,
                stroke      : stroke,
                lineWidth   : lineWidth
            })
        }
        gs.meetingSession?.audioVideo.realtimeSendDataMessage(MessageType.Drawing.toString(), JSON.stringify(message))
    }

การสาธิต

ไวท์บอร์ด

นี่คือการทำงานของฟังก์ชันไวท์บอร์ดที่คุณสร้างขึ้น การสาธิตนี้จะเป็นกระดานไวท์บอร์ดจำลองในห้องเรียน คุณจะเห็นว่าสิ่งที่คุณวาดทางด้านขวาจะสะท้อนให้เห็นทางด้านซ้ายของหน้าจอ

ไวท์บอร์ดพร้อม SharedDisplay

คุณยังสามารถสร้างไวท์บอร์ดนี้เป็นโอเวอร์เลย์เพื่อให้ใช้กับคุณสมบัติการแชร์หน้าจอของ Amazon Chime SDK เพื่อนำเสนองานได้

รหัส

ฟีเจอร์ที่อธิบายในบทความนี้มีอยู่แล้วในตัวทดสอบฟีเจอร์ใหม่ๆ ที่ใช้การประชุมทางวิดีโอ
หากคุณสนใจ โปรดไปที่พื้นที่เก็บข้อมูลต่อไปนี้



ในที่สุด

ครั้งนี้ ฉันพยายามสร้างไวท์บอร์ดโดยใช้คุณสมบัติล่าสุดของ Amazon Chime SDK

ในญี่ปุ่น มีการประกาศเมื่อเร็ว ๆ นี้ว่าสถานการณ์ฉุกเฉินได้ถูกยกเลิกแล้ว อย่างไรก็ตาม ดูเหมือนว่าจะยังเป็นเรื่องยากที่จะมีคนจำนวนมากในห้องเรียนมาสอนบทเรียน นอกจากนี้ การบริการลูกค้าแบบเห็นหน้ากันก็อาจมีความเสี่ยงและทำได้ยากในลักษณะเดียวกัน ฉันคิดว่าการประชุมทางวิดีโอและไวท์บอร์ดที่ใช้ร่วมกันอาจเป็นตัวเลือกในการแก้ไขปัญหาเหล่านี้