Flutter:使用 Chewie 和 video_player 包时“视频播放器出现错误 com.google.android.exoplayer2.exoplaybackException:源错误”

问题描述 投票:0回答:1

使用 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"

并尝试升级和降级软件包但没有任何反应。

android flutter dart video-player
1个回答
0
投票

视频播放器chewie都不支持播放来自youtube的视频。检查chewie问题

您可以使用这些包播放来自网络的视频,但它们必须具有有效的视频扩展名。您的代码与视频播放器描述页面上提供的示例视频链接配合良好。

要播放 YouTube 视频,请考虑使用其他软件包,例如 youtube_player_flutter

© www.soinside.com 2019 - 2024. All rights reserved.