You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter用chewie和video_player播视频遇ExoPlaybackException源错误

解决ExoPlayer UnrecognizedInputFormatException 播放视频失败问题

核心原因分析

这个错误本质是ExoPlayer无法识别当前视频流的编码格式或容器格式,常见触发场景:

  • YouTube视频使用网页URL而非直接媒体流地址(video_player/chewie不支持解析YouTube网页链接,仅能播放直接的媒体资源)
  • 视频流采用ExoPlayer默认未兼容的编码(如小众编码、加密流)
  • 视频链接返回的Content-Type响应头错误,导致提取器无法识别格式

针对性解决方案

1. 处理YouTube视频:获取直接媒体流地址

video_player和chewie本身不支持解析YouTube网页链接,必须获取视频的直接媒体流URL(如.mp4、.m3u8格式地址)。可通过第三方包提取:
示例代码:

import 'package:youtube_explode_dart/youtube_explode_dart.dart';

Future<String> getYoutubeStreamUrl(String videoId) async {
  final yt = YoutubeExplode();
  final manifest = await yt.videos.streamsClient.getManifest(videoId);
  // 选择最高码率的混合流(包含音视频)
  final streamInfo = manifest.muxed.withHighestBitrate();
  return streamInfo.url.toString();
}

注意:使用时需确保符合YouTube服务条款。

2. 检查其他来源视频的格式与响应头

  • 确认视频流为ExoPlayer支持的格式:MP4、HLS(.m3u8)、DASH(.mpd)、WebM等,避免AVI、RMVB这类小众格式
  • 验证视频服务器返回的Content-Type头是否正确:MP4对应video/mp4,HLS对应application/vnd.apple.mpegurl,错误的响应头会导致提取器识别失败
  • 若为加密视频(如DRM保护),需自定义ExoPlayer实例配置DRM支持,video_player默认不处理DRM逻辑

3. 扩展ExoPlayer格式支持(Android端)

在android/app/build.gradle中添加ExoPlayer扩展库,兼容更多编码格式:

dependencies {
  // 匹配video_player 2.6.1依赖的ExoPlayer版本(2.18.1)
  implementation 'com.google.android.exoplayer:exoplayer-core:2.18.1'
  implementation 'com.google.android.exoplayer:exoplayer-hls:2.18.1'
  implementation 'com.google.android.exoplayer:exoplayer-dash:2.18.1'
  implementation 'com.google.android.exoplayer:exoplayer-extractor:2.18.1'
}

4. 调试视频流信息

打印视频链接的响应头,确认流的实际格式:

import 'package:http/http.dart' as http;

Future<void> debugVideoStream(String url) async {
  final response = await http.head(Uri.parse(url));
  print('Content-Type: ${response.headers['content-type']}');
  print('Content-Length: ${response.headers['content-length']}');
}

错误日志排查要点

从错误栈UnrecognizedInputFormatException可明确:

com.google.android.exoplayer2.exoplaybackexception: Source error
Caused by: UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor, AmrExtractor, JpegExtractor) could read the stream.

说明当前流格式不在ExoPlayer默认支持列表中,优先排查视频链接是否为直接媒体流,而非网页跳转链接。

内容的提问来源于stack exchange,提问作者Adel N. Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:25:05