MediaParser 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
解析包含媒體樣本與元資料的媒體容器格式與擷取。
[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
- 繼承
- 屬性
備註
解析包含媒體樣本與元資料的媒體容器格式與擷取。
此類別提供一系列低階媒體容器解析器。 此類別的每個實例都對應於特定的媒體解析器實作,適合從特定媒體容器格式擷取。 媒體解析器的實作指派取決於用於建立實例的工廠方法(參見 #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;
@Override
public void onSeekMapFound(int i, @NonNull MediaFormat mediaFormat) {
// Do nothing.
}
@Override
public void onTrackDataFound(int i, @NonNull TrackData trackData) {
MediaFormat mediaFormat = trackData.mediaFormat;
if (videoTrackIndex == -1 &&
mediaFormat
.getString(MediaFormat.KEY_MIME, /* defaultValue= */ "")
.startsWith("video/")) {
videoTrackIndex = i;
}
}
@Override
public void onSampleDataFound(int trackIndex, @NonNull InputReader inputReader)
throws IOException {
int numberOfBytesToRead = (int) inputReader.getLength();
if (videoTrackIndex != trackIndex) {
// Discard contents.
inputReader.read(
discardedDataBuffer,
/* offset= */ 0,
Math.min(discardDataBuffer.length, numberOfBytesToRead));
} else {
ensureSpaceInBuffer(numberOfBytesToRead);
int bytesRead = inputReader.read(
sampleDataBuffer, bytesWrittenCount, numberOfBytesToRead);
bytesWrittenCount += bytesRead;
}
}
@Override
public void onSampleCompleted(
int trackIndex,
long timeMicros,
int flags,
int size,
int offset,
@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,
/* destPos= */ 0,
size);
// Place trailing bytes at the start of the buffer.
System.arraycopy(
sampleDataBuffer,
bytesWrittenCount - offset,
sampleDataBuffer,
/* destPos= */ 0,
/* size= */ offset);
bytesWrittenCount = bytesWrittenCount - offset;
publishSample(sampleData, timeMicros, flags);
}
private void ensureSpaceInBuffer(int numberOfBytesToRead) {
int requiredLength = bytesWrittenCount + numberOfBytesToRead;
if (requiredLength > 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 |
當尚未選擇解析器時,解析 |
| ParserNameWav |
用於 WAV 容器格式的解析器,依據多媒體程式介面與資料規範所定義。 |
| SampleFlagDecodeOnly |
已淘汰.
表示樣本應該解碼但不渲染。 |
| SampleFlagEncrypted |
已淘汰.
表示樣本(至少部分)被加密。 |
| SampleFlagHasSupplementalData |
已淘汰.
表示樣本有補充資料。 |
| SampleFlagKeyFrame |
已淘汰.
表示該樣本包含同步樣本。 |
| SampleFlagLastSample |
已淘汰.
表示該樣本已知含有該串流的最後一個介質樣本。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| 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[]) |
建立一個實例,其支持解析器會在第一次 |
| CreateByName(String, MediaParser+IOutputConsumer) |
建立一個由解析器支持的實例,給定 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
解析包含媒體樣本與元資料的媒體容器格式與擷取。 (繼承來源 JavaObject) |
| Equals(Object) |
解析包含媒體樣本與元資料的媒體容器格式與擷取。 (繼承來源 JavaObject) |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| GetParserNames(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) |
回傳給定 |
| 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) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
解析包含媒體樣本與元資料的媒體容器格式與擷取。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |