Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter Youtube Video Upload

I would like to know if there is any method or api to upload videos to youtube directly from my flutter application? One way would be to use webview, but it's not so comfortable and user-friendly. Thank You very much for any suggestions

like image 225
Marc Sanny Avatar asked Sep 12 '25 04:09

Marc Sanny


2 Answers

Use googleapis Youtube Data:

  • API Docs
  • Example from official docs

My Upload Snippet:

static Future<Video> upload() async {
  var youTubeApi = await getYoutubeApi();

  File f = File('assets/sample-mp4-file-small.mp4');
  Stream<List<int>> stream = f.openRead();
  Media m = Media(stream, (await f.length()));
  Video video = Video(
    snippet: VideoSnippet(
      title: 'Pong Map Test Video',
      description: 'Test Upload for Pong Map app',
      categoryId: '22',
    ),
  );

  return await youTubeApi.videos.insert(
    video,
    ['snippet', 'status'],
    uploadMedia: m,
  );
}

My Full example with Auth

import 'dart:io';

import 'package:googleapis/youtube/v3.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
import 'package:shared/services/toast_utility.dart';

class YoutubeService {
  static Future<YouTubeApi> getYoutubeApi() async {
    final GoogleSignIn googleSignIn = GoogleSignIn(
      scopes: <String>[
        YouTubeApi.youtubeReadonlyScope,
        YouTubeApi.youtubeUploadScope
      ],
    );
    await googleSignIn.signIn();

    // final GoogleSignInAccount? googleSignInAccount = await googleSignIn.signIn();
    var httpClient = await googleSignIn.authenticatedClient();
    if (httpClient == null) {
      print("You didn't allow to proceed with YouTube access");
    }

    return YouTubeApi(httpClient!);
  }

  static Future<VideoListResponse> listYoutubePlaylists() async {
    var youTubeApi = await getYoutubeApi();
    var data = await youTubeApi.videos.list(
      ['snippet'],
      chart: "mostPopular",
    );
    return data;
  }

  static Future<Video> upload() async {
    var youTubeApi = await getYoutubeApi();

    File f = File('assets/sample-mp4-file-small.mp4');
    Stream<List<int>> stream = f.openRead();
    Media m = Media(stream, (await f.length()));
    Video video = Video(
      snippet: VideoSnippet(
        title: 'Test Video',
        description: 'Test Upload for My App',
        categoryId: '22',
      ),
    );

    return await youTubeApi.videos.insert(
      video,
      ['snippet', 'status'],
      uploadMedia: m,
    );
  }
}

Note that you do need extension_google_sign_in_as_googleapis_auth and google_sign_in both in your pubspec.yaml for authorization. And of course the googleapis package.

like image 190
eriel marimon Avatar answered Sep 14 '25 18:09

eriel marimon


Google provides API tools for YouTube. You can learn more here.

Furthermore, there is a package that implements that same api in a more friendly way, as shown here.

like image 22
António Oliveira Avatar answered Sep 14 '25 19:09

António Oliveira