MediaMuxer Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
MediaMuxer упрощает мультиплексирование элементарных потоков.
[Android.Runtime.Register("android/media/MediaMuxer", DoNotGenerateAcw=true)]
public sealed class MediaMuxer : Java.Lang.Object
[<Android.Runtime.Register("android/media/MediaMuxer", DoNotGenerateAcw=true)>]
type MediaMuxer = class
inherit Object
- Наследование
- Атрибуты
Комментарии
MediaMuxer упрощает мультиплексирование элементарных потоков. В настоящее время MediaMuxer поддерживает MP4, Webm и 3GP-файл в качестве выходных данных. Он также поддерживает мультиплексирование B-кадров в MP4 начиная с Android Nougat.
Обычно он используется следующим образом:
MediaMuxer muxer = new MediaMuxer("temp.mp4", OutputFormat.MUXER_OUTPUT_MPEG_4);
// More often, the MediaFormat will be retrieved from MediaCodec.getOutputFormat()
// or MediaExtractor.getTrackFormat().
MediaFormat audioFormat = new MediaFormat(...);
MediaFormat videoFormat = new MediaFormat(...);
int audioTrackIndex = muxer.addTrack(audioFormat);
int videoTrackIndex = muxer.addTrack(videoFormat);
ByteBuffer inputBuffer = ByteBuffer.allocate(bufferSize);
boolean finished = false;
BufferInfo bufferInfo = new BufferInfo();
muxer.start();
while(!finished) {
// getInputBuffer() will fill the inputBuffer with one frame of encoded
// sample from either MediaCodec or MediaExtractor, set isAudioSample to
// true when the sample is audio data, set up all the fields of bufferInfo,
// and return true if there are no more samples.
finished = getInputBuffer(inputBuffer, isAudioSample, bufferInfo);
if (!finished) {
int currentTrackIndex = isAudioSample ? audioTrackIndex : videoTrackIndex;
muxer.writeSampleData(currentTrackIndex, inputBuffer, bufferInfo);
}
};
muxer.stop();
muxer.release();
<h4>Метаданные Track</h4>
Метаданные для каждого кадра содержат сведения, которые коррелируют с видео или звуком для упрощения обработки в автономном режиме. Например, сигналы гирока от датчика могут помочь в стабилизации видео при автономной обработке. Дорожки метаданных поддерживаются только при мультиплексии в формат контейнера MP4. При добавлении новой дорожки метаданных формат типа MIME должен начинаться с префикса "application/" (например, "application/gyro"). Формат метаданных определяется приложением. Метки времени метаданных должны находиться в той же базе времени, что и метки времени видео и аудио. Созданный MP4-файл использует TextMetaDataSampleEntry (определенный в разделе 12.3.3.2 спецификации ISOBMFF) для передачи данных о типе MIME метаданных.
MediaMuxer muxer = new MediaMuxer("temp.mp4", OutputFormat.MUXER_OUTPUT_MPEG_4);
// SetUp Video/Audio Tracks.
MediaFormat audioFormat = new MediaFormat(...);
MediaFormat videoFormat = new MediaFormat(...);
int audioTrackIndex = muxer.addTrack(audioFormat);
int videoTrackIndex = muxer.addTrack(videoFormat);
// Setup Metadata Track
MediaFormat metadataFormat = new MediaFormat(...);
metadataFormat.setString(KEY_MIME, "application/gyro");
int metadataTrackIndex = muxer.addTrack(metadataFormat);
muxer.start();
while(..) {
// Allocate bytebuffer and write gyro data(x,y,z) into it.
ByteBuffer metaData = ByteBuffer.allocate(bufferSize);
metaData.putFloat(x);
metaData.putFloat(y);
metaData.putFloat(z);
BufferInfo metaInfo = new BufferInfo();
// Associate this metadata with the video frame by setting
// the same timestamp as the video frame.
metaInfo.presentationTimeUs = currentVideoTrackTimeUs;
metaInfo.offset = 0;
metaInfo.flags = 0;
metaInfo.size = bufferSize;
muxer.writeSampleData(metadataTrackIndex, metaData, metaInfo);
};
muxer.stop();
muxer.release();
}
<h2 id=History>"History">Features and API History</h2>
В следующей таблице приведены сведения о поддержке функций в разных версиях API и контейнерах. Номера версий API см. в разделе android.os.Build.VERSION_CODES
.
<style> .api > tr > th, .api > tr > td { text-align: center; padding: 4px 4px; } .api > tr > th { vertical-align: bottom; } .api > tr > td { vertical-align: middle; } .sml > tr > th, .sml > tr > td { text-align: center; padding: 2px 4px; } .fn { text-align: center; }</Стиль>
<table align="right" style="width: 0%">thead<>tbody class=api><tr><th>Symbol</th><th>Meaning</th></tr<>/tbody></thead><tbody class=sml<>tr><td>●</td><td>Supported</td></tr<>><td>○</td><td>Не поддерживается</td></tr><<>td>▧</td><td>Поддерживается в< MP4/WebM/3GP/td/tr<>tr><td>⁕</td><td>Only Supported in MP4</td></tr<>/tbody></table<>align="center" style="width: 100%;"<>><<thead class=api><tr><th rowspan=2>Feature</th><th colspan="24">SDK Version</th<>/tr<>th<>>18</th><>th 19</th th>><20</th><>21</th><>22</th>><th 23</th<>>24</th><>th 25</th<>th>26+</th></tr></thead><tbody class=api<>tr><td align="center">MP4 container</td<>td>●</td<>td>●</td><td>●</td<>td>●</td<>td>●</td><td>●</td<>td>●</td><td>●</td><td td><●/td></tr><td align="center">WebM container</td><td>○</td<>td>○</td<>td>○</td><td>●</td<>td>●</td<>td>●</td><td>●</td<>td>●</td><td>●</td></tr><td align="center">3GP container</td<>td>○</td<>td td>○</td><td>○</td><td>○</td><td>○</td<>td>○</td<>td>○</td<>td>○</td><td>●</td<>/tr><td align="center">Мультиплексирование B-кадров (двунаправленные прогнозируемые кадры)</td<>td>○</td<>td>○</td><td>○</td<>td>○</td<>td>○</td<>td>○</td<>td>⁕</td<>td>⁕</td<>td>⁕</td<>/tr><>< td td align=" center">Muxing Single Video/Audio Track</td><td>▧</td<>td>▧</td><td><▧/td<>td>▧</td<>td>▧</td><td>▧</td<>td>▧</td<>td>▧</td<>td>▧</td></tr<>/tr><td td align="center">Мультиплексирование нескольких видео/звуковых дорожек</td<>td>○</td<>td>○</td<>td>○</td<>td>○</td><td>○</td><td>○</td<>td>○</td<>td>○</td><td>⁕</td<>/tr<>>< td align="center">Мультиплексирование метаданных Tracks</td><td>○</td<>td>○</td><td>○</td<>td>○</td><td>○</td<>td>○</td<>td>○</td><td>○</td><td>⁕</td<>/tr<>/tbody></table>
Документация по Java для android.media.MediaMuxer
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.
Конструкторы
MediaMuxer(FileDescriptor, MuxerOutputType) |
Создает мультиплексор мультимедиа, который выполняет запись в указанный дескриптор FileDescriptor. |
MediaMuxer(String, MuxerOutputType) |
Создает мультимедийный мультимедийник, который записывает данные по указанному пути. |
Свойства
Class |
Возвращает класс среды выполнения данного объекта |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
JniIdentityHashCode |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
JniPeerMembers |
MediaMuxer упрощает мультиплексирование элементарных потоков. |
PeerReference |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
Методы
AddTrack(MediaFormat) |
Добавляет дорожку в указанном формате. |
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
Dispose() |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
Dispose(Boolean) |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
Equals(Object) |
Указывает, равен ли какой-то другой объект этому объекту. (Унаследовано от Object) |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
JavaFinalize() |
Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект . (Унаследовано от Object) |
Notify() |
Пробуждение одного потока, ожидающего на мониторе этого объекта. (Унаследовано от Object) |
NotifyAll() |
Активирует все потоки, ожидающие на мониторе этого объекта. (Унаследовано от Object) |
Release() |
Убедитесь, что вы вызываете это, когда закончите, чтобы освободить ресурсы, а не полагаться на сборщик мусора, чтобы сделать это за вас в какой-то момент в будущем. |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
SetLocation(Single, Single) |
Задайте и сохраните геоданные (широту и долготу) в выходном файле. |
SetOrientationHint(Int32) |
Задает указание ориентации для воспроизведения выходного видео. |
Start() |
Запускает мультиплексер. |
Stop() |
Останавливает мультиплексер. |
ToArray<T>() |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
UnregisterFromRuntime() |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
Wait() |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>. (Унаследовано от Object) |
Wait(Int64) |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени. (Унаследовано от Object) |
WriteSampleData(Int32, ByteBuffer, MediaCodec+BufferInfo) |
Записывает закодированный пример в мультиплексер. |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
IJavaPeerable.DisposeUnlessReferenced() |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
IJavaPeerable.Finalized() |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
IJavaPeerable.JniManagedPeerState |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
MediaMuxer упрощает мультиплексирование элементарных потоков. (Унаследовано от Object) |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверенное средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
MediaMuxer упрощает мультиплексирование элементарных потоков. |
GetJniTypeName(IJavaPeerable) |
MediaMuxer упрощает мультиплексирование элементарных потоков. |