我正在尝试将我的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,消息:上传视频文件时出现问题。请使用其他文件再试一次。}
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的视频上传示例。
花了1.5天后,我终于可以正常工作了。基本思想是将视频作为multipart / form-data发送,在这种情况下,我使用的是byteArray。我是从Bhavesh Hirpara给出的答案中得到这个想法的:可以使用Facebook SDK将视频从SD卡上传到Facebook吗?
还有一些警告,感觉更像是Facebook Android SDK中的错误,但它们是:
这是工作代码。
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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句