gpt4 book ai didi

android - 为什么 "MediaCodec CodecException"中的 "queueInputBuffer"只发生在 Android API 29 上?

转载 作者:行者123 更新时间:2023-12-04 13:16:09 26 4
gpt4 key购买 nike

基本信息

targetSdkVersion 28

目标:类(class)的目标是在发送到我的服务器之前调整视频大小。

问题:应用程序仅在 API 29 上崩溃,无论是使用真实设备还是使用 AVD。例如,代码在 Pixel 2 API 28 上运行良好,但在 Pixel 2 API 29

上运行良好

源代码:我主要使用 bigflake.com 中的示例代码.

错误信息(详细日志见下文):

E/AndroidRuntime: FATAL EXCEPTION: Thread-20
Process: com.myapp.myapp, PID: 9189
android.media.MediaCodec$CodecException: Error 0xfffffff3
at android.media.MediaCodec.native_queueInputBuffer(Native Method)
at android.media.MediaCodec.queueInputBuffer(MediaCodec.java:2450)

我的尝试由于 MediaCodec$CodecException 的日志信息有限,我尝试从 MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface 更改为 MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible 没有成功.


日志会显示最近两个缓冲周期。我希望你会看到一些有值(value)的东西。

在 *Pixel 2 API 29* 上不工作的日志

D/VideoResolutionChanger: no audio encoder output buffer
D/VideoResolutionChanger: loop: V(true){extracted:49(done:false) decoded:45(done:false) encoded:43(done:false)} A(true){extracted:45(done:false) decoded:44(done:false) encoded:1(done:false) pending:-1} muxing:true(V:0,A:1)
D/VideoResolutionChanger: video decoder: returned input buffer: 3
video extractor: returned buffer of size 31007
video extractor: returned buffer for time 4448177
D/VideoResolutionChanger: audio decoder: returned input buffer: 1
audio extractor: returned buffer of size 32
audio extractor: returned buffer for time 900000
D/VideoResolutionChanger: video decoder: returned output buffer: 5
video decoder: returned buffer of size 1382400
video decoder: returned buffer for time 4132500
D/VideoResolutionChanger: output surface: await new image
D/VideoResolutionChanger: output surface: draw image
D/VideoResolutionChanger: input surface: swap buffers
D/VideoResolutionChanger: video encoder: notified of new frame
audio decoder: returned output buffer: 0
audio decoder: returned buffer of size 320
D/VideoResolutionChanger: audio decoder: returned buffer for time 880000
audio decoder: output buffer is now pending: -1
audio decoder: attempting to process pending buffer: 0
D/VideoResolutionChanger: audio encoder: returned input buffer: 0
audio decoder: processing pending buffer: 0
audio decoder: pending buffer of size 320
audio decoder: pending buffer for time 880000
D/VideoResolutionChanger: should have added track before processing output true
video encoder: returned output buffer: 0
video encoder: returned buffer of size 8234
video encoder: returned buffer for time 3954177
D/VideoResolutionChanger: no audio encoder output buffer
D/VideoResolutionChanger: loop: V(true){extracted:50(done:false) decoded:46(done:false) encoded:44(done:false)} A(true){extracted:46(done:false) decoded:45(done:false) encoded:1(done:false) pending:-1} muxing:true(V:0,A:1)
D/VideoResolutionChanger: video decoder: returned input buffer: 4
video extractor: returned buffer of size 30897
video extractor: returned buffer for time 4519077
D/VideoResolutionChanger: video extractor: EOS
D/VideoResolutionChanger: releasing extractor, decoder, encoder, and muxer
D/SurfaceUtils: disconnecting from surface 0xc94d8008, reason disconnectFromSurface
D/MPEG4Writer: Video track stopping. Stop source
Video track source stopping
Video track source stopped
I/MPEG4Writer: Received total/0-length (44/0) buffers and encoded 44 frames. - Video
W/MPEG4Writer: 0-duration samples found: 1
I/MPEG4Writer: Received total/0-length (1/0) buffers and encoded 1 frames. - Audio
Audio track drift time: 0 us
D/MPEG4Writer: Video track stopped. Stop source
D/MPEG4Writer: Audio track stopping. Stop source
Audio track source stopping
Audio track source stopped
Audio track stopped. Stop source
Duration from tracks range is [241451, 3994621] us
Stopping writer thread
D/MPEG4Writer: 0 chunks are written in the last batch
D/MPEG4Writer: Writer thread stopped
I/MPEG4Writer: Ajust the moov start time from 0 us -> 0 us
D/MPEG4Writer: Video track stopping. Stop source
D/MPEG4Writer: Audio track stopping. Stop source
E/AndroidRuntime: FATAL EXCEPTION: Thread-20
Process: com.myapp.myname, PID: 9189
android.media.MediaCodec$CodecException: Error 0xfffffff3
at android.media.MediaCodec.native_queueInputBuffer(Native Method)
at android.media.MediaCodec.queueInputBuffer(MediaCodec.java:2450)
at com.myapp.myname.utils.VideoResolutionChanger.doExtractDecodeEditEncodeMux(VideoResolutionChanger.java:543)

