2013-08-26 2 views
1

이 같은 자바 API 사용하여 YouTube에 동영상을 업로드하려고 :이력서 업로드 사용하여 자바 유튜브 API

private Video uploadVideo(final YouTube youtube, final Video video, final InputStreamContent mediaContent) 
      throws IOException { 
     YouTube.Videos.Insert videoInsert = youtube.videos().insert("snippet,statistics,status", video, mediaContent); 

     MediaHttpUploader uploader = videoInsert.getMediaHttpUploader(); 
     uploader.setDirectUploadEnabled(false); 
     uploader.setProgressListener(progressListener); 
     return videoInsert.execute(); 
    } 
} 

나는 느리고 불안정 인터넷 연결이를 내가 얻을 수 있다면 정말 도움이 될 것입니다 재개 가능한 업로드가 작동합니다. 설명서 herehere은 "setDirectUploadEnabled (false)"가 완전히 트릭을 수행해야한다고 제안하는 것 같습니다. 음 ... 분명히 그렇지 않습니다.

인터넷 연결이 중단되면 IOException이 발생하고 자동 업로드가 재개되지 않습니다.

업로드를 재개하려면 어떻게해야합니까?

답변

2

설명서가 실제 구현에 뒤처져있는 것 같습니다. 운이 좋으면 오픈 소스이며 단순히 소스 코드를 읽으면 솔루션을 찾을 수 있습니다. IOException가 업로드 동안 발생하는 경우 com.google.api.client.googleapis.media.MediaUploadErrorHandler는 예외를 처리하는 데 사용됩니다,

: 이 버전 1.16-RC에 관한 것입니다. 이 핸들러는 또한 업로드를 다시 시작하는 것을 처리하지만 HTTP 요청에 등록 된 또 다른 예외 핸들러가 IOException을 성공적으로 처리하는 경우에만 수행합니다. 현재 버전에서 댓글을 나타냅니다으로이 전제 조건은 향후 변경 될 수 있습니다 : 예외 처리기 IO 기본 명시 적으로 설정해야합니다 널 하나

// TODO(peleyal): figure out what is best practice - call serverErrorCallback only if I/O 
// exception was handled, or call it regardless 

때문에.

youtube = new YouTube.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(
      "youtube-cmdline-uploadvideo-sample").build(); 

는이 예를 작동시킬 읽어 줄을 수정하려면 :

예제 소스 코드 here이 같은 YouTube 객체를 초기화하십시오 YouTube -object를 구축 할 때 수행 할 수 있습니다

youtube = new YouTube.Builder(HTTP_TRANSPORT, JSON_FACTORY, new HttpRequestInitializer() {   
    @Override 
    public void initialize(HttpRequest request) throws IOException { 
    credential.initialize(request); 
    request.setIOExceptionHandler(new HttpBackOffIOExceptionHandler(new ExponentialBackOff())); 
    } 
}); 

HTTPRequest이 생성 될 때마다 HTTPRequestInitializer이 호출되어 IOExceptionHandler가 설정됩니다. 그 곳에서 MediaUploadErrorHandler은 예외를 처음으로 HttpBackOffIOExceptionHandler으로 전달하며 잠시 기다려 재 시도를 허용 할 수 있습니다. 그 후에 MediaUploadErrorHandler은 업로드를 계속 시도합니다.

credentialHttpRequestInitializer이므로 실행하려면 두 초기화 프로그램이 모두 필요합니다. 따라서 필자가 추가 한 Initializer 내에서 credential이 호출됩니다.

+0

감사합니다. - 지금까지 내가 지금까지 찾을 수 있었던 것보다 훨씬 좋습니다! 그러나 그것은 완전한 "재개 가능한"업로드가 아닙니다. 응용 프로그램을 다시 시작한 후에도 API를 다시 시작할 수 없습니다. –