اگر با 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]
را فراخوانی کنید.
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 بیابید .