2016-07-12 3 views
0

Я использую API MediaRecorder для записи некоторых носителей на странице. В моей инициализации MediaRecorder я не указываю тип содержимого, поскольку я не требую ничего в частности. Браузер может выбрать то, что он хочет.Получение mimeType из MediaRecorder, который не был инициализирован с помощью mimeType

var mediaRecorder = new MediaRecorder(stream); 

Однако, когда приходит время, чтобы сохранить эту запись, мне нужно знать MIMETYPE для сгустка, и поэтому я могу определить разумное расширение имени файла.

MediaRecorder.mimeType proprety - это то, что я хочу, но это пустая строка. Он не устанавливает mimeType по умолчанию для MediaRecorder, поэтому я, похоже, не знаю, что такое по умолчанию mimeType.

mediaRecorder.onstop = function (e) { 
    var mediaFileUrl = window.URL.createObjectURL(
     new Blob(chunks, {type: /* TODO: mime type here */}) 
    ); 

    $('<a>').attr({ 
     href: mediaFileUrl, 
     download: 'Recording.?????' // TODO: Use mime type to figure out file name extension 
    })[0].click(); 

    window.URL.revokeObjectURL(mediaFileUrl); 
    chunks = []; 
    } 
+0

Что такое 'chunks'? – guest271314

+0

@ guest271314 Массив, содержащий сегменты кодированных носителей. – Brad

+0

Закодировано в каком формате? Является ли 'chunks'' ArrayBuffer'? Не могли бы вы предоставить пользователю возможность выбрать тип 'MIME' для записи до того, как начнется запись? Затем установите 'Blob'' type' в значение 'MIME', вместо того чтобы разрешить браузеру выбрать тип« MIME »; который, как представляется, устанавливает пустую строку? Вы также можете использовать 'isTypeSupported', чтобы определить, может ли браузер воспроизводить определенный тип медиа. – guest271314

ответ

1

В настоящее время не существует никакого способа, чтобы получить необходимую информацию из коробки.

В настоящее время спецификации W3C заявляет, что если MimeType не указан (вами):

БВС будет использовать формат конкретной платформы по умолчанию.

Вот что происходит в вашем случае, вы не уточняя какой-либо MimeType и UA, браузер выбирает наиболее подходящий тип для вас, и нет никаких указаний относительно способа получить выбранный формат обратно.

Прямо сейчас, единственный способ, который поможет вам приблизиться к этому, заключается в использовании isTypeSupported, который обеспечивает определенную поддержку средств массовой информации, к сожалению, с количеством мимистров, браузеров, платформ, ставок и т. Д., Он не очень подходит для написания функция, которая вернет тип mimetype, выбранный с количеством доступных комбинаций: video/webm; codecs="vp", video/mp4; codecs="avc1.4d4015" и т. д.

Первоначальная идея могла заключаться в том, чтобы скрыть все эти данные от пользователя, но в самом деле, ваш конкретный случай, когда пользователю необходимо знать тип mimetype, чтобы, например, сохранить сгенерированный файл, это очень часто.

В настоящее время открыто An issue с предложением предоставить способ получения всех поддерживаемых типов носителей, упорядоченных по слабым предпочтениям, что означает, что первый тип медиаданных будет по умолчанию выбранным UA, если не указан.

Вопрос был создан в мае, но фактического наблюдения на данный момент не было.

+0

Обновление: ошибка Chrome https://crbug.com/615940 проследила аналогичную проблему и была исправлена, поэтому созданные закодированные Blobs должны иметь корректный указатель 'mimeType'. – miguelao

0

Для аудио, по умолчанию, кажется audio/ogg, и для видео video/ogg. Протестировано в Chrome и Firefox с помощью VLC.

Demo: https://codecanister.com/Project/d547eed9/9/result

+0

Этого не гарантировано и может быть изменено в будущих версиях браузера. Кроме того, я обычно получаю webm, а не ogg. – Brad

+0

Хотя это правда, это единственный способ получить правильный мим. Единственный другой вариант - это обнюхать содержимое клиентской стороны, что не так просто – jlynch630

+0

Можете ли вы окончательно показать, что это невозможно в существующих API? (Короче, чем обнюхивает тип.) Я бы с радостью наградил щедрость тому, кто мог бы окончательно доказать, что это невозможно. – Brad

Смежные вопросы