使用 *Pixel 2 API 28* 的日志

D/VideoResolutionChanger: no audio encoder output buffer
loop: V(true){extracted:39(done:true) decoded:39(done:true) encoded:39(done:true)} A(true){extracted:147(done:false) decoded:146(done:false) encoded:5(done:false) pending:-1} muxing:true(V:0,A:1)
audio decoder: returned input buffer: 3
audio extractor: returned buffer of size 32
audio extractor: returned buffer for time 2940000
D/VideoResolutionChanger: audio decoder: returned output buffer: 2
audio decoder: returned buffer of size 320
audio decoder: returned buffer for time 2920000
audio decoder: output buffer is now pending: -1
audio decoder: attempting to process pending buffer: 2
audio encoder: returned input buffer: 2
audio decoder: processing pending buffer: 2
audio decoder: pending buffer of size 320
audio decoder: pending buffer for time 2920000
D/VideoResolutionChanger: no audio encoder output buffer
D/VideoResolutionChanger: loop: V(true){extracted:39(done:true) decoded:39(done:true) encoded:39(done:true)} A(true){extracted:148(done:false) decoded:147(done:false) encoded:5(done:false) pending:-1} muxing:true(V:0,A:1)
D/VideoResolutionChanger: audio decoder: returned input buffer: 0
audio extractor: returned buffer of size -1
audio extractor: returned buffer for time -1
audio extractor: EOS
D/VideoResolutionChanger: audio decoder: returned output buffer: 3
audio decoder: returned buffer of size 320
audio decoder: returned buffer for time 2940000
audio decoder: output buffer is now pending: -1
audio decoder: attempting to process pending buffer: 3
D/VideoResolutionChanger: audio encoder: returned input buffer: 3
audio decoder: processing pending buffer: 3
audio decoder: pending buffer of size 320
audio decoder: pending buffer for time 2940000
D/VideoResolutionChanger: no audio encoder output buffer
D/VideoResolutionChanger: loop: V(true){extracted:39(done:true) decoded:39(done:true) encoded:39(done:true)} A(true){extracted:149(done:true) decoded:148(done:false) encoded:5(done:false) pending:-1} muxing:true(V:0,A:1)
audio decoder: returned output buffer: 0
audio decoder: returned buffer of size 0
audio decoder: returned buffer for time 2880000
audio decoder: output buffer is now pending: -1
audio decoder: attempting to process pending buffer: 0
D/VideoResolutionChanger: audio encoder: returned input buffer: 0
audio decoder: processing pending buffer: 0
audio decoder: pending buffer of size 0
audio decoder: pending buffer for time 2880000
D/VideoResolutionChanger: audio decoder: EOS
D/VideoResolutionChanger: should have added track before processing outputtrue
audio encoder: returned output buffer: 0
audio encoder: returned buffer of size 761
audio encoder: returned buffer for time 2801451
audio encoder: EOS
encoded and decoded video frame counts should match39 39
decoded frame count should be less than extracted frame count39 39
D/VideoResolutionChanger: no frame should be pending -1 -1
releasing extractor, decoder, encoder, and muxer
D/SurfaceUtils: disconnecting from surface 0xd8b50808, reason disconnectFromSurface
D/MPEG4Writer: Video track stopping. Stop source
I/MPEG4Writer: Received total/0-length (6/0) buffers and encoded 6 frames. - Audio
D/MPEG4Writer: Video track source stopping
I/MPEG4Writer: Audio track drift time: 0 us
D/MPEG4Writer: Video track source stopped
I/MPEG4Writer: Received total/0-length (38/0) buffers and encoded 38 frames. - Video
D/MPEG4Writer: Video track stopped. Stop source
D/MPEG4Writer: Audio track stopping. Stop source
Audio track source stopping
Audio track source stopped
Audio track stopped. Stop source
Duration from tracks range is [3060067, 3302540] us
Stopping writer thread
D/MPEG4Writer: 0 chunks are written in the last batch
D/MPEG4Writer: Writer thread stopped
I/MPEG4Writer: Ajust the moov start time from 0 us -> 0 us
D/MPEG4Writer: Video track stopping. Stop source
D/MPEG4Writer: Audio track stopping. Stop source

最佳答案

我认为正确的做法是在 xxxxExtractor.advance() 返回 false 后让它再循环一次。

我修改了我的代码,只在 xxxxExtractor.readSampleData 返回的大小返回 -1 之后标记提取器完成,这样你就知道你发送到 queueInputBuffer 的缓冲区是空。

所以:xxxxExtractorDone = !xxxxExtractor.advance(); ->xxxxExtractorDone = !xxxxExtractor.advance() && size == -1;

关于android - 为什么 "MediaCodec CodecException"中的 "queueInputBuffer"只发生在 Android API 29 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60307164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com