語言

MediaParser 類別

定義

解析包含媒體樣本與元資料的媒體容器格式與擷取。

[Android.Runtime.Register("android/media/MediaParser", ApiSince=30, DoNotGenerateAcw=true)]
public sealed class MediaParser : Java.Lang.Object
[<Android.Runtime.Register("android/media/MediaParser", ApiSince=30, DoNotGenerateAcw=true)>]
type MediaParser = class
    inherit Object
繼承
MediaParser
屬性

備註

解析包含媒體樣本與元資料的媒體容器格式與擷取。

此類別提供一系列低階媒體容器解析器。 此類別的每個實例都對應於特定的媒體解析器實作,適合從特定媒體容器格式擷取。 媒體解析器的實作指派取決於用於建立實例的工廠方法(參見 #create 和 #createByName)。

使用者必須實作以下條件才能使用此類別。

<ul><li>InputReader:提供媒體容器的位元組以供解析。 <LI>OutputConsumer:提供所有擷取資料和元資料的匯流。 </ul>

以下程式碼片段包含一個使用範例:

MyOutputConsumer myOutputConsumer = new MyOutputConsumer();
            MyInputReader myInputReader = new MyInputReader("www.example.com");
            MediaParser mediaParser = MediaParser.create(myOutputConsumer);

            while (mediaParser.advance(myInputReader)) {}

            mediaParser.release();
            mediaParser = null;

以下程式碼片段提供一個簡易 OutputConsumer 的範例實作,可擷取並發布所有影片範例:

class VideoOutputConsumer implements MediaParser.OutputConsumer {

                private byte[] sampleDataBuffer = new byte[4096];
                private byte[] discardedDataBuffer = new byte[4096];
                private int videoTrackIndex = -1;
                private int bytesWrittenCount = 0;

                &#64;Override
                public void onSeekMapFound(int i, &#64;NonNull MediaFormat mediaFormat) {
                  // Do nothing.
                }

                &#64;Override
                public void onTrackDataFound(int i, &#64;NonNull TrackData trackData) {
                  MediaFormat mediaFormat = trackData.mediaFormat;
                  if (videoTrackIndex == -1 &amp;&amp;
                      mediaFormat
                          .getString(MediaFormat.KEY_MIME, &#47;* defaultValue= *&#47; "")
                          .startsWith("video/")) {
                    videoTrackIndex = i;
                  }
                }

                &#64;Override
                public void onSampleDataFound(int trackIndex, &#64;NonNull InputReader inputReader)
                    throws IOException {
                  int numberOfBytesToRead = (int) inputReader.getLength();
                  if (videoTrackIndex != trackIndex) {
                    // Discard contents.
                    inputReader.read(
                        discardedDataBuffer,
                        &#47;* offset= *&#47; 0,
                        Math.min(discardDataBuffer.length, numberOfBytesToRead));
                  } else {
                    ensureSpaceInBuffer(numberOfBytesToRead);
                    int bytesRead = inputReader.read(
                        sampleDataBuffer, bytesWrittenCount, numberOfBytesToRead);
                    bytesWrittenCount += bytesRead;
                  }
                }

                &#64;Override
                public void onSampleCompleted(
                    int trackIndex,
                    long timeMicros,
                    int flags,
                    int size,
                    int offset,
                    &#64;Nullable CryptoInfo cryptoData) {
                  if (videoTrackIndex != trackIndex) {
                    return; // It's not the video track. Ignore.
                  }
                  byte[] sampleData = new byte[size];
                  int sampleStartOffset = bytesWrittenCount - size - offset;
                  System.arraycopy(
                      sampleDataBuffer,
                      sampleStartOffset,
                      sampleData,
                      &#47;* destPos= *&#47; 0,
                      size);
                  // Place trailing bytes at the start of the buffer.
                  System.arraycopy(
                      sampleDataBuffer,
                      bytesWrittenCount - offset,
                      sampleDataBuffer,
                      &#47;* destPos= *&#47; 0,
                      &#47;* size= *&#47; offset);
                  bytesWrittenCount = bytesWrittenCount - offset;
                  publishSample(sampleData, timeMicros, flags);
                }

               private void ensureSpaceInBuffer(int numberOfBytesToRead) {
                 int requiredLength = bytesWrittenCount + numberOfBytesToRead;
                 if (requiredLength &gt; sampleDataBuffer.length) {
                   sampleDataBuffer = Arrays.copyOf(sampleDataBuffer, requiredLength);
                 }
               }

              }

Java 文件 android.media.MediaParser。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

欄位

名稱 Description
ParameterAdtsEnableCbrSeeking

設定是否應啟用恆定位元率尋址以進行 ADTS 解析。

ParameterAmrEnableCbrSeeking

設定是否應啟用恆定位元率尋址(FAST-BITRATE SECIEN)。

ParameterFlacDisableId3

設定是否應該停用 FLAC 的 ID3 軌道。

ParameterMatroskaDisableCuesSeeking

設定 Matroska 解析是否應避免尋找線索元素。

ParameterMp3DisableId3

設定 MP3 是否應該停用 ID3 音軌。

ParameterMp3EnableCbrSeeking

設定是否應啟用 MP3 的恆定位元率尋址。

ParameterMp3EnableIndexSeeking

設定 MP3 解析是否應該產生時間到位元組映射。

ParameterMp4IgnoreEditLists

設定 MP4 解析是否應該忽略編輯清單。

ParameterMp4IgnoreTfdtBox

設定 MP4 解析是否應該忽略 tfdt 盒子。

ParameterMp4TreatVideoFramesAsKeyframes

設定 MP4 解析是否應該將所有影片影格視為關鍵影格。

ParameterTsAllowNonIdrAvcKeyframes

設定 TS 是否應將非 IDR I 切片的樣本視為同步樣本(關鍵影格)。

ParameterTsDetectAccessUnits

設定 TS 解析是否應根據切片標頭將 AVC 串流分割成存取單元。

ParameterTsEnableHdmvDtsAudioStreams

設定 TS 解析是否應該處理 HDMV DTS 音訊串流。

ParameterTsIgnoreAacStream

設定 TS 解析是否應忽略 AAC 基本串流。

ParameterTsIgnoreAvcStream

設定 TS 解析是否應忽略 AVC 基本串流。

ParameterTsIgnoreSpliceInfoStream

設定 TS 解析是否應忽略剪接資訊流。

ParameterTsMode

設定 TS 解析的操作模式。

ParserNameAc3

AC-3 容器格式的解析器,依據數位音訊壓縮標準(AC-3)所定義。

ParserNameAc4

AC-4 容器格式的解析器,依據 Dolby AC-4:下一代娛樂服務音訊傳輸所定義。

ParserNameAdts

ADTS 容器格式的解析器,依據 ISO/IEC 13818-7 定義。

ParserNameAmr

用於 AMR 容器格式的解析器,依據 RFC 4867 定義。

ParserNameFlac

針對 FLAC 容器格式的解析器,符合 規範定義。

ParserNameFlv

針對 FLV 容器格式的解析器,依據 Adobe Flash 影片檔案格式規範所定義。

ParserNameFmp4

使用 MP4 容器格式的碎片檔案解析器,依據 ISO/IEC 14496-12 定義。

ParserNameMatroska

針對 Matroska 容器格式的解析器,如 規範所定義。

ParserNameMp3

根據 ISO/IEC 11172-3 定義的 MP3 容器格式解析器。

ParserNameMp4

使用 MP4 容器格式(依 ISO/IEC 14496-12 定義)處理非碎片檔案的解析器。

ParserNameOgg

根據 RFC 3533 定義的 OGG 容器格式解析器。

ParserNamePs

根據 ISO/IEC 11172-1 定義的 PS 容器格式解析器。

ParserNameTs

TS 容器格式的解析器,依據 ISO/IEC 13818-1 定義。

ParserNameUnknown

當尚未選擇解析器時,解析 #getParserName() 器名稱會回傳。

ParserNameWav

用於 WAV 容器格式的解析器,依據多媒體程式介面與資料規範所定義。

SampleFlagDecodeOnly
已淘汰.

表示樣本應該解碼但不渲染。

SampleFlagEncrypted
已淘汰.

表示樣本(至少部分)被加密。

SampleFlagHasSupplementalData
已淘汰.

表示樣本有補充資料。

SampleFlagKeyFrame
已淘汰.

表示該樣本包含同步樣本。

SampleFlagLastSample
已淘汰.

表示該樣本已知含有該串流的最後一個介質樣本。

屬性

名稱 Description
Class

回傳此 Object的執行時類別。

(繼承來源 Object)
Handle

底層 Android 實例的帳號。

(繼承來源 Object)
JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
JniPeerMembers

解析包含媒體樣本與元資料的媒體容器格式與擷取。

LogSessionId

解析包含媒體樣本與元資料的媒體容器格式與擷取。

ParserName

回傳支持解析器實作的名稱。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
ThresholdClass

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

(繼承來源 Object)
ThresholdType

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

(繼承來源 Object)

方法

名稱 Description
Advance(MediaParser+ISeekableInputReader)

在擷取輸入媒體串流時會取得進展,除非已到達輸入的終點。

Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
Create(MediaParser+IOutputConsumer, String[])

建立一個實例,其支持解析器會在第一次 #advance 呼叫時透過嗅聞內容來選擇。

CreateByName(String, MediaParser+IOutputConsumer)

建立一個由解析器支持的實例,給定 name的 。

Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
Equals(Object)

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetParserNames(MediaFormat)

回傳一個不可變的清單,包含適用於容器格式且具有 MediaFormat的解析器名稱。

JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
Release()

釋放所有已取得的資源。

Seek(MediaParser+SeekPoint)

在被萃取的媒介容器內尋找。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetParameter(String, Object)

設定解析器專用參數,允許自訂行為。

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
SupportsParameter(String)

回傳給定 parameterName 是否由此解析器支持。

ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToString()

回傳物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

(繼承來源 Object)
Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)

明確介面實作

名稱 Description
IJavaPeerable.Disposed()

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

解析包含媒體樣本與元資料的媒體容器格式與擷取。

(繼承來源 JavaObject)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

解析包含媒體樣本與元資料的媒體容器格式與擷取。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於