当前位置: 首页 > 知识库问答 >
问题:

上传大视频文件使用改型(Android)有OutOfMemoryError

傅玮
2023-03-14

对不起我的英语。我试着在服务器上上传大的视频文件,这个文件超过50 MB。当我上传小文件时,一切都很好。在清单中,我设置了Android:largeheap=“true”Android:hardwareaccelerated=“false”,这对我没有帮助。下面是我的代码:

接口

@Multipart
@POST("/api/upload")
Observable<UploadVideoResponse> uploadVideo(@Header("Authorization") String userToken,
                                            @Part MultipartBody.Part video);

方法返回文件:

public static MultipartBody.Part getMultipartVideoBody(String pathVideo) {
    try {
        File videoFile = getFile(pathVideo);
        RequestBody videoBody = RequestBody.create(MediaType.parse("video/*"), videoFile);
        String fileName = videoFile.getName();
        return MultipartBody.Part.createFormData("video", fileName, videoBody);
    }catch (Exception e){
        Log.e("File ", e.getMessage());
        return null;
    }
}

服务器上的方法上载

new DefaultApi().uploadVideo(
                Utils.getHeaderToken(),
                Utils.getMultipartVideoBody(pathVideo)
        ).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSubscribe(videoView::showLoading)
                .doOnTerminate(videoView::hideLoading)
                .subscribe(data -> {
                            videoView.setData(data);
                        }
                        , throwable -> {

                        }
                );
    }

错误:

抛出OutOfMemoryError“分配100390006字节分配失败,16777216空闲字节和92MB直到OOM”

全stacktrace

public final class LoggingInterceptor implements Interceptor {

    private final Interceptor mLoggingInterceptor;

    private LoggingInterceptor() {
        mLoggingInterceptor = new HttpLoggingInterceptor()
                //.setLogLevel(RestAdapter.LogLevel.FULL)
                .setLevel(BuildConfig.DEBUG ? Level.BODY : Level.NONE);
    }

    @NonNull
    public static Interceptor create() {
        return new LoggingInterceptor();
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        return mLoggingInterceptor.intercept(chain);
    }

}
return new OkHttpClient.Builder()
                .connectTimeout(300, TimeUnit.SECONDS)
                .addInterceptor(LoggingInterceptor.create())
                .addInterceptor(logging)
                .build();

共有1个答案

公羊光明
2023-03-14

我在使用referfit上载大型视频时也遇到过同样的错误,但是删除
logginginterceptor.setlevel(httplogginginterceptor.level.body)
或set是因为none对我有效。

 类似资料:
  • 我正在尝试通过谷歌应用引擎将一个大视频上传到谷歌云存储中。 我遵循了这篇文章中的原则,这篇文章提到了上传一个大的电子表格。在GCP应用引擎中无法将大文件上传到Python+Flask 这是我的后端代码 这是我的前端代码。

  • 我已经尝试上传大型视频到服务器使用Restful API的帮助下改型。但是每次我都无法通过这个场景上传它。这对100 MBs左右的小视频很好,但它不符合大于300 MBs的条件。 向服务器上传非常大的文件需要什么?Ans:我正在创建像(网飞,亚马逊Prime等)的网络系列播放应用程序,也有一个管理员的角色。管理员可以通过手机上传web系列,其大小可能非常大,大约在400 MB到1 GB之间。 请提

  • 问题内容: 是的,这是一个冗长的问题,涉及很多细节… 所以,我的问题是:如何将分段上传到Vimeo? 对于想要在自己的计算机上进行复制和调试的任何人: 这是您需要的东西: 我的代码在这里。 包括在此处找到的抄写员库 拥有至少大于10 MB的有效视频文件(mp4),并将其放在目录中,或更改该代码以指向您所在的位置。 而已!谢谢你的协助! 重大更新: 我在此处的代码中为Vimeo保留了有效的API密钥

  • 本文向大家介绍ASP.NET webUploader上传大视频文件相关web.config配置,包括了ASP.NET webUploader上传大视频文件相关web.config配置的使用技巧和注意事项,需要的朋友参考一下 在webuploader上传大文件时必须配置一下,不然请求后台处理程序时,会请求超时。出现404! 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,

  • 当我调用API时,我得到了一个AWS S3存储桶URL在s3 URL上,我试图通过改造上传文件,但我得到了以下错误 我正在通过PUT方法进行多部分上传。在postman上,它可以工作,但不能从Android 相关改造

  • 接口说明 上传视频文件 API地址 POST /api/marker/1.0.0/uploadVideo 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 dataGuid string form 是 场景GUID file string form 是 视频文件 响应字段说明 参数 类型 说明 mp4UploadPath String 视频文件上传地址 响应成功示例 { "