หากคุณใช้งาน 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
ที่ส่งไปยังโค้ดเรียกกลับ getUserMedia()
ในการสาธิตนี้อยู่ในขอบเขตรวม คุณจึงตรวจสอบได้จากคอนโซล โทร stream.getTracks()[0]
เพื่อดู MediaStreamTrack
สำหรับสตรีมนี้
Stop() สิ้นสุดและทำงานอยู่
เมื่อคณะทำงาน W3C เกี่ยวกับการบันทึกและสตรีมสื่อตรวจสอบปัญหาของสิ่งที่เกิดขึ้นเมื่อคุณเพิ่มแทร็กใหม่ลงใน MediaStream
และหาก MediaStream
สิ้นสุดลง ก็พบว่ามีการใช้ ended
ใน MediaStream
อย่างสมเหตุสมผล (และ "จะไม่เริ่มต้นอีก") ในส่วนอื่นๆ ของ HTML5 คือ "ended" หมายถึง "สิ้นสุดไปแล้ว" และจะไม่กลับมาทำงานอีก "ใช้งานอยู่" จะไม่ส่งผลใดๆ ต่อไปเรื่อยๆ เช่น สตรีมที่ไม่ใช้งานจะกลับมาใช้งานได้อีกครั้ง เช่น เมื่อมีการเพิ่มแทร็กใหม่ลงในสตรีม คณะทำงานจึงตัดสินใจที่จะนำแอตทริบิวต์และฟังก์ชันที่ก่อให้เกิดความสับสนออกแทน
ต่อไปนี้คือตัวอย่างวิธีใช้ "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 และ HTML5 Rocks ก็สามารถแนะนำ getUserMedia()
เกี่ยวกับการบันทึกเสียงและวิดีโอได้อย่างดีเยี่ยม
และเช่นเคย เรายินดีรับฟังความคิดเห็นของคุณเกี่ยวกับการเปลี่ยนแปลงของ Chrome คุณติดตามข้อบกพร่องสำหรับการเลิกใช้งานเหล่านี้ได้ (ที่นี่และที่นี่) รวมถึงดูการสนทนาและรายละเอียดเพิ่มเติมได้ในหัวข้อความตั้งใจที่จะนำมาใช้