2014-01-20 3 views
0

Я работаю над приложением Android, которое записывает видео и позволяет пользователю загружать его прямо на YouTube с помощью API данных YouTube версии 3. Код подобен тому, который описан в:YouTube API 3 Загрузить видео - Недействительные учетные данные - Android

YouTube API 3 Upload Video - Access not configured - Android

Он успешно загружает файлы на YouTube в большинстве случаев, однако, если файл очень большой (~ часов видеоматериала, несколько Гб данных), загрузка не выполняется. Загрузка достигает примерно на полпути через файл 4 Гб, а затем производит это сообщение:

{ 
    "code": 401, 
    "errors": [ 
     { 
      "domain": "global", 
      "location": "Authorization", 
      "locationType": "header", 
      "message": "Invalid Credentials", 
      "reason": "authError" 
     } 
    ], 
    "message": "Invalid Credentials" 
} 

Там нет никаких изменений между успешным и неудачным кодом. Учетные данные совпадают. Загрузка выполняется примерно за час до сбоя.

Другая потенциально полезная информация содержится в Android StackTrace:

W/GLSUser(1794): [amz][amz] Permission for com.package.name to access oauth2: https://www.googleapis.com/auth/youtube.upload will be managed remotely. 
W/qdhwcomposer(318): Excessive delay reading vsync: took 1182 ms 
W/HttpTransport(8543): exception thrown while executing request 
W/HttpTransport(8543): java.io.IOException: unexpected end of stream 
W/HttpTransport(8543): at libcore.net.http.FixedLengthOutputStream.close(FixedLengthOutputStream.java:58) 
W/HttpTransport(8543): at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:81) 
W/HttpTransport(8543): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:964) 
W/HttpTransport(8543): at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequest(MediaHttpUploader.java:559) 
W/HttpTransport(8543): at com.google.api.client.googleapis.media.MediaHttpUploader.resumableUpload(MediaHttpUploader.java:434) 
W/HttpTransport(8543): at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:345) 
W/HttpTransport(8543): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:418) 
W/HttpTransport(8543): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343) 
W/HttpTransport(8543): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460) 
W/HttpTransport(8543): at com.multplx.android.trickbook.uploader.VideoUploadAsyncTask.doInBackground(VideoUploadAsyncTask.java:133) 
W/HttpTransport(8543): at com.multplx.android.trickbook.uploader.VideoUploadAsyncTask.doInBackground(VideoUploadAsyncTask.java:1) 
W/HttpTransport(8543): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
W/HttpTransport(8543): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
W/HttpTransport(8543): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
W/HttpTransport(8543): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
W/HttpTransport(8543): at java.lang.Thread.run(Thread.java:841) 
W/VideoUploadAsyncTask(8543): @ Exception : com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized 

Что соответствует:

try { 
    // https://developers.google.com/youtube/v3/docs/videos/insert 
    Insert videoInsert = inserts[0]; 
    uploader = videoInsert.getMediaHttpUploader(); 
    uploader.setProgressListener(progressListener); 
    Video returnedVideo = videoInsert.execute(); 
} catch (IOException ioe) { 
    ... 
} 

ответ

0

Похоже, ваша загрузка принимает более одного часа (или меньше), что токен доступа остался жить.

Я понятия не имею, если/как клиентская библиотека имеет дело с истекающим токеном, поэтому вы можете обращаться с ней самостоятельно в progressListener.

Смежные вопросы