การเลิกใช้งาน MediaStream

หากทำงานกับ getUserMedia() หรือ WebRTC คุณอาจต้องปรับเปลี่ยนโค้ด สำหรับ Chrome 45 ขึ้นไป

MediaStream API แสดง สตรีมสื่อที่ซิงค์กัน เช่น สตรีมที่ถ่ายจากกล้องและ อินพุตไมโครโฟนมีการซิงค์แทร็กวิดีโอและเสียง แต่ละแทร็ก แสดงโดย MediaStreamTrack (อย่าสับสนกับองค์ประกอบ <track>)

การเลิกใช้งาน MediaStream ใน Chrome 45 มี 3 รายการดังนี้

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

การดำเนินการแบบขนานกันคือ 2 ส่วนที่เพิ่มเข้ามา ดังนี้

  • MediaStream.active
  • MediaStreamTrack.stop()

ซึ่งต้องทำการเปลี่ยนแปลงต่อไปนี้

  • ใช้ MediaStream.active เพื่อตรวจสอบว่า MediaStream กำลังสตรีมอยู่หรือไม่ ไม่ใช่ MediaStream.ended
  • ใช้ MediaStreamTrack.stop() เพื่อหยุดสตรีม ไม่ใช่ MediaStream.stop()
  • หากต้องการใช้ตัวระบุที่ไม่ซ้ำกันสำหรับ MediaStream ให้ใช้ MediaStream.id แทน MediaStream.label MediaStreamTrack.label ระบุชื่อที่มนุษย์อ่านได้สำหรับอุปกรณ์ต้นทางสำหรับสตรีม เช่น กล้อง FaceTime HD (ในตัว) (05ac:8510)

คุณดูการใช้งานจริงได้: เปิด simpl.info/gum ใน Chrome (ในอุปกรณ์ที่มีกล้อง) และดูคอนโซลเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome มีการส่งออบเจ็กต์ MediaStream stream ไปยัง Callback getUserMedia() ใน เดโมอยู่ในขอบเขตทั้งหมด คุณจึงตรวจสอบได้จากคอนโซล โทร stream.getTracks()[0] เพื่อดู MediaStreamTrack สำหรับสตรีมนี้

ภาพหน้าจอแสดง MediaStream และ MediaStreamTrack ในคอนโซลเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

Stop(), สิ้นสุดแล้วและใช้งานอยู่

เมื่อคณะทำงาน W3C การจับภาพและสตรีมสื่อได้พิจารณาปัญหาของสิ่งที่เกิดขึ้นเมื่อคุณเพิ่มแทร็กใหม่ไปยัง MediaStream และว่า MediaStream ที่ว่างเปล่าสิ้นสุดลงหรือไม่ พวกเขาก็พบว่ายังมี ไม่มีวิธีที่สมเหตุสมผลในการใช้ ended ใน MediaStream (เนื่องจาก "จะไม่เริ่มต้นอีก") ในส่วนอื่นๆ ของ HTML5 "สิ้นสุดแล้ว" หมายความว่า "สถานการณ์นี้สิ้นสุดลงแล้วและจะ ไม่ต้องเล่นต่อ" "ใช้งานอยู่" ไม่มีผลกระทบใดๆ เช่น สตรีมที่ไม่ทำงานสามารถ กลับมาใช้งานอีกครั้ง เช่น มีการเพิ่มแทร็กใหม่ลงไป ทีมงานจึงตัดสินใจ แทนที่จะรักษาคุณลักษณะและฟังก์ชันที่ชวนสับสน นำออกไป

ต่อไปนี้คือตัวอย่างของวิธีใช้ "MediaStream.active" เพื่อตรวจสอบสถานะของ สตรีม:

var gumStream;

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            gumStream = stream;
        // ...
    },
    function(error) {
        console.log('getUserMedia() error', error);
    });

// …

if (gumStream.active) {
    // do something with the stream
}

การนำ stop() ออกจาก MediaStream ไม่ได้นำฟังก์ชันจริงใดๆ ออก: กระบวนการปลดอุปกรณ์ต้นทางออก และอื่นๆ อีกมากมาย ยังไงก็MediaStreamTrack ใช้ stop() ใน MediaStreamTrack แทน:

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            // can also use getAudioTracks() or getVideoTracks()
        var track = stream.getTracks()[0];  // if only one media track
        // ...
        track.stop();
    },
    function(error){
        console.log('getUserMedia() error', error);
    });

ป้ายกำกับ

แล้วก็พบว่าไม่มีใครทราบถึงการใช้คุณสมบัตินี้ได้เลย!

มีการเพิ่ม MediaStream.label ลงในข้อกำหนดเวอร์ชันแรกแล้ว แต่ไม่มีใครรู้จริงๆ ว่า label คืออะไร และยังไม่ชัดเจนว่าเกิดอะไรขึ้นกับ label เมื่อสตรีม ถูกส่งผ่าน RTCPeerConnection

คณะทำงาน W3C สอบถามไปทั่วและไม่มีใครต้องการ จึงนำกลุ่มดังกล่าวออก

กล่าวซ้ำคือ MediaStream.id มีตัวระบุที่ไม่ซ้ำกันสำหรับ MediaStream และ MediaStreamTrack.label ระบุชื่อของแหล่งที่มา ของสตรีม เช่น ประเภทกล้องหรือไมโครโฟน

ดูข้อมูลเพิ่มเติมเกี่ยวกับ MediaStream และ MediaStreamTrack ได้ จาก Mozilla Developer Network และ HTML5 Rocks มอบข้อมูลเบื้องต้นที่ยอดเยี่ยมเกี่ยวกับ getUserMedia() ใน การบันทึกเสียงและ วิดีโอ

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