使用 flutter Chewie 和 video_player 来显示来自 YouTube 或任何其他来源的视频。 我收到此错误:“视频播放器出现错误 com.google.android.exoplayer2.exoplaybackException:源错误” 使用 咀嚼:1.4.0 视频播放器:2.6.1
错误:
Playback error
E/ExoPlayerImplInternal( 6412): com.google.android.exoplayer2.ExoPlaybackException: Source error
E/ExoPlayerImplInternal( 6412): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:644)
E/ExoPlayerImplInternal( 6412): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:614)
E/ExoPlayerImplInternal( 6412): at android.os.Handler.dispatchMessage(Handler.java:103)
E/ExoPlayerImplInternal( 6412): at android.os.Looper.loop(Looper.java:227)
E/ExoPlayerImplInternal( 6412): at android.os.HandlerThread.run(HandlerThread.java:67)
E/ExoPlayerImplInternal( 6412): Caused by: com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (FlvExtractor, FlacExtractor, WavExtractor, FragmentedMp4Extractor, Mp4Extractor, AmrExtractor, PsExtractor, OggExtractor, TsExtractor, MatroskaExtractor, AdtsExtractor, Ac3Extractor, Ac4Extractor, Mp3Extractor, AviExtractor, JpegExtractor) could read the stream.
E/ExoPlayerImplInternal( 6412): at com.google.android.exoplayer2.source.BundledExtractorsAdapter.init(BundledExtractorsAdapter.java:92)
E/ExoPlayerImplInternal( 6412): at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1017)
E/ExoPlayerImplInternal( 6412): at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:412)
E/ExoPlayerImplInternal( 6412): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/ExoPlayerImplInternal( 6412): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/ExoPlayerImplInternal( 6412): at java.lang.Thread.run(Thread.java:919)
E/flutter ( 6412): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(VideoError, Video player had error com.google.android.exoplayer2.ExoPlaybackException: Source error, null, null)
颤振代码:
import 'dart:developer';
import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:video_player/video_player.dart';
class VideoViewerWidget extends StatefulWidget {
const VideoViewerWidget({
super.key,
required this.videoUrl,
});
final String videoUrl;
@override
State<VideoViewerWidget> createState() => _VideoWidgetState();
}
class _VideoWidgetState extends State<VideoViewerWidget>
with AutomaticKeepAliveClientMixin {
VideoPlayerController? _videoPlayerController;
ChewieController? _chewieController;
@override
void initState() {
super.initState();
log("Video Url: ${widget.videoUrl}");
_videoPlayerController = VideoPlayerController.network(widget.videoUrl);
_videoPlayerController?.initialize();
_chewieController = ChewieController(
videoPlayerController: _videoPlayerController!,
aspectRatio: 16 / 9,
placeholder: const Center(
child: SizedBox(
height: 32,
width: 32,
child: CircularProgressIndicator(),
),
),
errorBuilder: (context, errorMessage) {
return Center(
child: Text(
errorMessage,
style: TextStyle(color: Colors.white),
),
);
},
allowedScreenSleep: false,
deviceOrientationsOnEnterFullScreen: [
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
],
);
}
@override
Widget build(BuildContext context) {
super.build(context);
return AspectRatio(
aspectRatio: 16 / 9,
child: Chewie(controller: _chewieController!),
);
}
@override
void dispose() {
super.dispose();
_videoPlayerController?.dispose();
_chewieController?.dispose();
}
@override
bool get wantKeepAlive => true;
}
尝试过:
<application
android:usesCleartextTraffic="true"
并尝试升级和降级软件包但没有任何反应。
视频播放器和chewie都不支持播放来自youtube的视频。检查chewie问题。
您可以使用这些包播放来自网络的视频,但它们必须具有有效的视频扩展名。您的代码与视频播放器描述页面上提供的示例视频链接配合良好。
要播放 YouTube 视频,请考虑使用其他软件包,例如 youtube_player_flutter。