การจับภาพสื่อและข้อจํากัด

ส่วนสื่อของ WebRTC ครอบคลุมวิธีเข้าถึงฮาร์ดแวร์ซึ่งรองรับการบันทึกวิดีโอและเสียง เช่น กล้องและไมโครโฟน รวมถึงวิธีการทํางานของสตรีมสื่อ นอกจากนี้ยังครอบคลุมสื่อแสดงผลด้วย ซึ่งเป็นวิธีที่แอปพลิเคชันจับภาพหน้าจอได้

อุปกรณ์สื่อ

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

ข้อจํากัด

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

ข้อจํากัดเฉพาะจะกําหนดในออบเจ็กต์ MediaTrackConstraint และอีกข้อหนึ่งสําหรับวิดีโอ แอตทริบิวต์ในออบเจ็กต์ประเภทนี้เป็นประเภท ConstraintLong, ConstraintBoolean, ConstraintDouble หรือ ConstraintDOMString ค่าเหล่านี้อาจเป็นค่าเฉพาะ (เช่น ตัวเลข บูลีน หรือสตริง) ช่วง (LongRange หรือ DoubleRange ที่มีค่าขั้นต่ําและสูงสุด) หรือออบเจ็กต์ที่มีคําจํากัดความ ideal หรือ exact ได้ สําหรับค่าที่เจาะจง เบราว์เซอร์จะพยายามเลือกค่าที่ใกล้เคียงที่สุด ระบบจะใช้ค่าที่ดีที่สุดในช่วงนั้น เมื่อระบุ exact แล้ว ระบบจะแสดงเฉพาะสตรีมสื่อที่ตรงกับข้อจํากัดดังกล่าวเท่านั้น

ใกล้

// Camera with a resolution as close to 640x480 as possible
{
    "video": {
        "width": 640,
        "height": 480
    }
}

ช่วง

// Camera with a resolution in the range 640x480 to 1024x768
{
    "video": {
        "width": {
            "min": 640,
            "max": 1024
        },
        "height": {
            "min": 480,
            "max": 768
        }
    }
}

ตรงทั้งหมด

// Camera with the exact resolution of 1024x768
{
    "video": {
        "width": {
            "exact": 1024
        },
        "height": {
            "exact": 768
        }
    }
}

หากต้องการระบุการกําหนดค่าจริงที่แทร็กสื่อหนึ่งมีในการกําหนดค่าจริง เราจะเรียก MediaStreamTrack.getSettings() ซึ่งแสดง MediaTrackSettings ที่ใช้อยู่ในปัจจุบันได้

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

สื่อในเครือข่ายดิสเพลย์

แอปพลิเคชันที่ต้องการบันทึกหน้าจอและบันทึกไว้ต้องใช้ Display Media API ฟังก์ชัน getDisplayMedia() (ซึ่งเป็นส่วนหนึ่งของ navigator.mediaDevices คล้ายกับ getUserMedia() และใช้เพื่อวัตถุประสงค์ในการเปิดเนื้อหาของจอแสดงผล (หรือบางส่วน เช่น หน้าต่าง) MediaStream ที่แสดงผลจะทํางานเหมือนกับเมื่อใช้ getUserMedia()

ข้อจํากัดสําหรับ getDisplayMedia() แตกต่างจากข้อจํากัดที่ใช้สําหรับอินพุตวิดีโอหรือเสียงปกติ

{
    video: {
        cursor: 'always' | 'motion' | 'never',
        displaySurface: 'application' | 'browser' | 'monitor' | 'window'
    }
}

โค้ดข้างต้นจะแสดงวิธีการทํางานของข้อจํากัดพิเศษในการบันทึกหน้าจอ โปรดทราบว่าเบราว์เซอร์ที่รองรับการรองรับสื่อแบบดิสเพลย์อาจไม่รองรับการตั้งค่าเหล่านี้

สตรีมและแทร็ก

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

เส้นทางสื่อ

MediaStreamTrack มีพร็อพเพอร์ตี้ kind ที่เป็น audio หรือ video ซึ่งแสดงถึงประเภทของสื่อที่นําเสนอ แต่ละแทร็กจะปิดเสียงได้โดยสลับพร็อพเพอร์ตี้ enabled แทร็กมีพร็อพเพอร์ตี้บูลีน remote ซึ่งระบุว่ามาจาก RTCPeerConnection และมาจากแอปเทียบเท่าระยะไกล