MediaMuxer 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
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 檔案作為輸出。 它也支援 MP4 中的多任務處理 B 框架,因為 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>元數據追蹤</h4>
每個畫面元數據會攜帶與視訊或音訊相互關聯的資訊,以利脫機處理。 例如,來自感測器的陀螺訊號有助於在進行脫機處理時進行視訊防震。 只有在多任務處理至 MP4 容器格式時,才支援元數據追蹤。 新增元數據追蹤時,MIME 類型格式必須以前置詞 「application/」 (開頭,例如“application/gyro”) 。 元數據的格式是應用程式定義的。 元數據時間戳必須與視訊和音訊時間戳相同。 產生的 MP4 檔案會使用 ISOBMFF 規格第 12.3.2 節中定義的 TextMetaDataSampleEntry (,) 來發出元數據的 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 > td { text-align: center; 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/td></tr><><td○</td td td> Not supported</td><>/tr tr<><>td>><▧</td td 支援><><MP4/WebM/3GP</td/tr<>><td>⁕</td>< td><>僅限 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 18>><</th 19>><</th 20</<>>th 21/th 21><<>/th 22</><>th 23</<>>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><><●/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/tr><td>< align=“center”>多任務處理 B-Frames (雙向預測框架) </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<>></td align=“center”>多任務處理多個視訊/音訊播放軌</td td><>○</td><td>○</<>><td td○/<<>>td td○/td td○/<><>><<<><><><<>>>>td td○/td td○/td td○/td⁕</td/tr></tr/td>><< align=“center”>多任務處理元數據追蹤</td>><<○/td td○</><><td><> td○/><><td td○/<>>><<><>><<<<>>><><td td○/td td○/td td○/td td○/td td⁕/td></tr></tbody></table>
的 android.media.MediaMuxer
Java 檔。
此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。
建構函式
MediaMuxer(FileDescriptor, MuxerOutputType) |
建立寫入指定 FileDescriptor 的媒體多任務器。 |
MediaMuxer(String, MuxerOutputType) |
建立寫入指定路徑的媒體多任務器。 |
屬性
Class |
傳回這個 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
JniIdentityHashCode |
MediaMuxer 有助於多任務處理基本數據流。 (繼承來源 Object) |
JniPeerMembers |
MediaMuxer 有助於多任務處理基本數據流。 |
PeerReference |
MediaMuxer 有助於多任務處理基本數據流。 (繼承來源 Object) |
ThresholdClass |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式代碼使用。 (繼承來源 Object) |
ThresholdType |
此 API 支援 Mono for 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>notified</em> 或 <em>interrupted</em> 來喚醒。 (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是<透過em>notified</em或em>interrupted</em>>,或<直到經過一定數量的實時為止。 (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是<透過em>notified</em或em>interrupted</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 有助於多任務處理基本數據流。 |