【问题标题】:How to upload videos to Facebook using Facebook Android SDK 4.x?如何使用 Facebook Android SDK 4.x 将视频上传到 Facebook?
【发布时间】:2015-05-24 21:37:46
【问题描述】:

我正在尝试将我的 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: FacebookApiException, message: 上传视频文件时出现问题。请使用其他文件重试。}

1.

    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);
    File videoFile = new File(videoPath);
    ParcelFileDescriptor descriptor = ParcelFileDescriptor.open(videoFile, ParcelFileDescriptor.MODE_READ_ONLY);
    params.putParcelable("source", descriptor);
    params.putString("description", " #SomeTag");
    request.setParameters(params);
    request.executeAsync();

2.

    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();

3.

    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();

如果有任何帮助,我将不胜感激。我也没有从 Facebook 找到任何用于新 SDK 的视频上传示例。

【问题讨论】:

  • 尝试通过intent发送视频到fb!

标签: java android facebook facebook-android-sdk


【解决方案1】:

花了 1.5 天后,我终于让它工作了。基本思想是将视频作为 multipart/form-data 发送,在这种情况下,我使用的是 byteArray。我从Bhavesh Hirpara 在这个问题上给出的答案中得到了这个想法: Is uploading videos from an SD Card to Facebook possible with the Facebook SDK?

还有一些注意事项,感觉更像是 Facebook Android SDK 中的错误,但它们是:

  1. 请勿在请求参数中包含“source”或“file_url”,即使 FB 文档如此说明。
  2. 在请求参数中包含针对某些字符串(例如视频文件名)的视频数据。

这是工作代码。

    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();
    }

【讨论】:

  • 在您的解决方案中,您将整个视频文件保存在内存中。如果视频是 100MB 怎么办?还是我错过了什么?
【解决方案2】:

试试这个。 Uri videoFileUri = ... ShareVideo = 新 ShareVideo.Builder() .setLocalUrl(videoUrl) 。建造(); ShareVideoContent 内容 = 新 ShareVideoContent.Builder() .setVideo(分享视频) .build();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2012-10-03
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多