MediaMuxer Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
MediaMuxer facilita il multiplexing 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à
- Attributi
Commenti
MediaMuxer facilita il multiplexing dei flussi elementari. Attualmente MediaMuxer supporta MP4, Webm e 3GP come output. Supporta anche il multiplexing dei fotogrammi B in MP4 da Android Nougat MR1.
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 del 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 di metadati, il formato del 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 nella stessa base temporale 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 delle 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; padding: 2px 4px; } .fn { text-align: center; }</style>
<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 tr><><td>○</td td><>Non supportato</td></tr tr><><td>▧</td td><>supportato in MP4/WebM/3GP</td></tr td><><>⁕</td td Supportato solo in MP4></td>/tr<></tbody></table 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><>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><>●</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></tr><td align="center">Muxing B-Frames (fotogrammi stimati bidirezionali)</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>⁕</td td><>⁕</td></tr></tr><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 align="center">Muxing Multiple Video/Audio Tracks</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>⁕</td></tr></tr><td align="center">Muxing Metadata Tracks</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>○</td td><>⁕</td></tr></tbody></table>
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.
Costruttori
| Nome | Descrizione |
|---|---|
| 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à
| Nome | Descrizione |
|---|---|
| Class |
Restituisce la classe di runtime di questo |
| Handle |
Handle per l'istanza di Android sottostante. (Ereditato da Object) |
| JniIdentityHashCode |
Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| JniManagedPeerState |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| JniPeerMembers |
MediaMuxer facilita il multiplexing dei flussi elementari. |
| PeerReference |
Ottiene il riferimento all'oggetto JNI per questo peer Java. (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
| Nome | Descrizione |
|---|---|
| AddTrack(MediaFormat) |
Aggiunge una traccia con il formato specificato. |
| Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| Dispose() |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| Dispose(Boolean) |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| DisposeUnlessReferenced() |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| Equals(Object) |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
| GetHashCode() |
Restituisce un valore di codice hash per l'oggetto . (Ereditato da Object) |
| JavaFinalize() |
Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto . (Ereditato da Object) |
| Notify() |
Riattiva un singolo thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| NotifyAll() |
Riattiva tutti i thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| Release() |
Assicurarsi di chiamare questa operazione al termine per liberare tutte le risorse invece di affidarsi al Garbage Collector per eseguire questa operazione in un determinato momento in futuro. |
| SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
| SetLocation(Single, Single) |
Impostare e archiviare i dati geografici (latitudine e longitudine) nel file di output. |
| SetOrientationHint(Int32) |
Imposta l'hint di orientamento per la riproduzione video di output. |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| Start() |
Avvia il muxer. |
| Stop() |
Arresta il muxer. |
| ToArray<T>() |
Crea una matrice gestita da questo wrapper di matrice Java. (Ereditato da Object) |
| ToString() |
Restituisce una rappresentazione di stringa dell'oggetto . (Ereditato da Object) |
| UnregisterFromRuntime() |
Annulla la registrazione di questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| Wait() |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>. (Ereditato da Object) |
| Wait(Int64, Int32) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
| Wait(Int64) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> 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
| Nome | Descrizione |
|---|---|
| IJavaPeerable.Disposed() |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| IJavaPeerable.Finalized() |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
MediaMuxer facilita il multiplexing dei flussi elementari. (Ereditato da JavaObject) |
Metodi di estensione
| Nome | Descrizione |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ottiene il nome JNI del tipo dell'istanza |
| JavaAs<TResult>(IJavaPeerable) |
Provare a digitare |
| JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
| JavaCast<TResult>(IJavaObject) |
MediaMuxer facilita il multiplexing dei flussi elementari. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Provare a digitare |