gpt4 book ai didi

android - Android应用中的YouTube视频上传错误

转载 作者:行者123 更新时间:2023-12-03 06:03:04 26 4
gpt4 key购买 nike

我需要在Android应用中将视频上传到Youtube。

我试图通过HTTP Post方法上传视频..

首先,我从GoogleLogin auth获得授权 token 。

然后,我尝试使用HTTP Post请求上传视频。

下面是我的代码。

        HttpURLConnection conn = null;
// BufferedReader br = null;
DataOutputStream dos = null;
InputStream inStream = null;

// InputStream is = null;
// OutputStream os = null;
// boolean ret = false;
// String StrMessage = "";
String path = "/home/siva/test_data/";
String existingFileName = "test5.3gp";
File videoFile = new File(str);

// String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "b93dcbA3";
String ver = "2";

int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 2048;
// String responseFromServer = "";
try {
FileInputStream fileInputStream = new FileInputStream(str);

URL url = new URL(
"http://uploads.gdata.youtube.com/feeds/api/users/default/uploads");
conn = (HttpURLConnection) url.openConnection();

// Allow Inputs
conn.setDoInput(true);
// Allow Outputs
conn.setDoOutput(true);
// Don't use a cached copy.
conn.setUseCaches(false);

// Use a post method.
conn.setRequestMethod("POST");
// conn.setRequestProperty("Connection","Keep-Alive");
conn.setRequestProperty("Host", "uploads.gdata.youtube.com");
conn.setRequestProperty("Authorization", "GoogleLogin auth="
+ token);
conn.setRequestProperty("GData-Version", ver);
conn.setRequestProperty("X-Gdata-Client", clientId);
conn.setRequestProperty("X-GData-Key", "key=" + developerKey);
conn.setRequestProperty("Slug", "VID_20120502_122127.3gp");
conn.setRequestProperty("Content-Type",
"multipart/related;boundary=" + boundary);
// conn.setRequestProperty("Content-Length", ""+videoFile.length());
conn.setRequestProperty("Connection", "close");
conn.setRequestProperty("Content-Type",
"application/atom+xml;charset=UTF-8");
//conn.setRequestProperty("Content-Type", "video/*");
conn.setRequestProperty("Content-Type", "video/3gpp");
//conn.setRequestProperty("Content-Transfer-Encoding", "binary");
conn.setRequestProperty("Content-Transfer-Encoding", "UTF-8");


StringBuilder test_xml = new StringBuilder();
test_xml.append("<?xml version='1.0'encoding='UTF-8'?>\n");
test_xml.append("<entry xmlns=\"http://www.w3.org/2005/Atom\"\n");

test_xml.append("xmlns:media=\"http://search.yahoo.com/mrss/\"\n");
test_xml.append("xmlns:yt=\"http://gdata.youtube.com/schemas/2007\">\n");
test_xml.append("<media:group>\n");
test_xml.append("<media:title type=\"plain\">TestVideo</media:title>\n");
test_xml.append("<media:descriptiontype=\"plain\">\nTest Video\n</media:description>\n");
test_xml.append("<media:category\n");
test_xml.append("scheme=\"http://gdata.youtube.com/schemas/2007/categories.cat\">People\n");
test_xml.append("</media:category>\n");
test_xml.append("<media:keywords>toast,wedding</media:keywords>\n");
test_xml.append("</media:group>\n");
test_xml.append("</entry>");

String requestBody = new String(test_xml.toString().getBytes(),"UTF-8");
int lngth = requestBody.length();
conn.setRequestProperty("Content-Length", ""+lngth);

dos = new DataOutputStream(conn.getOutputStream());
dos.write((twoHyphens + boundary).toString().getBytes());
dos.write(test_xml.toString().getBytes("UTF-8"));

// System.out.println(test_xml.toString());
dos.write((twoHyphens + boundary).toString().getBytes());

// create a buffer of maximum size
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];

// read file and write it into form
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
// dos.flush();
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}


dos.write((twoHyphens + boundary + twoHyphens).toString()
.getBytes());

// close streams
fileInputStream.close();
dos.flush();
dos.close();

} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}

StringBuilder outputBuilder = new StringBuilder();
try {
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
inStream = conn.getInputStream();
} else {
inStream = conn.getErrorStream();
}

