Skip to content

[Google3 Bug]: Platform View stops rendering in Video_Player package #179667

@bharathmg-google

Description

@bharathmg-google

Help us understand the severity of this issue

  • causing severe production issues e.g. malfunctions or data loss
  • blocking next binary release
  • blocking a client feature launch within a quarter
  • nice-to-have but does not block a launch within the next quarter

Steps to reproduce

  1. Run the Minimal repro app with code sample below
  2. Press Go to Video
  3. Fully play the video
  4. Press back
  5. Do (2), (3), (4) again

Expected results

Home page with "Go to video" is rendered

Actual results

UI gets "stalled" and we can't interact with UI. This issue is NOT reproducible with Google3 HEAD ~10 days back

Code sample

Code sample
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Video Player Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const FirstPage(),
    );
  }
}

class FirstPage extends StatelessWidget {
  const FirstPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('First Page')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.of(
              context,
            ).push(MaterialPageRoute(builder: (context) => const SecondPage()));
          },
          child: const Text('Go to Video'),
        ),
      ),
    );
  }
}

class SecondPage extends StatefulWidget {
  const SecondPage({super.key});

  @override
  State<SecondPage> createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
  late VideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    _controller =
        VideoPlayerController.networkUrl(
            Uri.parse(
              'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4',
            ),
            viewType: VideoViewType.platformView,
          )
          ..initialize().then((_) {
            // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
            setState(() {});
            _controller.play();
          });
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Video Page')),
      body: Center(
        child: _controller.value.isInitialized
            ? AspectRatio(
                aspectRatio: _controller.value.aspectRatio,
                child: VideoPlayer(_controller),
              )
            : const CircularProgressIndicator(),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
FlutterView  E  Flutter engine view not set.
           CCodecConfig  D  c2 config diff is   c2::u32 raw.channel-mask.value = 12
          CCodecBuffers  D  [c2.android.aac.decoder#994:Output[N]] popFromStashAndRegister: at 1000000000000us, output format changed to AMessage(what = 0x00000000) = {
                         D    int32_t aac-drc-album-mode = 0
                         D    int32_t aac-drc-boost-level = 127
                         D    int32_t aac-drc-cut-level = 127
                         D    int32_t aac-drc-effect-type = 3
                         D    int32_t aac-drc-output-loudness = -1
                         D    int32_t aac-encoded-target-level = -1
                         D    int32_t aac-max-output-channel_count = 8
                         D    int32_t aac-target-ref-level = 64
                         D    int32_t channel-count = 2
                         D    int32_t channel-mask = 12
                         D    int32_t max-output-channel-count = 8
                         D    string mime = "audio/raw"
                         D    int32_t sample-rate = 48000
                         D    int32_t android._config-pcm-encoding = 2
                         D  }
           CCodecConfig  D  c2 config diff is   c2::u32 raw.crop.height = 720
                         D    c2::u32 raw.crop.left = 0
                         D    c2::u32 raw.crop.top = 0
                         D    c2::u32 raw.crop.width = 1280
            FlutterView  E  Flutter engine view not set.
                         E  Flutter engine view not set.
                         E  Flutter engine view not set.
                         E  Flutter engine view not set.
PlatformViewsController  I  Using hybrid composition for platform view: 1
            FlutterView  E  Flutter engine view not set.
                         E  Flutter engine view not set.
           SurfaceUtils  D  connecting to surface 0xb400007879ea0bc0, reason connectToSurface
             MediaCodec  I  [c2.exynos.h264.decoder] setting surface generation to 5538830
           SurfaceUtils  D  disconnecting from surface 0xb400007879ea0bc0, reason connectToSurface(reconnect)
                         D  connecting to surface 0xb400007879ea0bc0, reason connectToSurface(reconnect)
odec2-OutputBufferQueue  D  remote graphic buffer migration 9/9
           Codec2Client  D  setOutputSurface -- failed to set consumer usage (6/BAD_INDEX)
                         D  setOutputSurface -- generation=5538830 consumer usage=0x900
                         D  Surface configure completed
           SurfaceUtils  D  disconnecting from surface 0xb400007879e80cd0, reason disconnectFromSurface
             AudioTrack  D  getTimestamp_l(2594): device stall time corrected using current time 105752426749592
                         W  getTimestamp_l(2594): retrograde timestamp time corrected, 105752426262328 < 105752426749592

  BufferPoolAccessor2.0  D  bufferpool2 0xb4000077d9e92618 : 0(0 size) total buffers - 0(0 size) used buffers - 165/170 (recycle/alloc) - 5/165 (fetch/transfer)
                         D  evictor expired: 1, evicted: 1








                         D  bufferpool2 0xb4000077d9e15f08 : 0(0 size) total buffers - 0(0 size) used buffers - 105/110 (recycle/alloc) - 5/106 (fetch/transfer)
                         D  evictor expired: 1, evicted: 1




        PipelineWatcher  D  onInputBufferReleased: frameIndex not found (120); ignored
             AudioTrack  D  stop(2594): called with 193536 frames delivered
             MediaCodec  D  keep callback message for reclaim
           CCodecConfig  I  query failed after returning 15 values (BAD_INDEX)
           Codec2Client  W  query -- param skipped: index = 1073743886.
                         W  query -- param skipped: index = 1610614798.
             MediaCodec  D  keep callback message for reclaim
           CCodecConfig  I  query failed after returning 20 values (BAD_INDEX)
           Codec2Client  W  query -- param skipped: index = 1342179345.
                         W  query -- param skipped: index = 2415921170.
                         W  query -- param skipped: index = 1610614798.
           SurfaceUtils  D  connecting to surface 0xb400007879e8fb40, reason connectToSurface
             MediaCodec  I  [c2.exynos.h264.decoder] setting surface generation to 5538831
           SurfaceUtils  D  disconnecting from surface 0xb400007879e8fb40, reason connectToSurface(reconnect)
                         D  connecting to surface 0xb400007879e8fb40, reason connectToSurface(reconnect)
odec2-OutputBufferQueue  D  remote graphic buffer migration 0/0
           Codec2Client  D  setOutputSurface -- failed to set consumer usage (6/BAD_INDEX)
                         D  setOutputSurface -- generation=5538831 consumer usage=0x900
                         D  Surface configure completed
           SurfaceUtils  D  disconnecting from surface 0xb400007879ea0bc0, reason disconnectFromSurface
          ExoPlayerImpl  I  Release be48da5 [AndroidXMedia3/1.9.0-rc01] [panther, Pixel 7, Google, 33] [media3.common, media3.exoplayer, media3.decoder, media3.datasource, media3.extractor]
             MediaCodec  D  keep callback message for reclaim
           CCodecConfig  I  query failed after returning 15 values (BAD_INDEX)
           Codec2Client  W  query -- param skipped: index = 1073743886.
                         W  query -- param skipped: index = 1610614798.
             MediaCodec  D  keep callback message for reclaim
           CCodecConfig  I  query failed after returning 20 values (BAD_INDEX)
           Codec2Client  W  query -- param skipped: index = 1342179345.
                         W  query -- param skipped: index = 2415921170.
                         W  query -- param skipped: index = 1610614798.
           SurfaceUtils  D  connecting to surface 0xb400007879ea2dd0, reason connectToSurface
             MediaCodec  I  [c2.exynos.h264.decoder] setting surface generation to 5538832
           SurfaceUtils  D  disconnecting from surface 0xb400007879ea2dd0, reason connectToSurface(reconnect)
                         D  connecting to surface 0xb400007879ea2dd0, reason connectToSurface(reconnect)
odec2-OutputBufferQueue  D  remote graphic buffer migration 0/0
           Codec2Client  D  setOutputSurface -- failed to set consumer usage (6/BAD_INDEX)
                         D  setOutputSurface -- generation=5538832 consumer usage=0x900
                         D  Surface configure completed
           SurfaceUtils  D  disconnecting from surface 0xb400007879e8fb40, reason disconnectFromSurface
    CCodecBufferChannel  D  [c2.exynos.h264.decoder#454] MediaCodec discarded an unknown buffer
                         D  [c2.exynos.h264.decoder#454] MediaCodec discarded an unknown buffer
                         D  [c2.exynos.h264.decoder#454] MediaCodec discarded an unknown buffer
                         D  [c2.exynos.h264.decoder#454] MediaCodec discarded an unknown buffer
                         D  [c2.android.aac.decoder#994] MediaCodec discarded an unknown buffer
                         D  [c2.android.aac.decoder#994] MediaCodec discarded an unknown buffer
                         D  [c2.android.aac.decoder#994] MediaCodec discarded an unknown buffer
                         D  [c2.android.aac.decoder#994] MediaCodec discarded an unknown buffer
          hw-BpHwBinder  I  onLastStrongRef automatically unlinking death recipients
             MediaCodec  D  flushMediametrics
                         D  flushMediametrics
           SurfaceUtils  D  disconnecting from surface 0xb400007879ea2dd0, reason disconnectFromSurface
          hw-BpHwBinder  I  onLastStrongRef automatically unlinking death recipients
             MediaCodec  D  flushMediametrics
                         D  flushMediametrics
  BufferPoolAccessor2.0  D  bufferpool2 0xb4000077d9e682d8 : 0(0 size) total buffers - 0(0 size) used buffers - 200/205 (recycle/alloc) - 5/191 (fetch/transfer)
                         D  bufferpool2 0xb4000077d9e1de38 : 0(0 size) total buffers - 0

Flutter Doctor output

Google3 HEAD

Doctor output
[Paste your output here]

Metadata

Metadata

Assignees

Labels

a: videoVideo playbackc: parityWorks on one platform but not anotherc: regressionIt was better in the past than it is nowc: renderingUI glitches reported at the engine/skia or impeller rendering levelcustomer: googleVarious Google teamsengineflutter/engine related. See also e: labels.f: routesNavigator, Router, and related APIs.found in release: 3.40Found to occur in 3.40frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onp: video_playerThe Video Player pluginpackageflutter/packages repository. See also p: labels.platform-androidAndroid applications specificallyr: fixedIssue is closed as already fixed in a newer versionteam-androidOwned by Android platform team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions