Share via


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 檔案作為輸出。 它也支援 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.MediaMuxerJava 檔。

此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。

建構函式

MediaMuxer(FileDescriptor, MuxerOutputType)

建立寫入指定 FileDescriptor 的媒體多任務器。

MediaMuxer(String, MuxerOutputType)

建立寫入指定路徑的媒體多任務器。

屬性

Class

傳回這個 Object的運行時間類別。

(繼承來源 Object)
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 有助於多任務處理基本數據流。

適用於