MediaMuxer Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
MediaMuxer facilita secuencias elementales de muxación.
[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
- Herencia
- Atributos
Comentarios
MediaMuxer facilita secuencias elementales de muxación. Actualmente, MediaMuxer admite archivos MP4, Webm y 3GP como salida. También admite la muxación de fotogramas B en MP4 desde Android Nougat MR1.
Por lo general, se usa de la siguiente manera:
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>
Los metadatos por fotograma conllevan información que se correlaciona con el vídeo o el audio para facilitar el procesamiento sin conexión. Por ejemplo, las señales de giro del sensor pueden ayudar a la estabilización de vídeo al realizar el procesamiento sin conexión. Las pistas de metadatos solo se admiten cuando se multiplexa al formato de contenedor MP4. Al agregar una nueva pista de metadatos, el formato de tipo MIME debe comenzar con el prefijo "application/" (por ejemplo, "application/gyro"). El formato de los metadatos está definido por la aplicación. Las marcas de tiempo de metadatos deben estar en la misma base de tiempo que las marcas de tiempo de vídeo y audio. El archivo MP4 generado usa TextMetaDataSampleEntry (definido en la sección 12.3.3.2 de la especificación ISOBMFF) para indicar el tipo MIME de los metadatos.
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>
En la tabla siguiente se resume la compatibilidad de características en diferentes contenedores y versiones de API. Para ver los números de versión de la API, consulte 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<><Meaning>/th</tr><>/tbody/thead<>tbody<> class=sml<>tr<td><●></td td><>Supported</td></tr tr><><td>○</td td><>Not supported</td></tr tr><><td>▧</td td><>Compatible con MP4/WebM/3GP</td></tr tr><><td>⁕</td td Solo se admite en MP4></td>/tr<></tbody></table><align="center" style="width: 100%;"><><thead class=api><tr><th rowspan=2>Feature</th><colspan="24">SDK Version</th></tr tr><><th></th><>19</th><>20</ª ª><>21</><>ª ª 22</><>ª ª 23</ª><ª>ª 24</><>ª ª 25</><>ª 26+</ª></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 (fotogramas predichos bidireccionales)</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>
Java documentación para android.media.MediaMuxer.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.
Constructores
| Nombre | Description |
|---|---|
| MediaMuxer(FileDescriptor, MuxerOutputType) |
Crea un muxador multimedia que escribe en el fileDescriptor especificado. |
| MediaMuxer(String, MuxerOutputType) |
Crea un muxer multimedia que escribe en la ruta de acceso especificada. |
Propiedades
| Nombre | Description |
|---|---|
| Class |
Devuelve la clase en tiempo de ejecución de este |
| Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
| JniIdentityHashCode |
Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad. (Heredado de Object) |
| JniManagedPeerState |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| JniPeerMembers |
MediaMuxer facilita secuencias elementales de muxación. |
| PeerReference |
Obtiene la referencia de objeto JNI para este Java del mismo nivel. (Heredado de Object) |
| ThresholdClass |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. (Heredado de Object) |
| ThresholdType |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. (Heredado de Object) |
Métodos
| Nombre | Description |
|---|---|
| AddTrack(MediaFormat) |
Agrega una pista con el formato especificado. |
| Clone() |
Crea y devuelve una copia de este objeto. (Heredado de Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| Dispose() |
Libera los recursos mantenidos por este Java del mismo nivel. (Heredado de Object) |
| Dispose(Boolean) |
Libera los recursos mantenidos por este Java del mismo nivel. (Heredado de Object) |
| DisposeUnlessReferenced() |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| Equals(Object) |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
| GetHashCode() |
Devuelve un valor de código hash del objeto. (Heredado de Object) |
| JavaFinalize() |
Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto . (Heredado de Object) |
| Notify() |
Activa un único subproceso que está esperando en el monitor de este objeto. (Heredado de Object) |
| NotifyAll() |
Activa todos los subprocesos que están esperando en el monitor de este objeto. (Heredado de Object) |
| Release() |
Asegúrese de llamar a esto cuando haya terminado de liberar los recursos en lugar de confiar en que el recolector de elementos no utilizados lo haga en algún momento en el futuro. |
| SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
| SetLocation(Single, Single) |
Establezca y almacene los datos geográficos (latitud y longitud) en el archivo de salida. |
| SetOrientationHint(Int32) |
Establece la sugerencia de orientación para la reproducción de vídeo de salida. |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| Start() |
Inicia el muxer. |
| Stop() |
Detiene el muxer. |
| ToArray<T>() |
Crea una matriz administrada a partir de este contenedor de matriz Java. (Heredado de Object) |
| ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
| UnregisterFromRuntime() |
Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad. (Heredado de Object) |
| Wait() |
Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><> (Heredado de Object) |
| Wait(Int64, Int32) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
| Wait(Int64) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
| WriteSampleData(Int32, ByteBuffer, MediaCodec+BufferInfo) |
Escribe un ejemplo codificado en el muxer. |
Implementaciones de interfaz explícitas
| Nombre | Description |
|---|---|
| IJavaPeerable.Disposed() |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| IJavaPeerable.Finalized() |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
MediaMuxer facilita secuencias elementales de muxación. (Heredado de JavaObject) |
Métodos de extensión
| Nombre | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtiene el nombre JNI del tipo de la instancia |
| JavaAs<TResult>(IJavaPeerable) |
Intente coerción |
| JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
| JavaCast<TResult>(IJavaObject) |
MediaMuxer facilita secuencias elementales de muxación. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Intente coerción |