You need to enable JavaScript to run this app.
导航
常见问题
最近更新时间:2025.04.06 11:38:29首次发布时间:2022.09.05 14:29:27
我的收藏
有用
有用
无用
无用
是否支持设置水印

支持

从代码上如何控制视频导出时长

不支持

导入编辑页面的视频是否有大小或者时长限制
  • 时长:<=1小时

  • 大小:无限制

导出视频格式是否支持自定义

不支持

如何得到导入资源(视频、图片)的相关信息,如分辨率、大小等

不支持

如何关闭或者打开默认美颜相关效果
  • 目前,默认打开的美颜包括:磨皮、美白、锐化、瘦脸、大眼五项,在Panel_configs/recorder_beauty.json配置文件中进行配置

  • 如果不想打开某些效果,在recorder_beauty.json配置文件中,将对应的 "defaultOn" 字段设置为 0

  • 如果客户想新增默认美颜效果,在对应的节点添加 "defaultOn": 1

SDK开发语言都支持哪些

Android

Java/Kotlin/Jetpack Compose

iOS

OC/Swift

SDK是否支持跨平台开发,比如RN/Flutter等

支持

SDK支持程序设置哪些国家语言

建议在支持多语言情况下,先和byteplus进行沟通,避免引起UI相关的异常

Android

SDK自带中/英文配置
其他语言支持需自定义

  • 素材文本

支持中/英文,素材初始化时调用setSysLanguage(Locale.getDefault().language)接口配置素材文本语言类型,并且非中文系统默认选择英文素材文本类型

  • 内置文本

参考UI换皮文档中提供的各个UI页面对应的文字的key,在宿主工程的目录下,添加对应语言的values-xxx,并在values-xxx/strings.xml中,按照对应的key添加相应的value

iOS

SDK自带中/英文配置,客户可新增在EOLocalResources.bundle/BuiltInResource/Strings目录下新增语言配置。
文件命名规则:EffectOne-{Language}.strings

Android非源码方式集成, 环境升级到Gradle 8.2 sdk34 JDK 17时,直接对修改对应文件的环境变量即可

参考Gradle官方兼容性文档:https://gradle.github.net.cn/userguide/compatibility.html#compatibility
参考Android 官方AGP兼容性文档:https://developer.android.com/build/releases/past-releases/agp-8-0-0-release-notes?hl=zh-cn



Android 如何解决OkHttp版本兼容问题

我们对OkHttp没有版本强制要求,客户可以根据需要,设置自己的版本号

如何从导出页面返回到首页

iOS


在block中调用如下方法:

-(void)dismissToRootViewController  {
    UIViewController *vc = self;
    while (vc.presentingViewController) {
      vc = vc.presentingViewController;
    }
    [vc dismissViewControllerAnimated:YES completion:nil];
}

Android

在导出时,通过设置listener来实现

eoExportManager.exportVideo(outputPath, outputSetting, exportListener = ActivityResultExportListener())
class ActivityResultExportListener(eoRootUIViewModel: EffectOneExportRootUIViewModel) :
    EOExportListener(eoRootUIViewModel) {
    companion  object {
        const  val  RESULT_EXPORT_PATH = 10004
        const  val  KEY_OUTPUT_PATH = "KEY_OUTPUT_PATH"
    }

    override  fun  onDone(outputPath: String) {
        LogKit.d(TAG, "onCompileDone() outputPath  $outputPath")
        EffectOneSdk.activityManager.finishActivities(null, RESULT_EXPORT_PATH, Intent().apply {
            putExtra(KEY_OUTPUT_PATH, outputPath)
        })
    }
}

在启动页,通过onActivityResult来接受回调

override  fun  onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == ActivityResultExportListener.RESULT_EXPORT_PATH) {
        LogKit.d("EffectOneMainActivity",
            "requestCode:$requestCode, " +
                    "result:$resultCode, " +
                    "data:${data?.getStringExtra(ActivityResultExportListener.KEY_OUTPUT_PATH)}")
    }
}
SDK Log功能接入方式

iOS

/// 1. 定义一个日志类,实现EOSDKLogProtocol
class CustomLogger: NSObject, EOSDKLogProtocol {
    func logMsg(_ msg: String, tag: String, type: EOSDKLogType, filename: UnsafePointer<CChar>, funcName: UnsafePointer<CChar>, line: Int32) {
        /// 3. 按需进行打印或写入文件。只将EOSDKLogTypeInfo级别以上的日志写入文件
        print("test logger \(msg)");
    }
}

