منسوخ شدن MediaStream

اگر با getUserMedia() یا WebRTC کار می‌کنید، ممکن است لازم باشد کد خود را برای Chrome 45 و جدیدتر تنظیم کنید.

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.label از MediaStream.id استفاده کنید. MediaStreamTrack.label یک نام قابل خواندن توسط انسان برای دستگاه منبع برای یک جریان ارائه می‌کند، به عنوان مثال ، FaceTime HD Camera (داخلی) (05ac:8510) .

می‌توانید این موارد را در عمل ببینید: simpl.info/gum را در Chrome (در دستگاهی با دوربین) باز کنید و کنسول Chrome DevTools را مشاهده کنید. stream شی MediaStream ارسال شده به فراخوانی getUserMedia() در این نسخه نمایشی در محدوده جهانی است، بنابراین می توانید آن را از کنسول بررسی کنید. برای مشاهده MediaStreamTrack برای این جریان stream.getTracks()[0] را فراخوانی کنید.

تصویری که MediaStream و MediaStreamTrack را در کنسول Chrome DevTools نشان می‌دهد

Stop()، پایان یافت و فعال

هنگامی که گروه کاری W3C Media Capture and Streams به این مشکل نگاه کردند که وقتی آهنگ‌های جدید را به 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 از شبکه توسعه‌دهنده موزیلا در دسترس است و HTML5 Rocks مقدمه‌ای عالی برای getUserMedia() در ضبط صدا و تصویر ارائه می‌کند.

مثل همیشه، از بازخورد شما در مورد تغییرات Chrome قدردانی می کنیم. می توانید اشکالات مربوط به این انکارها را دنبال کنید ( اینجا و اینجا ) و بحث و جزئیات بیشتر را در Intent to Implement بیابید .