pili-engineering / PLDroidShortVideo

PLDroidShortVideo 是七牛推出的一款适用于 Android 平台的短视频 SDK,提供了包括美颜、滤镜、水印、断点录制、分段回删、视频编辑、混音特效、视频剪辑、本地转码、视频上传在内的多种功能,支持高度定制以及二次开发。
https://github.com/pili-engineering/PLDroidShortVideo
Apache License 2.0
1.68k stars 311 forks source link

有一个视频压缩一直报错 #207

Open loyilin opened 2 years ago

loyilin commented 2 years ago

原来使用的是3.1.1,升级最新SDK还是不行,错误码6,对应ERROR_SETUP_VIDEO_ENCODER_FAILED 我使用裁剪后再压缩也一样,目前只发现这一个视频不行

private fun transcode(timerPath: String) { mProcessingDialog!!.setMessage(getString(R.string.video_compression)) mProcessingDialog!!.show() val plMediaFile = PLMediaFile(timerPath) videoTranscodePath = Config.getVideoTranscodePath() mShortVideoTranscoding = PLShortVideoTranscoder(this@QNVideoTrimActivity, timerPath, videoTranscodePath) mShortVideoTranscoding?.transcode(plMediaFile.videoWidth, plMediaFile.videoHeight, plMediaFile.videoBitrate / 1000, object : PLVideoSaveListener { override fun onSaveVideoSuccess(path: String) { //视频转码 mIsTrimmingVideo = false runOnUiThread { val plMediaFile = PLMediaFile(path) if (mProcessingDialog != null && mProcessingDialog!!.isShowing && !isFinishing && !isDestroyed) { mProcessingDialog!!.isIndeterminate = true mProcessingDialog!!.dismiss() } //转码完成返回目标页面 returnHandlerResult(path, plMediaFile.durationMs) } }

            override fun onSaveVideoFailed(errorCode: Int) {
                mIsTrimmingVideo = false
                runOnUiThread {
                    if (mProcessingDialog != null && mProcessingDialog!!.isShowing && !isFinishing && !isDestroyed) {
                        mProcessingDialog!!.isIndeterminate = true
                        mProcessingDialog!!.dismiss()
                    }
                    ToastUtils.showLongToast(getString(R.string.video_compression_failed))
                }
            }

            override fun onSaveVideoCanceled() {
                runOnUiThread {
                    mIsTrimmingVideo = false
                    if (mProcessingDialog != null && mProcessingDialog!!.isShowing && !isFinishing && !isDestroyed) {
                        mProcessingDialog!!.isIndeterminate = true
                        mProcessingDialog!!.dismiss()
                    }
                }
            }

            override fun onProgressUpdate(percentage: Float) {
                runOnUiThread {
                    mProcessingDialog!!.setMessage(String.format(getString(R.string.compressing), (100 * percentage).toInt()))
                }
            }

        })
}
ShaoLongFei commented 2 years ago

看报错是配置编码器出了问题,可能是由于该手机无法支持这个编码配置

loyilin commented 2 years ago

@ShaoLongFei 有什么建议吗

ShaoLongFei commented 2 years ago

这个和具体的机型和视频源相关,比如一个手机它无法支持编码 4K 视频,那你给它 4K 的视频就无法处理,受手机硬件限制

ShaoLongFei commented 1 year ago

已支持软编码,硬编码失败也会自动切换为软编码重试