قالب فایل ضبطشده در مرورگر را از روی نام دلخواه فایل تعیین نکنید. MediaRecorder در هر محیط ممکن است مجموعه متفاوتی از ظرفها و کدکها را پشتیبانی کند. ابتدا نوع قابل ضبط را بررسی کنید و پس از ساخت ضبطکننده، mimeType واقعی آن و داده خروجی را نیز کنترل کنید.
آزمون پشتیبانی پیش از روشنکردن میکروفن
const types = [
"audio/webm;codecs=opus",
"audio/ogg;codecs=opus",
"audio/mp4"
];
const supported = types.filter(type => MediaRecorder.isTypeSupported(type));
این کد تنها در محیطی اجرا شود که MediaRecorder و متد مربوط موجودند. فایل کامل بررسی قالب کنترل وجود API و نمایش نتیجه را هم دارد. این ابزار هیچ اجازه میکروفنی نمیخواهد؛ فقط پاسخ قابلیت همین مرورگر را نشان میدهد.
true چه معنایی دارد؟
طبق MDN، true یعنی پیادهسازی باید بتواند آن MIME را ضبط کند؛ کمبود منابع یا شرایط اجرا هنوز میتواند ضبط را ناموفق کند. از سوی دیگر false یعنی این گزینه را برای آن محیط انتخاب نکنید. فهرست ثابت سه گزینه نمونه، همه قالبهای ممکن و همه نسخههای مرورگر را پوشش نمیدهد.
نتیجه این ابزار را همراه نام و نسخه مرورگر و سیستم نگه دارید، نه به عنوان جدول دائمی سازگاری. تغییر نسخه مرورگر یا دستگاه میتواند نتیجه را عوض کند. هیچ مقدار true در این مقاله بهعنوان نتیجه آزمون واقعی مرورگر کاربر گزارش نشده است.
نوع انتخابی را با نوع واقعی تطبیق دهید
اگر پیشاپیش یک MediaStream مجاز دارید، گزینه را هنگام ساخت MediaRecorder بدهید و مقدار recorder.mimeType را بخوانید. اگر گزینهای تعیین نکنید، مرورگر میتواند نوع را انتخاب کند؛ برای همین پسوند WAV را بهصورت ثابت روی همه خروجیها نگذارید.
const recorder = new MediaRecorder(stream, {mimeType: chosenType});
console.log(recorder.mimeType);
// stream و chosenType باید از جریان مجاز و بررسی همین محیط آمده باشند.
این چند خط چرخه کامل ضبط نیست. برای خروجی واقعی، dataavailable، توقف، خطا، اندازه داده و بستن trackهای ورودی هم باید مدیریت شوند. Blob با نام تازه، کدک صوت را تبدیل نمیکند. اگر داده WebM است، ذخیره با نام recording.wav محتوای آن را WAV نمیسازد.
برای تحویل به گفتار به متن، سه پذیرش جدا داریم
| مرحله | پرسش |
|---|---|
| مرورگر | آیا این نوع را برای ضبط پشتیبانی میکند؟ |
| فایل واقعی | آیا خروجی غیرخالی، قابل پخش و دارای نوع مورد انتظار است؟ |
| سرویس مقصد | آیا این ظرف، کدک، مدت و حجم را میپذیرد؟ |
موفقیت یک مرحله جای دو مرحله دیگر را نمیگیرد. اگر هیچ گزینه سازگار ندارید، مسیر دریافت فایل موجود یا مرورگر پشتیبانیشده را بهصورت روشن به کاربر بدهید؛ خاموشکردن خطا و ساخت فایل با پسوند ساختگی راهحل نیست. تبدیل قالب در صورت نیاز باید پردازش واقعی و جداگانه باشد.
برای خطای قبل از ضبط، راهنمای مجوز میکروفن و برای تصمیم فایل، WAV، MP3 یا M4A را ببینید. اگر میخواهید صوت مرورگر را برای اپرانگار بفرستید، پذیرش ورودی واقعی را با تیم تعیین کنید؛ این آموزش endpoint یا ضبطکننده عمومی اپرا معرفی نمیکند.
منابع اصلی: isTypeSupported در MDN و ویژگی mimeType. نمونه قابلیتسنجی محلی از میکروفن استفاده نمیکند و آزمون کیفیت صوت نیست.