将视频串流至 16 次

问题描述

作为标题,我尝试使用 MediaCodec 它可以将流媒体视频加速到 x2 倍(最大)。 因此我在我的项目中添加FFMpeg API,它可以成功 x16 次,但我需要等待视频创建。

这是我编码的问题吗?? 我能做什么??非常感谢~~

 mTimeAnimator.setTimeListener(new TimeAnimator.TimeListener() {
                @Override
                public void onTimeUpdate(final TimeAnimator animation,final long totalTime,final long deltaTime) {

                    boolean iSEOs = ((mExtractor.getSampleFlags() & MediaCodec
                            .BUFFER_FLAG_END_OF_STREAM) == MediaCodec.BUFFER_FLAG_END_OF_STREAM);
                    Log.e(TAG,"mExtractor.getSampleFlags() :" + mExtractor.getSampleFlags());
                    Log.e(TAG,"MediaCodec.BUFFER_FLAG_END_OF_STREAM :" + MediaCodec.BUFFER_FLAG_END_OF_STREAM);


                    // BEGIN_INCLUDE(write_sample)
                    if (!iSEOs) {
                        Log.e(TAG,"goto iSEOs = false");
                        // Try to submit the sample to the codec and if successful advance the
                        // extractor to the next available sample to read.
                        boolean result = mCodecWrapper.writeSample(mExtractor,false,mExtractor.getSampleTime(),mExtractor.getSampleFlags());
                        Log.e(TAG,"getSampleTime()" + mExtractor.getSampleTime());
                        Log.e(TAG,"result" + result);

                        if (result) {
                      
                            mExtractor.advance();
                        }
                    }else
                    {
                        onPause();
                        return;
                    }
                  
                    MediaCodec.BufferInfo out_bufferInfo = new MediaCodec.BufferInfo();
                    mCodecWrapper.peekSample(out_bufferInfo);
                    Log.i(TAG,"onTimeUpdate: out_bufferinfo: " + out_bufferInfo.size);

                    // BEGIN_INCLUDE(render_sample)
                    if (out_bufferInfo.size <= 0 && iSEOs) {
                    
                        mTimeAnimator.end();
                        mCodecWrapper.stopAndRelease();
                        mExtractor.release();
                 
                    } else if ((out_bufferInfo.presentationTimeUs) / (times * 1000) < totalTime) {  
                        // Pop the sample off the queue and send it to {@link Surface}
                        mCodecWrapper.popSample(true);

                    }
                    // END_INCLUDE(render_sample)

                }
            });


 mTimeAnimator.start();

***time var 表示我在那里传递值,例如:4、8 等 但我最多只能加速到 2

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)