E/NdkMediaCodec: sf error code: -38或者-18的报错

在使用VLC视频播放器时,调用stop方法停止视频播放出现E/NdkMediaCodec:sferrorcode:-38错误,导致程序卡死。问题源于so文件中nativestop方法,需寻找合适版本的VLC解决。

在使用网上开源VLC视频播放器时,当调用stop去停止视频播放时,报出E/NdkMediaCodec: sf error code: -38这个错误。开始以为是正常的报错。但在切换页面时,程序被卡死(堵塞了一分钟左右吧)。所以找问题。最后发现在是在调用so文件里的方法nativestop时出现问题,而堵塞的。所以记录一下。

最后只能找一下版本的开源VLC了。
--------------------- 
作者:omkn 
来源:优快云 
原文:https://blog.youkuaiyun.com/qq_34709057/article/details/80703741 
版权声明:本文为博主原创文章,转载请附上博文链接!

这个错误信息来自Android NDK的媒体编解码器(MediaCodec)模块,错误代码"-13"通常表示`MEDIA_ERROR_TIMED_OUT`(超时错误)。以下是详细分析和解决方案: --- ### **错误分析** 1. **错误来源**:`NdkMediaCodec`表明问题发生在NDK层的MediaCodec API调用过程中。 2. **错误代码-13**:对应Android系统的`AMEDIA_ERROR_TIMED_OUT`(定义在`<media/NdkMediaError.h>`中),通常由于编解码器处理帧时超时引发。 --- ### **可能原因** 1. **硬件资源不足**:设备性能不足以实时处理编解码任务。 2. **输入数据异常**:视频/音频帧格式不符合编解码器要求(如分辨率、帧率、编码格式)。 3. **编解码器配置错误**:未正确配置MediaFormat参数(如`KEY_MAX_INPUT_SIZE`)。 4. **未释放资源**:前一次编解码器实例未正确释放,导致资源争用。 --- ### **解决方案** 1. **检查输入数据**: ```java // 示例:检查视频格式是否匹配 MediaFormat format = MediaFormat.createVideoFormat("video/avc", width, height); format.setInteger(MediaFormat.KEY_FRAME_RATE, 30); ``` 2. **增加超时时间**: ```cpp // NDK中设置超时时间(微秒) AMediaCodec_dequeueInputBuffer(codec, timeoutUs); // 例如设为50000(50ms) ``` 3. **释放并重启编解码器**: ```java mediaCodec.stop(); mediaCodec.release(); mediaCodec = MediaCodec.createByCodecName("c2.android.avc.decoder"); ``` 4. **日志补充**:检查`logcat`中是否有`CodecDied`或`allocateBuffers`失败等关联错误。 --- ### **扩展建议** - 使用`MediaCodecList`验证设备支持的编解码器类型。 - 对高分辨率视频考虑降低帧率或使用硬件加速(`OMX`前缀的编解码器)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值