Question

I'm uploading videos to my YouTube account from my Android application using YouTube Data API v3. Uploading process works perfectly. What I need is, if my upload got interrupted (eg. because of Internet connection) I need to start upload next time where it left.

private void uploadVideo(UploadInfo videoInfo) {

    Insert videoInsert = prepareUpload( new File(videoInfo.getFilePath()) );

    new VideoUploadAsyncTask(videoInfo, getActivity(), videoUploadAsyncTaskInterface).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, videoInsert);
}

public Insert prepareUpload( File videoFile ) {

    try {
        Video videoObjectDefiningMetadata = new Video();

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

        VideoSnippet snippet = new VideoSnippet();

        snippet.setTitle(videoFile.getName());
        snippet.setDescription("Uploaded via AnujAroshA Android app");

        List<String> tags = new ArrayList<String>();
        tags.add("AnujAroshA");
        snippet.setTags(tags);

        videoObjectDefiningMetadata.setSnippet(snippet);

        InputStreamContent mediaContent = new InputStreamContent(VIDEO_FILE_FORMAT, new BufferedInputStream(new FileInputStream(videoFile)));
        mediaContent.setLength(videoFile.length());

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

        MediaHttpUploader uploader = videoInsert.getMediaHttpUploader();

        uploader.setDirectUploadEnabled(false);

        uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);

        return videoInsert;
    } catch (FileNotFoundException e) {
        return null;
    } catch (IOException e) {
        return null;
    }    
}

How can I do that?


Update with VideoUploadAsyncTask class doInBackground method

@Override
protected String doInBackground( Insert... inserts ) {

    try{

        Insert videoInsert = inserts[0];

        MediaHttpUploader uploader = videoInsert.getMediaHttpUploader();

        MediaHttpUploaderProgressListener progressListener = new MediaHttpUploaderProgressListener() {

            @Override
            public void progressChanged(MediaHttpUploader uploader) throws IOException {

                switch (uploader.getUploadState()) {
                case INITIATION_STARTED:
                    Log.d(TAG, "# INITIATION_STARTED ");
                    break;

                case INITIATION_COMPLETE:
                    Log.d(TAG, "# INITIATION_COMPLETE ");
                    break;

                case MEDIA_IN_PROGRESS:
                    int progress = (int) Math.round(uploader.getProgress() * 100);
                    Log.d(TAG, "# MEDIA_IN_PROGRESS : progress = " + progress + "%");

                    publishProgress(progress);
                    break;

                case MEDIA_COMPLETE:
                    Log.d(TAG, "# MEDIA_COMPLETE ");
                    publishProgress(100);
                    break;

                case NOT_STARTED:
                    Log.d(TAG, "# NOT_STARTED ");
                    break;

                default:
                    break;
                }
            }
        };

        uploader.setProgressListener(progressListener);

        Video returnedVideo = videoInsert.execute();

        return returnedVideo.getId();

    }catch(GooglePlayServicesAvailabilityIOException gpsaioe){

    }catch(UserRecoverableAuthIOException uraioe){

    }catch(GoogleAuthIOException gaioe){

    }catch(IOException ioe){

    }       
    return null;
}
Was it helpful?

Solution

Have you seen this question?

The answer suggests that you should use;

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()));
  }
});

when you initialise your YouTube object.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top