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

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

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

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

  • 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 Camera (Built-in) (05ac:8510)

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

ภาพหน้าจอแสดง MediaStream และ MediaStreamTrack ในคอนโซล Chrome DevTools

Stop(), ended และ active

เมื่อกลุ่มทำงานของ 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 เช่นเคย คุณติดตามข้อบกพร่องเกี่ยวกับการเลิกใช้งานเหล่านี้ได้ (ที่นี่และที่นี่) และดูการพูดคุยและรายละเอียดเพิ่มเติมได้ในความตั้งใจที่จะติดตั้งใช้งาน