2016-05-24 20 views
0

アプリでは、official youtube sampleと似たようなコードブロックがあり、googleのlib(com.google.api)を使用して動画ファイルをアップロードします。アップロードが順調に進行し、処理の最後にはidcom.google.api.services.youtube.model.Videoがログファイルに出力されます。だから私はアップロード自体が完璧に動作することを確信しています。YouTubeアップロードAPIはvideoIdを返しますが、動画はYouTubeで利用できません

小さいビデオファイルをアップロードする(15mb以下)。あなたのビデオをYouTubeで見ることは可能ですが、大きなビデオファイルの場合はありません。100+ mb大きなファイルがアップロードされ、ログファイルにyoutube idが表示されますが、ビデオはYouTube自体では利用できません。

ここで、ここで問題になる可能性がどのようなコードの抜粋

private static final String VIDEO_FILE_FORMAT = "video/*"; 
private static YouTube youtube; 
private static final List<String> SCOPES = Lists.newArrayList(
     YouTubeScopes.YOUTUBE, 
     YouTubeScopes.YOUTUBE_UPLOAD 
); 

private static int uploadToYoutube(BlablaConfiguration configuration, com.blabla.youtube.model.Video videoObject, String localFilename) { 
    LOG.debug("UPLOAD_YOUTUBE"); 
    try { 
     JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
     HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
     GoogleCredential credential = new GoogleCredential.Builder() 
       .setTransport(HTTP_TRANSPORT) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId(configuration.getClientEmail()) 
       .setServiceAccountPrivateKeyFromP12File(new File(configuration.getP12filename())) 
       .setServiceAccountScopes(SCOPES) 
       .setServiceAccountUser("[email protected]") 
       .build(); 



     youtube = new YouTube.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 
       .setApplicationName(configuration.getAppName()) 
       .build(); 

     LOG.info("Uploading..."); 

     Video videoObjectDefiningMetadata = new Video(); 
     VideoStatus status = new VideoStatus(); 
     status.setPrivacyStatus("public"); 
     videoObjectDefiningMetadata.setStatus(status); 

     VideoSnippet snippet = new VideoSnippet(); 

     StringBuffer title = new StringBuffer(); 
     try { 
      String yearStr = Integer.toString(videoObject.getYear()); 
      title.append(yearStr); 
     } catch (Exception e) { 
      // 
     } 

     String make = videoObject.getMake(); 
     if (make != null) { 
      title.append(" " + make); 
     } 

     String model = videoObject.getModel(); 
     if (model != null) { 
      title.append(" " + model); 
     } 

     String style = videoObject.getStyle(); 
     if (style != null) { 
      title.append(" " + style); 
     } 

     snippet.setTitle(title.toString()); 
     snippet.setDescription("Video uploaded via Blabla.com"); 

     List<String> tags = new ArrayList<String>(); 
     tags.add("http://www.blabla.com"); 
     snippet.setTags(tags); 

     videoObjectDefiningMetadata.setSnippet(snippet); 

     InputStreamContent mediaContent = new InputStreamContent(VIDEO_FILE_FORMAT, 
       new FileInputStream(localFilename) 
     ); 

     YouTube.Videos.Insert videoInsert = youtube.videos() 
       .insert("snippet,statistics,status", videoObjectDefiningMetadata, mediaContent); 

     MediaHttpUploader uploader = videoInsert.getMediaHttpUploader(); 

     uploader.setDirectUploadEnabled(false); 
     MediaHttpUploaderProgressListener progressListener = new MediaHttpUploaderProgressListener() { 
      public void progressChanged(MediaHttpUploader uploader) throws IOException { 
       switch (uploader.getUploadState()) { 
        case INITIATION_STARTED: 
         LOG.debug("Initiation Started"); 
         break; 
        case INITIATION_COMPLETE: 
         LOG.debug("Initiation Completed"); 
         break; 
        case MEDIA_IN_PROGRESS: 
         LOG.debug("Upload in progress"); 
         LOG.debug("Upload percentage: " + uploader.getProgress()); 
         break; 
        case MEDIA_COMPLETE: 
         LOG.debug("Upload Completed!"); 
         break; 
        case NOT_STARTED: 
         LOG.warn("Upload Not Started!"); 
         break; 
       } 
      } 
     }; 
     uploader.setProgressListener(progressListener); 
     Video returnedVideo = videoInsert.execute(); 
     String videoID = returnedVideo.getId(); 
     LOG.debug("\n================== Returned Video ==================\n"); 
     LOG.debug(" - Id: " + videoID); 
     videoObject.setYoutubeId(videoID); 
     return 0; 
    } catch (GoogleJsonResponseException e) { 
     LOG.error("GoogleJSONException"); 
     e.printStackTrace(); 
     return 1; 
    } catch (IOException e) { 
     LOG.error("IOException: " + e.getMessage()); 
     e.printStackTrace(); 
     return 2; 
    } catch (Throwable t) { 
     LOG.error("Throwable: " + t.getMessage()); 
     t.printStackTrace(); 
     return 3; 
    } 
} 

ですか? これについて何か考えていますか?

+0

は、あなたはコードがあなたの答えのために – Alok

+0

@Alokを試してみましたが、コードを投稿することができます。ビデオは昨日アップロードされ、後処理する必要があると仮定して、10分のビデオでは時間がかかるはずがないと思います。 – hahn

答えて

0

動画がアップロードされた後、Youtubeは多くの後処理を行いますが、この時間は動画の時間に比例します。動画が長くなるほど、処理に時間がかかります。

これは、ビデオIDがビデオに割り当てられているときに、まだ表示されない理由を説明します。

もう一度やり直してください。

https://www.quora.com/Why-does-YouTube-take-so-long-to-process-videos-after-theyre-uploaded

+0

感謝を含めて、私は質問を更新しました – hahn

+0

この問題が解決しない場合、私は考えることができる唯一の説明は、動画が審査の対象になっている可能性があるということです。Googleは多くのビデオ処理アルゴリズムを使用してコンテンツが著作権、 Youtubeサポートで確認してください、ありますか? – rhcw

関連する問題