String string;
if (inStream != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(inStream));
while (null != (string = reader.readLine())) {

outputBuilder.append(string).append("\n");
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (inStream != null) {
try {
inStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

我收到如下错误。
05-05 15:43:18.391: W/System.err(2938): java.io.IOException: exceeded content-length limit of 476 bytes
05-05 15:43:18.391: W/System.err(2938): at org.apache.harmony.luni.internal.net.www.protocol.http.RetryableOutputStream.write(RetryableOutputStream.java:58)
05-05 15:43:18.391: W/System.err(2938): at java.io.DataOutputStream.write(DataOutputStream.java:99)
05-05 15:43:18.391: W/System.err(2938): at java.io.FilterOutputStream.write(FilterOutputStream.java:105)
05-05 15:43:18.391: W/System.err(2938): at com.VidoePick.VideoPickActivity.testvideo(VideoPickActivity.java:158)
05-05 15:43:18.391: W/System.err(2938): at com.VidoePick.VideoPickActivity.onActivityResult(VideoPickActivity.java:73)
05-05 15:43:18.391: W/System.err(2938): at android.app.Activity.dispatchActivityResult(Activity.java:3908)
05-05 15:43:18.391: W/System.err(2938): at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
05-05 15:43:18.391: W/System.err(2938): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
05-05 15:43:18.391: W/System.err(2938): at android.app.ActivityThread.access$2000(ActivityThread.java:117)
05-05 15:43:18.391: W/System.err(2938): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
05-05 15:43:18.391: W/System.err(2938): at android.os.Handler.dispatchMessage(Handler.java:99)
05-05 15:43:18.391: W/System.err(2938): at android.os.Looper.loop(Looper.java:130)
05-05 15:43:18.391: W/System.err(2938): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-05 15:43:18.391: W/System.err(2938): at java.lang.reflect.Method.invokeNative(Native Method)
05-05 15:43:18.391: W/System.err(2938): at java.lang.reflect.Method.invoke(Method.java:507)
05-05 15:43:18.391: W/System.err(2938): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-05 15:43:18.391: W/System.err(2938): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-05 15:43:18.391: W/System.err(2938): at dalvik.system.NativeStart.main(Native Method)
05-05 15:43:18.401: W/System.err(2938): java.io.IOException: content-length promised 476 bytes, but received 10
05-05 15:43:18.401: W/System.err(2938): at org.apache.harmony.luni.internal.net.www.protocol.http.RetryableOutputStream.close(RetryableOutputStream.java:48)
05-05 15:43:18.401: W/System.err(2938): at org.apache.harmony.luni.internal.net.www.protocol.http.RetryableOutputStream.contentLength(RetryableOutputStream.java:64)
05-05 15:43:18.401: W/System.err(2938): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.prepareRequestHeaders(HttpURLConnectionImpl.java:864)
05-05 15:43:18.401: W/System.err(2938): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.writeRequestHeaders(HttpURLConnectionImpl.java:787)
05-05 15:43:18.401: W/System.err(2938): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1028)
05-05 15:43:18.401: W/System.err(2938): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:726)
05-05 15:43:18.401: W/System.err(2938): at com.VidoePick.VideoPickActivity.testvideo(VideoPickActivity.java:195)
05-05 15:43:18.401: W/System.err(2938): at com.VidoePick.VideoPickActivity.onActivityResult(VideoPickActivity.java:73)
05-05 15:43:18.401: W/System.err(2938): at android.app.Activity.dispatchActivityResult(Activity.java:3908)
05-05 15:43:18.401: W/System.err(2938): at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
05-05 15:43:18.401: W/System.err(2938): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
05-05 15:43:18.401: W/System.err(2938): at android.app.ActivityThread.access$2000(ActivityThread.java:117)
05-05 15:43:18.401: W/System.err(2938): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
05-05 15:43:18.401: W/System.err(2938): at android.os.Handler.dispatchMessage(Handler.java:99)
05-05 15:43:18.401: W/System.err(2938): at android.os.Looper.loop(Looper.java:130)
05-05 15:43:18.401: W/System.err(2938): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-05 15:43:18.401: W/System.err(2938): at java.lang.reflect.Method.invokeNative(Native Method)
05-05 15:43:18.401: W/System.err(2938): at java.lang.reflect.Method.invoke(Method.java:507)
05-05 15:43:18.401: W/System.err(2938): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-05 15:43:18.401: W/System.err(2938): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-05 15:43:18.401: W/System.err(2938): at dalvik.system.NativeStart.main(Native Method)

任何帮助将不胜感激。

最佳答案

如果您只想上传,则可以使用

android-ytd

逐步完成教程,查看此answer

关于android - Android应用中的YouTube视频上传错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10460940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com