安卓手機APP開發(fā)__媒體開發(fā)部分__媒體項
目錄
概述
簡單媒體項
處理非標準的文件擴展名
受保護的內(nèi)容
邊播邊加載的字幕軌道
剪切一個媒體流
加廣告
概述
基于媒體項的實例的播放列表API,能夠很方便地使用MediaItem.Builder
來構(gòu)建。 在播放器內(nèi)部,一個播放項能被媒體源工廠轉(zhuǎn)換成一個可以播放的
媒體源。沒有定制化的配置,這個轉(zhuǎn)化由一個默認的媒體源工廠來執(zhí)行,它能
構(gòu)建一個復(fù)雜的媒體源,這個源對應(yīng)著媒體項的屬性。一些在媒體項的屬性
在下面列出來了。
簡單媒體項
一個媒體項包括了一個流URI,構(gòu)建如下:
Kotlin文章來源:http://www.zghlxwxcb.cn/news/detail-856481.html
val mediaItem = MediaItem.fromUri(videoUri)
對于其它的情況,能使用一個MediaItem.Builder。在如下的例子中,
一個媒體項能用一個編號和一些附加的元數(shù)據(jù)來構(gòu)建:
Kotlin
val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()
當播放列表的切換發(fā)生時,附加的元數(shù)據(jù)能在更新你的APP的用戶界面時很有用。
處理非標準的文件擴展名
ExoPlayer提供了可適配的媒體源,包括了DASH,HLS,光滑流的情況。如果
這樣的可適配的媒體項的URI以一個標準的文件擴展名結(jié)束,相應(yīng)的媒體源被
自動地創(chuàng)建。如果媒體項的URI有一個非標準的擴展名,或者是沒有擴展名,
那么MIME的類型能夠被顯式地顯示為媒體項的類型:
Kotlin
val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()
對于先進的媒體流,一個MIME類型是不需要有的。
受保護的內(nèi)容
對于受保護的內(nèi)容,媒體項的數(shù)據(jù)版權(quán)管理的屬性應(yīng)該被設(shè)置:
Kotlin
val mediaItem =
MediaItem.Builder()
.setUri(videoUri)
.setDrmConfiguration(
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri(licenseUri)
.setMultiSession(true)
.setLicenseRequestHeaders(httpRequestHeaders)
.build()
)
.build()
這個例子構(gòu)造了一個寬藤(估計是一個商標)受保護的內(nèi)容的媒體項。
在播放器內(nèi),DefaultMediaSourceFactory傳遞了一些屬性給DrmSessionManagerProvider,
這樣就得到了DrmSessionManager,然后這個管理器被注入到已創(chuàng)建的媒體源。
數(shù)字版權(quán)管理行為能夠根據(jù)你的需求,被進一步地定制。
邊播邊加載的字幕軌道
對邊播邊加載的字幕軌道,當構(gòu)建一個媒體項時,媒體項的字幕實例能被加上:
Kotlin
val subtitle =
SubtitleConfiguration.Builder(subtitleUri)
.setMimeType(mimeType) // The correct MIME type (required).
.setLanguage(language) // The subtitle language (optional).
.setSelectionFlags(selectionFlags) // Selection flags for the track (optional).
.build()
val mediaItem =MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()
從內(nèi)部看,DefaultMediaSourceFactory將使用MergingMediaSource來組合內(nèi)容媒體源。
DefaultMediaSourceFactory不支持多個DASH的邊播邊加載字幕的功能。
剪切一個媒體流
為了剪切一個媒體項優(yōu)先的內(nèi)容,設(shè)置定制的開始和結(jié)束位置:
Kotlin
val mediaItem =
MediaItem.Builder()
.setUri(videoUri)
.setClippingConfiguration(
MediaItem.ClippingConfiguration.Builder()
.setStartPositionMs(startPositionMs)
.setEndPositionMs(endPositionMs)
.build()
)
.build()
內(nèi)部地看,DefaultMediaSourceFactory使用ClippingMediaSource來打包內(nèi)容媒體源。
這有附加的剪切屬性。
加廣告
為了加廣告,一個媒體項的廣告標簽的URI屬性應(yīng)該設(shè)置成:
Kotlin
val mediaItem =
MediaItem.Builder()
.setUri(videoUri)
.setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())
從內(nèi)部看,DefaultMediaSourceFactory將打包內(nèi)容媒體源到廣告媒體源,來插入廣告。
為了做到這一點,播放器也需要有它自己的相應(yīng)的DefaultMediaSourceFactory的配置。文章來源地址http://www.zghlxwxcb.cn/news/detail-856481.html
到了這里,關(guān)于安卓手機APP開發(fā)__媒體開發(fā)部分__媒體項的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!