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 упрощает мультиплексирование элементарных потоков. В настоящее время 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

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
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 упрощает мультиплексирование элементарных потоков.

Применяется к