إيقاف MediaStream نهائيًا

إذا كنت تعمل باستخدام getUserMedia() أو WebRTC، قد تحتاج إلى تعديل الرمز البرمجي لإصدار Chrome 45 والإصدارات الأحدث.

تمثّل MediaStream API عمليات بث الوسائط المتزامنة. على سبيل المثال، يتضمّن البث المباشر الذي يتم تسجيله من الكاميرا ومدخل الميكروفون مقاطع صوت وفيديو متزامنة. يتم تمثيل كل مقطع صوتي باستخدام MediaStreamTrack. (يجب عدم الخلط بينه وبين عنصر<track>)

هناك ثلاث MediaStream ميزات سيتم إيقافها نهائيًا في الإصدار 45 من Chrome:

  • 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 (مدمجة) (05ac:8510).

يمكنك الاطّلاع على هذه الميزات أثناء استخدامها: افتح simpl.info/gum في Chrome (على جهاز مزوّد بكاميرا) واطّلِع على وحدة تحكّم أدوات مطوّري البرامج في Chrome. إنّ stream عنصر MediaStream الذي تم تمريره إلى دالة الاستدعاء getUserMedia() في هذا الdemo يقع في النطاق العام، لذا يمكنك فحصه من وحدة التحكّم. يُرجى الاتصال برقم stream.getTracks()[0] للاطّلاع على MediaStreamTrack لهذا البث.

لقطة شاشة تعرض MediaStream وMediaStreamTrack في وحدة تحكّم &quot;أدوات مطوّري البرامج في Chrome&quot;

Stop() وended وactive

عندما نظرت مجموعة العمل Media Capture and Streams في 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. يمكنك متابعة الأخطاء المتعلّقة بإيقاف هذه الميزات نهائيًا (هنا وهنا) والعثور على مزيد من المناقشات والتفاصيل في Intent to Implement.