[video_player] Add Android decoder fallback option#11954
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
There was a problem hiding this comment.
Code Review
This pull request adds support for enabling ExoPlayer's decoder fallback on Android by introducing VideoPlayerAndroidOptions.enableDecoderFallback across the video_player, video_player_platform_interface, and video_player_android packages. The feedback suggests extracting the identical createExoPlayer methods in PlatformViewVideoPlayer and TextureVideoPlayer into a shared utility class to reduce code duplication.
| public static ExoPlayer createExoPlayer( | ||
| @NonNull Context context, | ||
| @NonNull VideoAsset asset, | ||
| @NonNull VideoPlayerOptions options, | ||
| @NonNull DefaultRenderersFactory renderersFactory) { | ||
| androidx.media3.exoplayer.trackselection.DefaultTrackSelector trackSelector = | ||
| new androidx.media3.exoplayer.trackselection.DefaultTrackSelector(context); | ||
| renderersFactory.setEnableDecoderFallback(options.enableDecoderFallback); | ||
| ExoPlayer.Builder builder = | ||
| new ExoPlayer.Builder(context, renderersFactory) | ||
| .setTrackSelector(trackSelector) | ||
| .setMediaSourceFactory(asset.getMediaSourceFactory(context)); | ||
| return builder.build(); | ||
| } |
There was a problem hiding this comment.
| public static ExoPlayer createExoPlayer( | ||
| @NonNull Context context, | ||
| @NonNull VideoAsset asset, | ||
| @NonNull VideoPlayerOptions options, | ||
| @NonNull DefaultRenderersFactory renderersFactory) { | ||
| androidx.media3.exoplayer.trackselection.DefaultTrackSelector trackSelector = | ||
| new androidx.media3.exoplayer.trackselection.DefaultTrackSelector(context); | ||
| renderersFactory.setEnableDecoderFallback(options.enableDecoderFallback); | ||
| ExoPlayer.Builder builder = | ||
| new ExoPlayer.Builder(context, renderersFactory) | ||
| .setTrackSelector(trackSelector) | ||
| .setMediaSourceFactory(asset.getMediaSourceFactory(context)); | ||
| return builder.build(); | ||
| } |
There was a problem hiding this comment.
Summary
VideoPlayerAndroidOptions.enableDecoderFallbackand forward it throughVideoCreationOptionsDefaultRenderersFactory.setEnableDecoderFallbackTests
flutter testinpackages/video_player/video_player_platform_interfacedart run script/tool/bin/flutter_plugin_tools.dart format --packages video_player,video_player_platform_interface,video_player_android(Java/Kotlin formatted; exits becauseclang-formatis unavailable locally)dart run script/tool/bin/flutter_plugin_tools.dart analyze --packages video_player,video_player_platform_interface,video_player_android(blocked forvideo_playerby unpublished localvideo_player_platform_interface ^6.8.0; blocked forvideo_player_androidby local Dart 3.10.7 vs package^3.12.0; platform_interface analyzed cleanly)dart run script/tool/bin/flutter_plugin_tools.dart dart-test --packages video_player,video_player_platform_interface,video_player_android(same two local dependency/SDK blockers; platform_interface and other runnable federated tests passed)