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

使用OkhttpClient 3.2和Retrifit 2发送视频时的java.net.SocketTimeoutException

梁丘宏硕
2023-03-14

我使用OkhttpClient使用OkhttpClient 3.2Retrofit2向服务器发送一个15秒长的视频,有时它工作正常,但有时我会得到下面的错误,这是非常不一致的。

socketTimeoutException:超时

private void sendVideoToServer( final String videoFilePath,final String api_key)
    {
        File videoFile = new File(videoFilePath);
        RequestBody videoBody = RequestBody.create(MediaType.parse("video/*"), videoFile);
        MultipartBody.Part vFile = MultipartBody.Part.createFormData("video", videoFile.getName(), videoBody);

        OkHttpClient httpClient = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        okhttp3.Request.Builder ongoing = chain.request().newBuilder();
                        ongoing.addHeader("authorization", api_key);
                        return chain.proceed(ongoing.build());
                    }
                })
                .build();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(AppConfig.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient)
                .build();

        VideoInterface videoInterface = retrofit.create(VideoInterface.class);
        Call<ResultObject> serverCom = videoInterface.sendVideoToServer(vFile);

        serverCom.enqueue(new Callback<ResultObject>() {
            @Override
            public void onResponse(Call<ResultObject> call, retrofit2.Response<ResultObject> response) {
                ResultObject result = response.body();
                if(!TextUtils.isEmpty(result.getSuccess())){
                    Log.d("video Result " , result.getSuccess());
                }
            }

            @Override
            public void onFailure(Call<ResultObject> call, Throwable t) {
               Log.d("video error",t.toString());
            }
        });
    }
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        okhttp3.Request.Builder ongoing = chain.request().newBuilder();
                        ongoing.addHeader("authorization", api_key);
                        return chain.proceed(ongoing.build());
                    }
                });
builder.connectTimeout(5, TimeUnit.MINUTES)
       .writeTimeout(5, TimeUnit.MINUTES)
       .readTimeout(5, TimeUnit.MINUTES);
OkHttpClient httpClient = builder.build();

共有1个答案

史鸿运
2023-03-14

尝试传递实际文件对象

  file = new File(tasks.getImageUrl());
            requestFile =
                    RequestBody.create(MediaType.parse("multipart/form-data"), file);
 body =  MultipartBody.Part.createFormData("file", file.getName(), requestFile);



 sendVideo(body);
 类似资料:
  • 我有一个YouTube频道。我想为我的网站添加新功能: 用户使用其google帐户进行身份验证。 用户创建自己的视频播客(使用此小部件),并将其上载到自己的youtube帐户。 之后,我使用YouTube API将用户视频移动到我的频道 有没有可能允许一些用户在我的频道上传他们账户的视频?也许用户可以通过Google Plus做到这一点? 附注:我看过一些文章

  • 我正在编写一个Swift应用程序,通过网络发送iPhone摄像头的视频输入(帧),这样我以后就可以在macOS应用程序上显示它们了。

  • 我有一个网络服务,可以按名字搜索一些视频。它会把视频的名字和图像传给我。我应该怎么说哪个图像是哪个视频的?我应该怎么说才能播放 包裹通讯。视频 导入java。util。列表 导入android。应用程序。活动 导入android。操作系统。异步任务; 导入android。操作系统。捆 导入android。看法看法 导入android。看法看法一位听众; 导入android.widget.按钮; 导

  • 问题内容: 这是从网络摄像机保存视频的代码 当我在python中运行它时出现以下错误 请帮我解决这个错误 问题答案: Python / OpenCV 2.4.9不支持cv2.VideoWriter_fourcc,即3.x版本。如果您使用的是2.4.x: 更换 与 这里的好例子如何使用OpenCV和Python录制视频 转载以供参考:

  • 我有一个应用程序,可以使用Facebook SDK将本机(MOV文件)视频发布到FacebookiOS。它一直运行正常,直到几周前才出现以下错误: 完整的错误字符串是: error Domain = com . Facebook . SDK Code = 5 "操作无法完成。(com.facebook.sdk错误5。)" UserInfo = 0x1ea 42880 { com . Faceboo

  • 我使用aws kinesis video stream webRTC在reactjs中进行视频聊天。一切都很好。但是我想把视频存储在s3 Bucket中。我应该如何实现这个视频存储?