Condividi tramite


MediaMuxer Classe

Definizione

MediaMuxer facilita il muxing dei flussi elementari.

[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
Ereditarietà
MediaMuxer
Attributi

Commenti

MediaMuxer facilita il muxing dei flussi elementari. Attualmente MediaMuxer supporta MP4, Webm e file 3GP come output. Supporta anche il muxing B-frame in MP4 da Android Nougat.

In genere viene usato come segue:

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 Metadata Track</h4>>

I metadati per frame contengono informazioni correlate a video o audio per facilitare l'elaborazione offline. Ad esempio, i segnali gyro dal sensore possono aiutare la stabilizzazione video durante l'elaborazione offline. Le tracce dei metadati sono supportate solo quando si esegue il multiplexing nel formato del contenitore MP4. Quando si aggiunge una nuova traccia dei metadati, il formato di tipo MIME deve iniziare con il prefisso "application/" (ad esempio "application/gyro"). Il formato dei metadati è definito dall'applicazione. I timestamp dei metadati devono trovarsi nello stesso tempo di base dei timestamp video e audio. Il file MP4 generato usa TextMetaDataSampleEntry (definito nella sezione 12.3.3.2 della specifica ISOBMFF) per segnalare il tipo MIME dei metadati.

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>

La tabella seguente riepiloga il supporto della funzionalità in diverse versioni e contenitori dell'API. Per i numeri di versione dell'API, vedere 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; riempimento: 2px 4px; } .fn { text-align: center; }</Stile>

<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 Non supportato</><>><><<><>td/tr><>>><< td▧/td Supportato in< MP4/WebM/3GP</td/tr>>< td⁕</td><td>supportato solo in MP4</td><><></tr<>/tbody<>/table<>align="center" style="width: 100%;"><classe thead class=api><tr<>th rowspan=2>Feature</><th colspan="24">SDK Version</<>th/tr>><<>th th 18</th th 19</><>><th>20>><</th 21</><>th 22<><>/th 23/th 24><<>/th 24<<>>/th 25</<>>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/tr><td align="center">WebM container>>>><><>><><><<<<><><<></td○/td○/td○/td td●/td●/td●/td●●<>>>><<><><<<<>/td td●/td/trd ><><td align="center">3GP container><></td○><<><>><><<>/td○/td○○><><<>><>>>>><<<<><<<<> /td○/td○/td○/td○/td td●/td/tr><td align="center">Muxing B-Frame(fotogrammi stimati bidirezionali)<>></td○<>><>><><<<<>><>><<> /td○/td○/td td○/td td○○>>><><<<>><><<< /td⁕/td⁕/td td⁕/td/trd><>< align=" center">Muxing Single Video/Audio Track<><<><><>><>><>><<<><<<>><>>/td td▧/td▧/td▧/td td▧/td▧/td▧▧>>><<<<<<<>>> /td▧/td td▧/td/tr><td align="center">Muxing Multiple Video/Audio Track</><>td○>>><><>>><<<>><<<><</td td○/td○/td td○/td○○><>><<<<>><><<>/td○/td○/td td⁕/td/tr<>>< td align="center">Muxing Metadata Track</><>td○<><>/td○><><<<<<><>>><>> /td○/td td○/td○○>>><><<<>><><<< /td○/td○/td td⁕/td/tr<>/tbody></table>

Documentazione Java per android.media.MediaMuxer.

Le parti di questa pagina sono modifiche in base al lavoro creato e condiviso dal Android Open Source e usato in base ai termini descritti nella .

Costruttori

MediaMuxer(FileDescriptor, MuxerOutputType)

Crea un muxer multimediale che scrive nel fileDescriptor specificato.

MediaMuxer(String, MuxerOutputType)

Crea un muxer multimediale che scrive nel percorso specificato.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle all'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
JniPeerMembers

MediaMuxer facilita il muxing dei flussi elementari.

PeerReference

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)
ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)

Metodi

AddTrack(MediaFormat)

Aggiunge una traccia con il formato specificato.

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Dispose()

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
Dispose(Boolean)

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
JavaFinalize()

Chiamato dal Garbage Collector in un oggetto quando Garbage Collection determina che non sono presenti più riferimenti all'oggetto.

(Ereditato da Object)
Notify()

Riattiva un singolo thread in attesa del monitoraggio dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitoraggio dell'oggetto.

(Ereditato da Object)
Release()

Assicurarsi di chiamare questa operazione quando si fa per liberare qualsiasi risorsa invece di basarsi sul Garbage Collector per eseguire questa operazione in un certo momento in futuro.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
SetLocation(Single, Single)

Impostare e archiviare i geodata (latitudine e longitudine) nel file di output.

SetOrientationHint(Int32)

Imposta l'hint di orientamento per la riproduzione video di output.

Start()

Avvia il muxer.

Stop()

Arresta il muxer.

ToArray<T>()

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
Wait()

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere eseguendo>una notifica</em o <em interrotto</>em>>.<

(Ereditato da Object)
Wait(Int64)

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale.

(Ereditato da Object)
WriteSampleData(Int32, ByteBuffer, MediaCodec+BufferInfo)

Scrive un esempio codificato nel muxer.

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
IJavaPeerable.Finalized()

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

MediaMuxer facilita il muxing dei flussi elementari.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione dei tipi controllati dal runtime Android.

JavaCast<TResult>(IJavaObject)

MediaMuxer facilita il muxing dei flussi elementari.

GetJniTypeName(IJavaPeerable)

MediaMuxer facilita il muxing dei flussi elementari.

Si applica a