Phi*_*ais 6 android video-streaming exoplayer2.x
我正在尝试流式传输 m3u8 文件,但出现错误。我使用的网址如下:http : //storage.googleapis.com/videos.siku.org/10005/dash/master.m3u8 这个流媒体视频在浏览器中可以正常工作。我在运行时收到以下错误:
ExoPlayerImplInternal:源错误。com.google.android.exoplayer2.source.UnrecognizedInputFormatException: 没有可用的提取器 (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsavrExtractor, WlacExtractor, PsavrExtractor, PsavrExtractor . 在 com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractorHolder.selectExtractor(ProgressiveMediaPeriod.java:1090) 在 com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:969) 在 com。 .android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 在 java.util。
我正在使用ExoPlayerHelper类(它取自 stackoverflow 问题,虽然我确实按照推荐的方式实现了这个,但我遇到了同样的错误)
这是我正在使用的课程:
class ExoPlayerHelper(
private val playerView: PlayerView,
onError: (ExoPlaybackException) -> Unit,
onPlayerBuffer: (Boolean) -> Unit
) {
private var exoPlayer: ExoPlayer? = null
private var mediaSource: ProgressiveMediaSource? = null
private val playerListener = object : Player.EventListener {
override fun onPlayerError(error: ExoPlaybackException) {
super.onPlayerError(error)
onError(error)
}
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
super.onPlayerStateChanged(playWhenReady, playbackState)
onPlayerBuffer(playbackState == Player.STATE_BUFFERING)
}
}
fun initializePlayer(url: String) {
exoPlayer = SimpleExoPlayer.Builder(playerView.context).build()
exoPlayer!!.repeatMode = Player.REPEAT_MODE_ALL
exoPlayer!!.addListener(playerListener)
playerView.player = exoPlayer
val userAgent =
Util.getUserAgent(playerView.context, playerView.context.getString(R.string.app_name))
mediaSource = ProgressiveMediaSource
.Factory(
DefaultDataSourceFactory(playerView.context, userAgent),
DefaultExtractorsFactory()
)
.createMediaSource(Uri.parse(url))
exoPlayer!!.prepare(mediaSource!!, true, false)
exoPlayer!!.playWhenReady = true
}
}
}
Run Code Online (Sandbox Code Playgroud)
我确实得到了一个空白的 com.google.android.exoplayer2.ui.PlayerView,其中出现了控件。按播放按钮时,我收到相同的错误消息:
com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.source.UnrecognizedInputFormatException: 没有可用的提取器 (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, FvggExtractor, FvggExtractor, TlvgExtractor AmrExtractor、Ac4Extractor、FlacExtractor)可以读取流。
关于为什么我收到此错误 UnrecognizedInputFormatException 的任何线索?
Gau*_*tam 16
Since you are trying to play m3u8 file, you need to create HLS media source. So just make this below change -
mediaSource =HlsMediaSource.Factory(DefaultHttpDataSourceFactory(userAgent))
.createMediaSource(uri)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5547 次 |
| 最近记录: |