إذا كنت تعمل مع getUserMedia()
أو WebRTC، قد تحتاج إلى تعديل الرمز الخاص بك
في الإصدار 45 من Chrome والإصدارات الأحدث.
تمثّل MediaStream API مجموعات بث متزامنة للوسائط. على سبيل المثال، يتضمن البث المأخوذ من إدخال الكاميرا والميكروفون مقاطع فيديو وصوت متزامنة. ويتم تمثيل كل مقطع صوتي MediaStreamTrack. (يجب عدم الخلط بينه وبين العنصر<track>.)
هناك ثلاثة عمليات إيقاف MediaStream
نهائيًا في Chrome 45:
MediaStream.ended
MediaStream.label
MediaStream.stop()
بالتوازي هناك إضافتان:
MediaStream.active
MediaStreamTrack.stop()
وتتطلّب هذه التغييرات إجراء التغييرات التالية:
- يمكنك استخدام
MediaStream.active
للتحقق مما إذا كان هناك بثMediaStream
وليسMediaStream.ended
. - استخدِم
MediaStreamTrack.stop()
لإيقاف البث، وليسMediaStream.stop()
. - إذا كنت بحاجة إلى معرّف فريد لـ
MediaStream
، استخدِمMediaStream.id
بدلاً منMediaStream.label
. يوفّرMediaStreamTrack.label
اسمًا يمكن للإنسان قراءته لجهاز المصدر للبث، مثلاً FaceTime HD Camera (مدمَجة) (05ac:8510).
يمكنك الاطّلاع على هذه الخطوات عمليًا: افتح simpl.info/gum في
Chrome (على جهاز مزوّد بكاميرا) واطّلِع على وحدة تحكّم "أدوات مطوري البرامج في Chrome". يقع عنصر MediaStream stream
الذي تم تمريره إلى معاودة الاتصال getUserMedia()
في هذا العرض التوضيحي في النطاق العالمي، لذا يمكنك فحصه من وحدة التحكّم. يمكنك الاتصال بالرقم
stream.getTracks()[0]
لعرض MediaStreamTrack
لهذا البث.
Stop() ، منتهية ونشطة
عندما نظرت مجموعة عمل W3C في Media التقاط والبث إلى المشكلة التي تحدث عند إضافة مقاطع صوتية جديدة إلى 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);
});
label
اتضح أنه لا يمكن لأحد اكتشاف استخدام لهذه العقار!
تمت إضافة "MediaStream.label
" إلى النسخة الأولى من المواصفات، ولكن لم يكن هناك أحد على علم
بالغرض من label
. وكان من الواضح أيضًا ما حدث لـ "label
" عندما تم إرسال بث عبر RTCPeerConnection
.
طرحت مجموعة العمل W3C هذا السؤال، ولم يرغب أحد في الحصول عليه، لذلك أزاله.
نؤكّد على ذلك: توفّر السمة MediaStream.id
معرّفًا فريدًا للسمة MediaStream
، فيما تشمل السمة MediaStreamTrack.label
اسم مصدر البث، مثل نوع الكاميرا أو الميكروفون.
يمكنك الحصول على مزيد من المعلومات حول MediaStream
وMediaStreamTrack
من خلال شبكة مطوّري برامج Mozilla، ويقدّم HTML5 Rocks مقدمة ممتازة عن getUserMedia()
في التقاط الصوت والفيديو.
وكما هي الحال دائمًا، نقدّر ملاحظاتك بشأن التغييرات التي تطرأ على Chrome. يمكنك متابعة الأخطاء المرتبطة بعمليات الإيقاف هذه (هنا وهنا) والعثور على مزيد من النقاشات والتفاصيل في مقالة هدف التنفيذ.