/// 2. 将该日志类实例设置给SDK
EOSDKLogManager.shared().injectLogger(CustomLogger())

Android

EffectOneSdk.logger = DebugLogger() //注册默认的logger打印方式,这里可以替换成接入方自己的Logger

// 继承AbsLogger
abstract class AbsLogger : LogKitProtocol {

    private var prio = LogPriority.DEBUG

    private val blockTagSet: Set<String> = emptySet()

    protected abstract fun log(priority: LogPriority, tag: String?, message: String, t: Throwable?)

    override fun changeLogPriority(priority: LogPriority) {
        prio = priority
    }

    override fun v(tag: String?, message: String) {
        prepareLog(LogPriority.VERBOSE, tag, t = null, message)
    }

    override fun d(tag: String?, message: String) {
        prepareLog(LogPriority.DEBUG, tag, t = null, message)
    }

    override fun i(tag: String?, message: String) {
        prepareLog(LogPriority.INFO, tag, t = null, message)
    }

    override fun w(tag: String?, message: String) {
        prepareLog(LogPriority.WARN, tag, t = null, message)
    }

    override fun e(tag: String?, message: String?, t: Throwable?) {
        prepareLog(LogPriority.ERROR, tag, t = t, message)
    }

    override fun json(priority: LogPriority, tag: String?, msg: String) {
        prepareLog(priority, tag, t = null, msg)
    }

    /** Return whether a message at `priority` or `tag` should be logged. */
    protected open fun isLoggable(tag: String?, priority: LogPriority): Boolean {
        if (priority < prio) return false
        return !(!TextUtils.isEmpty(tag) && blockTagSet.contains(tag))
    }

    private fun prepareLog(priority: LogPriority, tag: String?, t: Throwable?, msg: String?) {
        // Consume tag even when message is not loggable so that next message is correctly tagged.
        if (!isLoggable(tag, priority)) {
            return
        }

        var message = msg
        if (message.isNullOrEmpty()) {
            if (t == null) {
                return
            }
            message = getStackTraceString(t)
        } else {
            if (t != null) {
                message += "\n" + getStackTraceString(t)
            }
        }

        log(priority, tag, message, t)
    }

    private fun getStackTraceString(t: Throwable): String {
        // Don't replace this with Log.getStackTraceString() - it hides
        // UnknownHostException, which is not what we want.
        val sw = StringWriter(256)
        val pw = PrintWriter(sw, false)
        t.printStackTrace(pw)
        pw.flush()
        return sw.toString()
    }
}
隐藏人脸特效及美颜功能

请参考下面文档内容进行设置 隐藏人脸特效及美颜功能

Flutter问题排查

Android

工程问题排查

Flutter

切换平台调试时,建议执行 flutter clean 清理环境,避免异常问题。
比如说,先用 Android 调试后,执行 flutter clean 后,再使用 设备进行调试。

Android

  1. 启动后提示鉴权无效

    1. 排查鉴权文件和applicationId是否匹配一致

    1. CKApplication配置文件中的授权文件名称是否正确

  2. 使用道具无效果情况.

    1. 优先检查鉴权文件情况(问题1)

    2. 检查导入的剪辑素材和拍摄素材是否和鉴权以及applicationId匹配一致

    3. 以上都无问题的情况下, 提供一个控制台的打印日志

  3. 添加到您的应用程序的默认配置中,以强制解决将应用程序的 Target 和 Compile SDK 版本设置为 30 的冲突

  4. 替换素材:

把素材放到以下目录中即可:

为什么iOS只能支持在模拟器编译,而不能在模拟器运行呢?

因为SDK在架构上是一个多层架构,依赖了非常多的组件,例如渲染组件、鉴权组件、算法组件等,每个组件都是具体功能的重要组成部分,其中渲染组件是无法实现模拟器运行,因此我们只能支持在模拟器上编译通过,无法保证功能运行与真机一致。如果您想在模拟器上调试自己的UI,遇到任何问题可以联系我们。

如何实现边导出边上传的能力

iOS

EffectOne-iOS 边导出边上传

Android

EffectOne-Android 边导出边上传

iOS编译时候遇到如下报错解决方法

报错:

解决方案:在podfile中如果使用use_frameworks!,需要在如下截图中添加:sp.dependency 'CKi18n"sp.dependency 'Toast'

iOS自定义相册注意事项

自定义相册注意事项

如何在跳转导出页之前对导出的视频文件做预处理

Android

EO-Android 预览剪辑根据时长拦截跳转导出页面方案

iOS

EO-iOS 预览剪辑根据时长拦截跳转导出页面方案