2017-10-12 54 views
6

Do generowania kodu zmodyfikowałem próbki z Google'a na gitHub.Czy mogę dodać adnotacje lub "ekran końcowy" do wideo, gdy przesyłam je za pomocą apletu Java youtube?

Wszystko idzie, a przesyłanie wideo nie stanowi problemu, ale teraz muszę umieścić w moich filmach adnotacje lub "ekran końcowy", ponieważ muszę przekierować użytkowników do mojej witryny po tym, jak zobaczyli mój "podgląd wideo".

Tak, pracy jest coś takiego:

1) tytuł wstawki użytkowników i opis ze strony JSP.

2) Po kliknięciu przycisku oprogramowanie pobiera poświadczenia użytkownika przechowywane w mojej bazie danych, a następnie przekazuje wszystkie parametry do metody zamieszczonej poniżej.

3) klasa przesyła wideo na YouTube.

Teraz moje pytanie brzmi: jest łatwy sposób, aby "dołączyć" moje linki do przesłanego wideo?

Powinienem użyć adnotacji, wezwania do działania lub dowolnego rodzaju nakładki/przycisku w obszarze wideo.

Nie ma znaczenia, czy nakładka trwa przez cały czas trwania wideo, czy pojawia się tylko na końcu wideo.

Mam nadzieję, że ktoś może mi pomóc! Mam nadzieję, że Google poprawi dokumentację w lepszy sposób, ponieważ zwariowałem na implementacji API YouTube.

Jest to fragment mojego kodu źródłowego:

public static void upload(String jsonString, String videoPath, String title , String description, String articleTags, HttpServletRequest request) { 

    // This OAuth 2.0 access scope allows an application to upload files 
    // to the authenticated user's YouTube channel, but doesn't allow 
    // other types of access. 
    List<String> scopes = Lists.newArrayList("https://www.googleapis.com/auth/youtube.upload"); 

    try { 

     // Authorize the request. 
     JSONObject jsonObj = new JSONObject(jsonString); 

     GoogleCredential credential = new GoogleCredential.Builder() 
              .setClientSecrets(jsonObj.getString("client_id"), jsonObj.getString("client_secret")) 
              .setJsonFactory(Auth.JSON_FACTORY).setTransport(Auth.HTTP_TRANSPORT).build() 
              .setRefreshToken(jsonObj.getString("refresh_token")).setAccessToken(jsonObj.getString("access_token")); 


     // This object is used to make YouTube Data API requests. 
     youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential).setApplicationName("virtual-cms-video-upload").build(); 

     System.out.println("Uploading: " + videoPath); 

     // Add extra information to the video before uploading. 
     Video videoObjectDefiningMetadata = new Video(); 

     // Set the video to be publicly visible. This is the default 
     // setting. Other supporting settings are "unlisted" and "private." 
     VideoStatus status = new VideoStatus(); 
     status.setPrivacyStatus("public"); 
     videoObjectDefiningMetadata.setStatus(status); 



     // Most of the video's metadata is set on the VideoSnippet object. 
     VideoSnippet snippet = new VideoSnippet(); 

     // This code uses a Calendar instance to create a unique name and 
     // description for test purposes so that you can easily upload 
     // multiple files. You should remove this code from your project 
     // and use your own standard names instead. 
     snippet.setTitle  (title  ); 
     snippet.setDescription(description); 



     if(!articleTags.trim().equals("")){    

      // Set the keyword tags that you want to associate with the video. 
      List<String> tags = new ArrayList<String>(); 

      for(int i = 0; i < articleTags.split(",").length ; i++){ 

       tags.add(articleTags); 

      } 

      snippet.setTags(tags); 

      // Add the completed snippet object to the video resource. 
      videoObjectDefiningMetadata.setSnippet(snippet); 

     } 

     //InputStreamContent mediaContent = new InputStreamContent(VIDEO_FILE_FORMAT,UploadYouTubeVideo.class.getClassLoader().getResourceAsStream(videoPath)); 
     InputStreamContent mediaContent = new InputStreamContent(VIDEO_FILE_FORMAT,new java.io.FileInputStream(new File(videoPath))); 

     // Insert the video. The command sends three arguments. The first 
     // specifies which information the API request is setting and which 
     // information the API response should return. The second argument 
     // is the video resource that contains metadata about the new video. 
     // The third argument is the actual video content. 
     YouTube.Videos.Insert videoInsert = youtube.videos().insert("snippet,statistics,status", videoObjectDefiningMetadata, mediaContent); 

     // Set the upload type and add an event listener. 
     MediaHttpUploader uploader = videoInsert.getMediaHttpUploader(); 

     // Indicate whether direct media upload is enabled. A value of 
     // "True" indicates that direct media upload is enabled and that 
     // the entire media content will be uploaded in a single request. 
     // A value of "False," which is the default, indicates that the 
     // request will use the resumable media upload protocol, which 
     // supports the ability to resume an upload operation after a 
     // network interruption or other transmission failure, saving 
     // time and bandwidth in the event of network failures. 
     uploader.setDirectUploadEnabled(false); 

     MediaHttpUploaderProgressListener progressListener = new MediaHttpUploaderProgressListener() { 
      public void progressChanged(MediaHttpUploader uploader) throws IOException { 
       switch (uploader.getUploadState()) { 
        case INITIATION_STARTED: 
         System.out.println("Initiation Started"); 
         break; 
        case INITIATION_COMPLETE: 
         System.out.println("Initiation Completed"); 
         break; 
        case MEDIA_IN_PROGRESS: 
         System.out.println("Upload in progress"); 
         System.out.println("Upload percentage: " + uploader.getProgress()); 
         break; 
        case MEDIA_COMPLETE: 
         System.out.println("Upload Completed!"); 
         break; 
        case NOT_STARTED: 
         System.out.println("Upload Not Started!"); 
         break; 
       } 
      } 
     }; 

     uploader.setProgressListener(progressListener); 

     // Call the API and upload the video. 
     Video returnedVideo = videoInsert.execute(); 

     // Print data about the newly inserted video from the API response. 
     System.out.println("\n================== Returned Video ==================\n"); 
     System.out.println(" - Id   : " + returnedVideo.getId()      ); 
     System.out.println(" - Title   : " + returnedVideo.getSnippet().getTitle()  ); 
     System.out.println(" - Tags   : " + returnedVideo.getSnippet().getTags()  ); 
     System.out.println(" - Privacy Status: " + returnedVideo.getStatus().getPrivacyStatus()); 
     System.out.println(" - Video Count : " + returnedVideo.getStatistics().getViewCount()); 

    } catch (Exception ex) { 
     System.err.println("Throwable: " + ex.getMessage()); 
     ex.printStackTrace(); 
    } 
} 

Odpowiedz

3

Niestety, nie jest możliwe, nie będzie ona nigdy nie będzie tak daleko, jak mogę powiedzieć.

Nie można dodawać adnotacji jest zamierzonym zachowaniem. Zobacz ten link: https://issuetracker.google.com/issues/35166657 - status: Will not Fix (zamierzone zachowanie)

Podobno najlepszą alternatywą jest InVideo Programming ale ja nie wierzę, to jest odpowiedni dla Twojego celu, chyba że może być film specyficzny.

+0

Bardzo dziękuję! Zrezygnowałem już z tej pracy, ale jestem bardzo szczęśliwy, że ktoś odpowiedział na moje pytanie! W każdym razie ... Znalazłem to samo w internecie, wszystkie wezwania do działania są przestarzałe! Więc jeśli ktoś próbuje zrobić to samo, wydaje się to niemożliwe! –