-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Closed
flutter/packages
#7827Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work listfound in release: 3.24Found to occur in 3.24Found to occur in 3.24found in release: 3.26Found to occur in 3.26Found to occur in 3.26has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onp: video_playerThe Video Player pluginThe Video Player pluginpackageflutter/packages repository. See also p: labels.flutter/packages repository. See also p: labels.platform-androidAndroid applications specificallyAndroid applications specificallyr: fixedIssue is closed as already fixed in a newer versionIssue is closed as already fixed in a newer versionteam-androidOwned by Android platform teamOwned by Android platform team
Description
Steps to reproduce
- Run the sample code
- See the video playing
- Move to the last tab
- See some StackTraces already crashing because the player is disposed such as
Failed to call Surface.setFrameRate E/VideoFrameReleaseHelper( 2081): java.lang.IllegalStateException: Surface has already been released. - Put the app in inactive state
- See the native Stack Trace with the error 100% occurring
Expected results
This issue describes more than 1 problem with the video_player on Android.
- If you dispose the player while the video is playing, there is a native crash :
E/VideoFrameReleaseHelper( 2081): java.lang.IllegalStateException: Surface has already been released.
- If you put your phone in active state (calling probably the
OnPause()of native Android, it throws aHandler (android.os.Handler) {c81f627} sending message to a Handler on a dead thread
To sum up, the expected results are to not see native crashes when disposing the player, in other words : if you dispose the player, then no native code should continue to be executed that leads to these errors.
Actual results
You can see this crash result :
W/MessageQueue( 325): Handler (android.os.Handler) {c81f627} sending message to a Handler on a dead thread
W/MessageQueue( 325): java.lang.IllegalStateException: Handler (android.os.Handler) {c81f627} sending message to a Handler on a dead thread
W/MessageQueue( 325): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:567)
W/MessageQueue( 325): at android.os.Handler.enqueueMessage(Handler.java:778)
W/MessageQueue( 325): at android.os.Handler.sendMessageAtTime(Handler.java:727)
W/MessageQueue( 325): at android.os.Handler.sendMessageDelayed(Handler.java:697)
W/MessageQueue( 325): at android.os.Handler.sendMessage(Handler.java:635)
W/MessageQueue( 325): at android.os.Message.sendToTarget(Message.java:469)
W/MessageQueue( 325): at androidx.media3.common.util.SystemHandlerWrapper$SystemMessage.sendToTarget(SystemHandlerWrapper.java:160)
W/MessageQueue( 325): at androidx.media3.exoplayer.ExoPlayerImplInternal.stop(ExoPlayerImplInternal.java:388)
W/MessageQueue( 325): at androidx.media3.exoplayer.ExoPlayerImpl.stopInternal(ExoPlayerImpl.java:1919)
W/MessageQueue( 325): at androidx.media3.exoplayer.ExoPlayerImpl.stop(ExoPlayerImpl.java:1035)
W/MessageQueue( 325): at io.flutter.plugins.videoplayer.VideoPlayer.onSurfaceDestroyed(VideoPlayer.java:100)
W/MessageQueue( 325): at io.flutter.embedding.engine.renderer.FlutterRenderer$ImageReaderSurfaceProducer.onTrimMemory(FlutterRenderer.java:690)
W/MessageQueue( 325): at io.flutter.embedding.engine.renderer.FlutterRenderer.onTrimMemory(FlutterRenderer.java:295)
W/MessageQueue( 325): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onStop(FlutterActivityAndFragmentDelegate.java:653)
W/MessageQueue( 325): at io.flutter.embedding.android.FlutterActivity.onStop(FlutterActivity.java:850)
W/MessageQueue( 325): at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1476)
W/MessageQueue( 325): at android.app.Activity.performStop(Activity.java:8298)
W/MessageQueue( 325): at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:4915)
W/MessageQueue( 325): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4894)
W/MessageQueue( 325): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4968)
W/MessageQueue( 325): at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:40)
W/MessageQueue( 325): at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
W/MessageQueue( 325): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
W/MessageQueue( 325): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2115)
W/MessageQueue( 325): at android.os.Handler.dispatchMessage(Handler.java:106)
W/MessageQueue( 325): at android.os.Looper.loop(Looper.java:250)
W/MessageQueue( 325): at android.app.ActivityThread.main(ActivityThread.java:7755)
W/MessageQueue( 325): at java.lang.reflect.Method.invoke(Native Method)
W/MessageQueue( 325): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
W/MessageQueue( 325): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
I/ExoPlayerImpl( 325): Release ed2fc6f [AndroidXMedia3/1.4.1] [sofiar, moto g(8) power, motorola, 30] [media3.common, media3.exoplayer, media3.decoder, media3.datasource, media3.extractor]
This is actually problematic because some other native code seems to not be executed because the OnStop is crashing, even if the app is not crashing at all this is not only a warning it has an impact on my apps unfortunately.
Code sample
Code sample
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const TestApp());
}
class TestApp extends StatefulWidget {
const TestApp({super.key});
@override
State<TestApp> createState() => _TestAppState();
}
class _TestAppState extends State<TestApp> {
List<Widget> pages = [
const VideoPlayerPage(),
const SecondTestPage(),
const SecondTestPage(),
const SecondTestPage()
];
int _currentIndex = 0;
// This function is called when a tab is tapped
void _onTabTapped(int index) {
setState(() {
_currentIndex = index;
});
print("Selected Tab: $index");
// Here you can add any additional actions based on the selected index
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
resizeToAvoidBottomInset: false,
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex, // This will highlight the selected tab
onTap: _onTabTapped, // ValueChanged callback with the tapped index
type: BottomNavigationBarType.fixed, // For more than 3 tabs
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: '1',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: '2',
),
BottomNavigationBarItem(
icon: Icon(Icons.notifications),
label: '3',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: '4',
),
],
),
body: Stack(
children: [
pages[_currentIndex],
],
),
),
);
}
}
class VideoPlayerPage extends StatefulWidget {
const VideoPlayerPage({super.key});
@override
State<VideoPlayerPage> createState() => _VideoPlayerPageState();
}
class _VideoPlayerPageState extends State<VideoPlayerPage> {
final VideoPlayerController _controller = VideoPlayerController.networkUrl(
Uri.parse(
"https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4"));
@override
void initState() {
_controller.initialize().then((v) {
_controller.setLooping(true);
_controller.play();
});
super.initState();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return VideoPlayer(_controller);
}
}
class SecondTestPage extends StatelessWidget {
const SecondTestPage({super.key});
@override
Widget build(BuildContext context) {
return const Placeholder();
}
}
Screenshots or Video
Screenshots / Video demonstration
[Upload media here]
Logs
Logs
I/MediaCodec( 2081): (0xb400006fd4ed0260) flush
E/BufferQueueProducer( 2081): [ImageReader-1x1f22m5-2081-1](id:82100000001,api:3,p:2081,c:2081) dequeueBuffer: BufferQueue has been abandoned
E/ACodec ( 2081): dequeueBuffer failed: NO_INIT(-19).
I/MediaCodec( 2081): (0xb400006fd4ee3390) flush
I/CCodecConfig( 2081): query failed after returning 19 values (BAD_INDEX)
W/Codec2Client( 2081): query -- param skipped: index = 1342179345.
W/Codec2Client( 2081): query -- param skipped: index = 2415921170.
W/Codec2Client( 2081): query -- param skipped: index = 1610614798.
I/MediaCodec( 2081): (0xb400006fd4ed0260) stop
E/BufferQueueProducer( 2081): [ImageReader-1x1f22m5-2081-1](id:82100000001,api:3,p:2081,c:2081) cancelBuffer: BufferQueue has been abandoned
I/chatty ( 2081): uid=10923(com.example.test_database) Thread-246 identical 9 lines
E/BufferQueueProducer( 2081): [ImageReader-1x1f22m5-2081-1](id:82100000001,api:3,p:2081,c:2081) cancelBuffer: BufferQueue has been abandoned
D/SurfaceUtils( 2081): disconnecting from surface 0xb400007004de9010, reason disconnectFromSurface
I/MediaCodec( 2081): (0xb400006fd4ee3390) stop
D/CCodecBufferChannel( 2081): [c2.android.aac.decoder#150] MediaCodec discarded an unknown buffer
I/chatty ( 2081): uid=10923(com.example.test_database) identical 2 lines
D/CCodecBufferChannel( 2081): [c2.android.aac.decoder#150] MediaCodec discarded an unknown buffer
I/hw-BpHwBinder( 2081): onLastStrongRef automatically unlinking death recipients
D/BufferPoolAccessor2.0( 2081): bufferpool2 0xb400006f64e11eb8 : 0(0 size) total buffers - 0(0 size) used buffers - 1/7 (recycle/alloc) - 6/191 (fetch/transfer)
I/ExoPlayerImpl( 2081): Init b1f2eb1 [AndroidXMedia3/1.4.1] [sofiar, moto g(8) power, motorola, 30]
I/MediaCodec( 2081): (0xb400006fd4ec51b0) init name(OMX.qcom.video.decoder.avc)
I/OMXClient( 2081): IOmx service obtained
I/MediaCodec( 2081): (0xb400006fd4ec51b0) Component Allocated (OMX.qcom.video.decoder.avc)
I/MediaCodec( 2081): (0xb400006fd4ec51b0) configure surface(0xb400007004dfa080) crypto(0x0) flags(0)
D/MediaCodec( 2081): (0xb400006fd4ec51b0) configure format: AMessage(what = 0x00000000) = {
D/MediaCodec( 2081): int32_t max-height = 720
D/MediaCodec( 2081): string mime = "video/avc"
D/MediaCodec( 2081): int32_t priority = 0
D/MediaCodec( 2081): int32_t color-standard = 1
D/MediaCodec( 2081): Buffer csd-1 = {
D/MediaCodec( 2081): 00000000: 00 00 00 01 68 e9 7b 2c 8b ....h.{,.
D/MediaCodec( 2081): }
D/MediaCodec( 2081): int32_t color-transfer = 3
D/MediaCodec( 2081): int32_t max-width = 1280
D/MediaCodec( 2081): int32_t width = 1280
D/MediaCodec( 2081): int32_t color-range = 2
D/MediaCodec( 2081): float frame-rate = 29.975233
D/MediaCodec( 2081): int32_t rotation-degrees = 0
D/MediaCodec( 2081): int32_t max-input-size = 85153
D/MediaCodec( 2081): int32_t height = 720
D/MediaCodec( 2081): Buffer csd-0 = {
D/MediaCodec( 2081): 00000000: 00 00 00 01 67 64 00 1f ac d9 80 50 05 bb 01 6a ....gd.....P...j
D/MediaCodec( 2081): 00000010: 02 02 02 80 00 01 f4 80 00 75 30 07 8c 18 cd .........u0....
D/MediaCodec( 2081): }
D/MediaCodec( 2081): }
D/SurfaceUtils( 2081): connecting to surface 0xb400007004dfa090, reason connectToSurface
I/MediaCodec( 2081): [OMX.qcom.video.decoder.avc] setting surface generation to 2130947
D/SurfaceUtils( 2081): disconnecting from surface 0xb400007004dfa090, reason connectToSurface(reconnect)
D/SurfaceUtils( 2081): connecting to surface 0xb400007004dfa090, reason connectToSurface(reconnect)
I/ACodec ( 2081): DRC Mode: Dynamic Buffer Mode
I/ExtendedACodec( 2081): setupVideoDecoder()
I/ACodec ( 2081): [OMX.qcom.video.decoder.avc] setupVideoDecoder Width Height (1280x720)
I/ACodec ( 2081): mime (video/avc) compressionFormat (7)
I/ExtendedACodec( 2081): Decoder will be in frame by frame mode
I/MediaCodec( 2081): (0xb400006fd4ec51b0) start
D/SurfaceUtils( 2081): set up nativeWindow 0xb400007004dfa090 for 1280x720, color 0x7fa30c06, rotation 0, usage 0x20002900
I/MediaCodec( 2081): (0xb400006fd4ec51b0) kWhatStartCompleted
I/MediaCodec( 2081): (0xb400006fd4eca200) init name(c2.android.aac.decoder)
D/CCodec ( 2081): allocate(c2.android.aac.decoder)
I/CCodec ( 2081): Created component [c2.android.aac.decoder]
D/CCodecConfig( 2081): read media type: audio/mp4a-latm
D/ReflectedParamUpdater( 2081): extent() != 1 for single value type: algo.buffers.max-count.values
D/ReflectedParamUpdater( 2081): extent() != 1 for single value type: output.subscribed-indices.values
D/ReflectedParamUpdater( 2081): extent() != 1 for single value type: input.buffers.allocator-ids.values
D/ReflectedParamUpdater( 2081): extent() != 1 for single value type: output.buffers.allocator-ids.values
D/ReflectedParamUpdater( 2081): extent() != 1 for single value type: algo.buffers.allocator-ids.values
D/ReflectedParamUpdater( 2081): extent() != 1 for single value type: output.buffers.pool-ids.values
D/ReflectedParamUpdater( 2081): extent() != 1 for single value type: algo.buffers.pool-ids.values
I/CCodecConfig( 2081): query failed after returning 19 values (BAD_INDEX)
D/CCodecConfig( 2081): c2 config diff is Dict {
D/CCodecConfig( 2081): c2::u32 coded.aac-packaging.value = 0
D/CCodecConfig( 2081): c2::u32 coded.bitrate.value = 64000
D/CCodecConfig( 2081): c2::u32 coded.pl.level = 0
D/CCodecConfig( 2081): c2::u32 coded.pl.profile = 8192
D/CCodecConfig( 2081): c2::i32 coding.drc.album-mode.value = 0
D/CCodecConfig( 2081): c2::float coding.drc.attenuation-factor.value = 1
D/CCodecConfig( 2081): c2::float coding.drc.boost-factor.value = 1
D/CCodecConfig( 2081): c2::i32 coding.drc.compression-mode.value = 3
D/CCodecConfig( 2081): c2::i32 coding.drc.effect-type.value = 3
D/CCodecConfig( 2081): c2::float coding.drc.encoded-level.value = 0.25
D/CCodecConfig( 2081): c2::float coding.drc.reference-level.value = -16
D/CCodecConfig( 2081): c2::u32 input.buffers.max-size.value = 8192
D/CCodecConfig( 2081): c2::u32 input.delay.value = 0
D/CCodecConfig( 2081): string input.media-type.value = "audio/mp4a-latm"
D/CCodecConfig( 2081): c2::u32 output.delay.value = 2
D/CCodecConfig( 2081): c2::float output.drc.output-loudness.value = 0.25
D/CCodecConfig( 2081): string output.media-type.value = "audio/raw"
D/CCodecConfig( 2081): c2::u32 raw.channel-count.value = 1
D/CCodecConfig( 2081): c2::u32 raw.max-channel-count.value = 8
D/CCodecConfig( 2081): c2::u32 raw.sample-rate.value = 44100
D/CCodecConfig( 2081): }
I/MediaCodec( 2081): (0xb400006fd4eca200) Component Allocated (c2.android.aac.decoder)
I/MediaCodec( 2081): (0xb400006fd4eca200) configure surface(0x0) crypto(0x0) flags(0)
D/MediaCodec( 2081): (0xb400006fd4eca200) configure format: AMessage(what = 0x00000000) = {
D/MediaCodec( 2081): float operating-rate = 48000.000000
D/MediaCodec( 2081): int32_t sample-rate = 48000
D/MediaCodec( 2081): string mime = "audio/mp4a-latm"
D/MediaCodec( 2081): int32_t channel-count = 2
D/MediaCodec( 2081): int32_t priority = 0
D/MediaCodec( 2081): int32_t max-input-size = 628
D/MediaCodec( 2081): Buffer csd-0 = {
D/MediaCodec( 2081): 00000000: 11 90 ..
D/MediaCodec( 2081): }
D/MediaCodec( 2081): }
D/CCodec ( 2081): [c2.android.aac.decoder] buffers are bound to CCodec for this session
D/CCodecConfig( 2081): no c2 equivalents for flags
D/CCodecConfig( 2081): config failed => CORRUPTED
D/CCodecConfig( 2081): c2 config diff is c2::u32 raw.channel-count.value = 2
D/CCodecConfig( 2081): c2::u32 raw.sample-rate.value = 48000
W/Codec2Client( 2081): query -- param skipped: index = 1107298332.
D/CCodec ( 2081): client requested max input size 628, which is smaller than what component recommended (16384); overriding with component recommendation.
W/CCodec ( 2081): This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
D/CCodec ( 2081): setup formats input: AMessage(what = 0x00000000) = {
D/CCodec ( 2081): int32_t aac-drc-album-mode = 0
D/CCodec ( 2081): int32_t aac-drc-boost-level = 127
D/CCodec ( 2081): int32_t aac-drc-cut-level = 127
D/CCodec ( 2081): int32_t aac-drc-effect-type = 3
D/CCodec ( 2081): int32_t aac-drc-heavy-compression = 3
D/CCodec ( 2081): int32_t aac-encoded-target-level = -1
D/CCodec ( 2081): int32_t aac-max-output-channel_count = 8
D/CCodec ( 2081): int32_t aac-target-ref-level = 64
D/CCodec ( 2081): int32_t channel-count = 2
D/CCodec ( 2081): int32_t level = 0
D/CCodec ( 2081): int32_t max-input-size = 16384
D/CCodec ( 2081): string mime = "audio/mp4a-latm"
D/CCodec ( 2081): int32_t profile = 2
D/CCodec ( 2081): int32_t sample-rate = 48000
D/CCodec ( 2081): } and output: AMessage(what = 0x00000000) = {
D/CCodec ( 2081): int32_t aac-drc-album-mode = 0
D/CCodec ( 2081): int32_t aac-drc-boost-level = 127
D/CCodec ( 2081): int32_t aac-drc-cut-level = 127
D/CCodec ( 2081): int32_t aac-drc-effect-type = 3
D/CCodec ( 2081): int32_t aac-drc-heavy-compression = 3
D/CCodec ( 2081): int32_t aac-drc-output-loudness = -1
D/CCodec ( 2081): int32_t aac-encoded-target-level = -1
D/CCodec ( 2081): int32_t aac-max-output-channel_count = 8
D/CCodec ( 2081): int32_t aac-target-ref-level = 64
D/CCodec ( 2081): int32_t channel-count = 2
D/CCodec ( 2081): string mime = "audio/raw"
D/CCodec ( 2081): int32_t sample-rate = 48000
D/CCodec ( 2081): }
I/MediaCodec( 2081): (0xb400006fd4eca200) start
W/Codec2Client( 2081): query -- param skipped: index = 1342179345.
W/Codec2Client( 2081): query -- param skipped: index = 2415921170.
W/Codec2Client( 2081): query -- param skipped: index = 1610614798.
E/FMQ ( 2081): grantorIdx must be less than 3
E/FMQ ( 2081): grantorIdx must be less than 3
D/CCodecBufferChannel( 2081): [c2.android.aac.decoder#995] Created input block pool with allocatorID 16 => poolID 19 - OK (0)
I/CCodecBufferChannel( 2081): [c2.android.aac.decoder#995] Created output block pool with allocatorID 16 => poolID 3348 - OK
D/CCodecBufferChannel( 2081): [c2.android.aac.decoder#995] Configured output block pool ids 3348 => OK
I/MediaCodec( 2081): (0xb400006fd4eca200) kWhatStartCompleted
E/FMQ ( 2081): grantorIdx must be less than 3
E/FMQ ( 2081): grantorIdx must be less than 3
D/CCodecConfig( 2081): c2 config diff is c2::i32 coding.drc.compression-mode.value = 1
D/CCodecConfig( 2081): c2::u32 raw.channel-mask.value = 12
D/CCodecBuffers( 2081): [c2.android.aac.decoder#995:Output[N]] popFromStashAndRegister: output format changed to AMessage(what = 0x00000000) = {
D/CCodecBuffers( 2081): int32_t aac-drc-album-mode = 0
D/CCodecBuffers( 2081): int32_t aac-drc-boost-level = 127
D/CCodecBuffers( 2081): int32_t aac-drc-cut-level = 127
D/CCodecBuffers( 2081): int32_t aac-drc-effect-type = 3
D/CCodecBuffers( 2081): int32_t aac-drc-heavy-compression = 1
D/CCodecBuffers( 2081): int32_t aac-drc-output-loudness = -1
D/CCodecBuffers( 2081): int32_t aac-encoded-target-level = -1
D/CCodecBuffers( 2081): int32_t aac-max-output-channel_count = 8
D/CCodecBuffers( 2081): int32_t aac-target-ref-level = 64
D/CCodecBuffers( 2081): int32_t channel-count = 2
D/CCodecBuffers( 2081): string mime = "audio/raw"
D/CCodecBuffers( 2081): int32_t sample-rate = 48000
D/CCodecBuffers( 2081): }
D/AudioTrack( 2081): createTrack_l(): RelativeVolumeFeature, mStreamType -1, streamType 3, attributes: usage=1 content=3 flags=0xa00 tags=[], percentage=1.000000 clientId=3260
D/AudioTrack( 2081): createTrack_l: RelativeVolumeFeature, mRelativePercentage:1.000000
D/AudioTrack( 2081): setVolume: RelativeVolumeFeature, mRelativePercentage:1.000000, left:1.000000, right:1.000000
I/MediaCodec( 2081): (0xb400006fd4ec51b0) setParameters
D/ImageReaderSurfaceProducer( 2081): ImageTextureEntry can't wait on the fence on Android < 33
D/AudioTrack( 2081): getTimestamp_l(3342): device stall time corrected using current time 937037082434100
I/flutter ( 2081): Selected Tab: 3
I/ExoPlayerImpl( 2081): Release b1f2eb1 [AndroidXMedia3/1.4.1] [sofiar, moto g(8) power, motorola, 30] [media3.common, media3.exoplayer, media3.decoder, media3.datasource, media3.extractor]
E/VideoFrameReleaseHelper( 2081): Failed to call Surface.setFrameRate
E/VideoFrameReleaseHelper( 2081): java.lang.IllegalStateException: Surface has already been released.
E/VideoFrameReleaseHelper( 2081): at android.view.Surface.checkNotReleasedLocked(Surface.java:696)
E/VideoFrameReleaseHelper( 2081): at android.view.Surface.setFrameRate(Surface.java:905)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.video.VideoFrameReleaseHelper$Api30.setSurfaceFrameRate(VideoFrameReleaseHelper.java:440)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.video.VideoFrameReleaseHelper.clearSurfaceFrameRate(VideoFrameReleaseHelper.java:385)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.video.VideoFrameReleaseHelper.onStopped(VideoFrameReleaseHelper.java:235)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.video.VideoFrameReleaseControl.onStopped(VideoFrameReleaseControl.java:231)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onStopped(MediaCodecVideoRenderer.java:777)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.BaseRenderer.stop(BaseRenderer.java:209)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.ExoPlayerImplInternal.ensureStopped(ExoPlayerImplInternal.java:1836)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:1845)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:1566)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.ExoPlayerImplInternal.releaseInternal(ExoPlayerImplInternal.java:1535)
E/VideoFrameReleaseHelper( 2081): at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:628)
E/VideoFrameReleaseHelper( 2081): at android.os.Handler.dispatchMessage(Handler.java:102)
E/VideoFrameReleaseHelper( 2081): at android.os.Looper.loop(Looper.java:250)
E/VideoFrameReleaseHelper( 2081): at android.os.HandlerThread.run(HandlerThread.java:67)
I/MediaCodec( 2081): (0xb400006fd4ec51b0) flush
I/MediaCodec( 2081): (0xb400006fd4eca200) flush
D/AudioTrack( 2081): ~AudioTrack(): RelativeVolumeFeature mSessionId:38305, clientId:3260
D/CCodecBuffers( 2081): [c2.android.aac.decoder#995:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 0
D/CCodecBuffers( 2081): [c2.android.aac.decoder#995:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 1
D/CCodecBuffers( 2081): [c2.android.aac.decoder#995:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 2
D/CCodecBuffers( 2081): [c2.android.aac.decoder#995:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 3
I/CCodecConfig( 2081): query failed after returning 19 values (BAD_INDEX)
D/CCodecConfig( 2081): c2 config diff is c2::i32 coding.drc.compression-mode.value = 3
W/Codec2Client( 2081): query -- param skipped: index = 1342179345.
W/Codec2Client( 2081): query -- param skipped: index = 2415921170.
W/Codec2Client( 2081): query -- param skipped: index = 1610614798.
I/MediaCodec( 2081): (0xb400006fd4ec51b0) stop
E/BufferQueueProducer( 2081): [ImageReader-1x1f22m5-2081-2](id:82100000002,api:3,p:2081,c:2081) cancelBuffer: BufferQueue has been abandoned
I/chatty ( 2081): uid=10923(com.example.test_database) Thread-314 identical 10 lines
E/BufferQueueProducer( 2081): [ImageReader-1x1f22m5-2081-2](id:82100000002,api:3,p:2081,c:2081) cancelBuffer: BufferQueue has been abandoned
D/SurfaceUtils( 2081): disconnecting from surface 0xb400007004dfa090, reason disconnectFromSurface
I/MediaCodec( 2081): (0xb400006fd4eca200) stop
D/CCodecBufferChannel( 2081): [c2.android.aac.decoder#995] MediaCodec discarded an unknown buffer
I/chatty ( 2081): uid=10923(com.example.test_database) MediaCodec_loop identical 2 lines
D/CCodecBufferChannel( 2081): [c2.android.aac.decoder#995] MediaCodec discarded an unknown buffer
I/hw-BpHwBinder( 2081): onLastStrongRef automatically unlinking death recipients
D/BufferPoolAccessor2.0( 2081): bufferpool2 0xb400006f64e11eb8 : 0(0 size) total buffers - 0(0 size) used buffers - 1/7 (recycle/alloc) - 6/191 (fetch/transfer)
D/BufferPoolAccessor2.0( 2081): evictor expired: 1, evicted: 1
W/MessageQueue( 2081): Handler (android.os.Handler) {fc99985} sending message to a Handler on a dead thread
W/MessageQueue( 2081): java.lang.IllegalStateException: Handler (android.os.Handler) {fc99985} sending message to a Handler on a dead thread
W/MessageQueue( 2081): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:567)
W/MessageQueue( 2081): at android.os.Handler.enqueueMessage(Handler.java:778)
W/MessageQueue( 2081): at android.os.Handler.sendMessageAtTime(Handler.java:727)
W/MessageQueue( 2081): at android.os.Handler.sendMessageDelayed(Handler.java:697)
W/MessageQueue( 2081): at android.os.Handler.sendMessage(Handler.java:635)
W/MessageQueue( 2081): at android.os.Message.sendToTarget(Message.java:469)
W/MessageQueue( 2081): at androidx.media3.common.util.SystemHandlerWrapper$SystemMessage.sendToTarget(SystemHandlerWrapper.java:160)
W/MessageQueue( 2081): at androidx.media3.exoplayer.ExoPlayerImplInternal.stop(ExoPlayerImplInternal.java:388)
W/MessageQueue( 2081): at androidx.media3.exoplayer.ExoPlayerImpl.stopInternal(ExoPlayerImpl.java:1919)
W/MessageQueue( 2081): at androidx.media3.exoplayer.ExoPlayerImpl.stop(ExoPlayerImpl.java:1035)
W/MessageQueue( 2081): at io.flutter.plugins.videoplayer.VideoPlayer.onSurfaceDestroyed(VideoPlayer.java:100)
W/MessageQueue( 2081): at io.flutter.embedding.engine.renderer.FlutterRenderer$ImageReaderSurfaceProducer.onTrimMemory(FlutterRenderer.java:690)
W/MessageQueue( 2081): at io.flutter.embedding.engine.renderer.FlutterRenderer.onTrimMemory(FlutterRenderer.java:295)
W/MessageQueue( 2081): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onStop(FlutterActivityAndFragmentDelegate.java:653)
W/MessageQueue( 2081): at io.flutter.embedding.android.FlutterActivity.onStop(FlutterActivity.java:850)
W/MessageQueue( 2081): at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1476)
W/MessageQueue( 2081): at android.app.Activity.performStop(Activity.java:8298)
W/MessageQueue( 2081): at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:4915)
W/MessageQueue( 2081): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4894)
W/MessageQueue( 2081): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4968)
W/MessageQueue( 2081): at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:40)
W/MessageQueue( 2081): at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
W/MessageQueue( 2081): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
W/MessageQueue( 2081): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2115)
W/MessageQueue( 2081): at android.os.Handler.dispatchMessage(Handler.java:106)
W/MessageQueue( 2081): at android.os.Looper.loop(Looper.java:250)
W/MessageQueue( 2081): at android.app.ActivityThread.main(ActivityThread.java:7755)
W/MessageQueue( 2081): at java.lang.reflect.Method.invoke(Native Method)
W/MessageQueue( 2081): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
W/MessageQueue( 2081): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
I/ExoPlayerImpl( 2081): Release b1f2eb1 [AndroidXMedia3/1.4.1] [sofiar, moto g(8) power, motorola, 30] [media3.common, media3.exoplayer, media3.decoder, media3.datasource, media3.extractor]
D/BufferPoolAccessor2.0( 2081): bufferpool2 0xb400006f64df5bc8 : 0(0 size) total buffers - 0(0 size) used buffers - 1/7 (recycle/alloc) - 6/135 (fetch/transfer)
D/BufferPoolAccessor2.0( 2081): evictor expired: 1, evicted: 1Flutter Doctor output
Doctor output
flutter doctor -v
[✓] Flutter (Channel stable, 3.24.3, on macOS 15.0 24A335 darwin-x64, locale fr-FR)
• Flutter version 3.24.3 on channel stable at /Users/tommydeshairs/Desktop/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 2663184aa7 (3 weeks ago), 2024-09-11 16:27:48 -0500
• Engine revision 36335019a8
• Dart version 3.5.3
• DevTools version 2.37.3
[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
• Android SDK at /Users/tommydeshairs/Library/Android/sdk
• Platform android-35, build-tools 35.0.0
• Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 17.0.11+0-17.0.11b1207.24-11852314)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 16.0)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 16A242d
• CocoaPods version 1.15.2
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2024.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.11+0-17.0.11b1207.24-11852314)
[✓] VS Code (version 1.94.0)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension can be installed from:
🔨 https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[✓] Connected device (6 available)
• moto g 8 power (mobile) • adb-ZY22BNDW2C-yyjDO7._adb-tls-connect._tcp. • android-arm64 • Android 11 (API 30)
• Now You See Me (mobile) • 00008020-001204401E78002E • ios • iOS 18.0 22A3354
• iPhone 16 Plus (mobile) • DB552231-5CB2-42DB-9103-F049A6852514 • ios • com.apple.CoreSimulator.SimRuntime.iOS-18-0 (simulator)
• macOS (desktop) • macos • darwin-x64 • macOS 15.0 24A335 darwin-x64
• Chrome (web) • chrome • web-javascript • Google Chrome 129.0.6668.72
! Error: Browsing on the local area network for Apple Watch de Tommy. Ensure the device is unlocked and discoverable via Bluetooth. (code -27)
[✓] Network resources
• All expected network resources are available.
• No issues found!Metadata
Metadata
Assignees
Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work listfound in release: 3.24Found to occur in 3.24Found to occur in 3.24found in release: 3.26Found to occur in 3.26Found to occur in 3.26has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onp: video_playerThe Video Player pluginThe Video Player pluginpackageflutter/packages repository. See also p: labels.flutter/packages repository. See also p: labels.platform-androidAndroid applications specificallyAndroid applications specificallyr: fixedIssue is closed as already fixed in a newer versionIssue is closed as already fixed in a newer versionteam-androidOwned by Android platform teamOwned by Android platform team