找茬小王子 2023-12-12 14:58 采纳率: 50%
浏览 4
已结题

MediaCodec解码报错

我的代码运行之后 mediaCodec.queueInputBuffer(inIndex, 0, sampleSize, extractor.getSampleTime(), 0);这一行报错:
2023-12-07 17:59:36.928 4101-4126/com.eyetracking.mediademo E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.eyetracking.mediademo, PID: 4101
android.media.MediaCodec$CodecException: Error 0xfffffff3
at android.media.MediaCodec.native_queueInputBuffer(Native Method)
at android.media.MediaCodec.queueInputBuffer(MediaCodec.java:2769)


   public void run() {
        try {
            //根据视频源获取MediaFormat
            extractor = new MediaExtractor();
            extractor.setDataSource("sdcard/test.mp4");
            int numTracks = extractor.getTrackCount();
            //只有一个曲目时直接获取它的MediaFormat和mime
            if (numTracks > 0) {
                format = extractor.getTrackFormat(0);
                mime = format.getString(MediaFormat.KEY_MIME);
                extractor.selectTrack(0);
            }


            mediaCodec = MediaCodec.createDecoderByType(mime);
            mediaCodec.configure(format, surface, null, 0);
            mediaCodec.start();


            MediaCodec.BufferInfo info = new MediaCodec.BufferInfo();
            //获取输入缓冲器授权
            int inIndex = mediaCodec.dequeueInputBuffer(10000);
            //获取输出缓冲区授权
            int outIndex = mediaCodec.dequeueOutputBuffer(info, 100000);
            long startMs = System.currentTimeMillis();
            ByteBuffer inputBuffer;
            while (true) {
                if (inIndex >= 0) {
                    //获取实际的buffer数据
                    inputBuffer = mediaCodec.getInputBuffer(inIndex);
                    //加入解码队列
                    mediaCodec.queueInputBuffer(inIndex, 0, 0, 0, 1);
                    int sampleSize = extractor.readSampleData(inputBuffer, 0);
                    if (sampleSize < 0) {
                        mediaCodec.queueInputBuffer(inIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
                    } else {
                        mediaCodec.queueInputBuffer(inIndex, 0, sampleSize, extractor.getSampleTime(), 0);
                        extractor.advance();  //下一帧数据
                    }

                }

                //    ByteBuffer outBuffer =mediaCodec.getOutputBuffer(outIndex);
                mediaCodec.releaseOutputBuffer(outIndex, true);
            }
        } catch (IOException e) {
            e.printStackTrace();
            mediaCodec.stop();
            mediaCodec.release();// 释放组件
            extractor.release();
        }
    }
  • 写回答

1条回答 默认 最新

  • IT工程师_二师兄 2023-12-12 15:31
    关注

    解码器是哪个类型的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月12日
  • 已采纳回答 12月12日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 什么设备可以研究OFDM的60GHz毫米波信道模型
  • ¥15 不知道是该怎么引用多个函数片段
  • ¥15 爬取1-112页所有帖子的标题但是12页后要登录后才能 我使用selenium模拟登录 账号密码输入后 会报错 不知道怎么弄了
  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题