Java 如何使用Facebook Android SDK 4.x将视频上传到Facebook?

Java 如何使用Facebook Android SDK 4.x将视频上传到Facebook?,java,android,facebook,facebook-android-sdk,Java,Android,Facebook,Facebook Android Sdk,我正在尝试将我的Facebook SDK从3.20更改为4.x。新的SDK破坏了视频上传 下面是3.20中的代码: Request request = Request.newUploadVideoRequest(session, new File(videoPath), callback); Bundle params = request.getParameters(); params.putString("title", albumName); params.p

我正在尝试将我的Facebook SDK从3.20更改为4.x。新的SDK破坏了视频上传

下面是3.20中的代码:

    Request request = Request.newUploadVideoRequest(session, new File(videoPath), callback);
    Bundle params = request.getParameters();
    params.putString("title", albumName);
    params.putString("description", " #SomeTag");
    request.setParameters(params);
    request.executeAsync();
下面是我在新的SDK 4.x中尝试过的不同的东西。但每次我都会犯同样的错误:

{FacebookServiceException:httpResponseCode:500,facebookErrorCode:6000,facebookErrorType:FaceBookApiexException,消息:上载视频文件时出现问题。请使用其他文件重试。}

一,

二,

三,

我非常感谢你的帮助。我也没有从Facebook上找到新SDK的视频上传示例。

试试这个。 Uri videoFileUri=。。。 ShareVideo=新建ShareVideo.Builder() .setLocalUrl(视频URL) .build(); ShareVideoContent=新的ShareVideoContent.Builder() .setVideo(共享视频)
.build()

花了1.5天后,我终于让它工作了。基本思想是将视频作为多部分/表单数据发送,在本例中,我使用的是byteArray。我的想法来自于对这个问题的回答:

还有几个警告,感觉更像是Facebook Android SDK中的bug,但它们是:

  • 不要在请求参数中包含“源”或“文件url”,即使FB文档中有这样的说明
  • 在请求参数中包含一些字符串(例如视频文件名)的视频数据
  • 这是工作代码

        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        GraphRequest request = GraphRequest.newPostRequest(accessToken, "me/videos", null, callback);
        Bundle params = request.getParameters();
        try {
            byte[] data = readBytes(videoPath);
            params.putByteArray("video.mp4", data);
            params.putString("title", albumName);
            params.putString("description", " #SomeTag");
            request.setParameters(params);
            request.executeAsync();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    
    
        public byte[] readBytes(String dataPath) throws IOException {
    
            InputStream inputStream = new FileInputStream(dataPath);
            ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
    
            byte[] buffer = new byte[1024];
    
            int len;
            while ((len = inputStream.read(buffer)) != -1) {
                byteBuffer.write(buffer, 0, len);
            }
    
            return byteBuffer.toByteArray();
        }
    

    尝试通过intent向fb发送视频!我试过了,但这不适用于大型视频,只适用于高达12MB的视频。来源如下:在您的解决方案中,您将整个视频文件保存在内存中。如果视频是100MB怎么办?还是我错过了什么?
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        GraphRequest request = GraphRequest.newPostRequest(accessToken, "me/videos", null, callback);
        Bundle params = request.getParameters();
        params.putString("file_url", videoPath);
        params.putString("title", albumName);
        byte[] byteVideo = getFileByteArray(videoPath);
        params.putByteArray("source", byteVideo);
        params.putString("description", " #SomeTag");
        request.setParameters(params);
        request.executeAsync();
    
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        GraphRequest request = GraphRequest.newPostRequest(accessToken, "me/videos", null, callback);
        Bundle params = request.getParameters();
        params.putString("file_url", videoPath);
        params.putString("title", albumName);
        params.putString("source", "{video-data}");
        params.putString("description", " #SomeTag");
        request.setParameters(params);
        request.executeAsync();
    
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        GraphRequest request = GraphRequest.newPostRequest(accessToken, "me/videos", null, callback);
        Bundle params = request.getParameters();
        try {
            byte[] data = readBytes(videoPath);
            params.putByteArray("video.mp4", data);
            params.putString("title", albumName);
            params.putString("description", " #SomeTag");
            request.setParameters(params);
            request.executeAsync();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    
    
        public byte[] readBytes(String dataPath) throws IOException {
    
            InputStream inputStream = new FileInputStream(dataPath);
            ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
    
            byte[] buffer = new byte[1024];
    
            int len;
            while ((len = inputStream.read(buffer)) != -1) {
                byteBuffer.write(buffer, 0, len);
            }
    
            return byteBuffer.toByteArray();
        }