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