Flutter YouTube Shorts视频播放插件youtube_shorts的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter YouTube Shorts视频播放插件 youtube_shorts 的使用

概述

youtube_shorts 是一个用于在Flutter应用中展示YouTube Shorts的插件。该插件利用了youtube_explode_dart来获取YouTube视频信息,并使用media_kit作为视频播放器。

目录

配置和原生权限

由于该插件使用media_kit作为视频播放引擎,因此需要进行一些原生配置。请参考media_kit的文档完成相应平台的配置。

此外,在main()函数中调用MediaKit.ensureInitialized();初始化媒体工具包。

import 'package:permission_handler/permission_handler.dart';
import 'package:system_info/system_info.dart';

if (/* Android 13 or higher */) {
  if (await Permission.videos.isDenied || await Permission.videos.isPermanentlyDenied) {
    final state = await Permission.videos.request();
    if (!state.isGranted) {
      await SystemNavigator.pop();
    }
  }
  if (await Permission.audio.isDenied || await Permission.audio.isPermanentlyDenied) {
    final state = await Permission.audio.request();
    if (!state.isGranted) {
      await SystemNavigator.pop();
    }
  }
} else {
  if (await Permission.storage.isDenied || await Permission.storage.isPermanentlyDenied) {
    final state = await Permission.storage.request();
    if (!state.isGranted) {
      await SystemNavigator.pop();
    }
  }
}

基本用法

首先,您需要创建一个VideosSourceController来控制所有视频源。有两种构造方法:从URL列表或频道名称。

通过列表URL显示Shorts

late final ShortsController controller;

@override
void initState() {
  super.initState();
  controller = ShortsController(
    youtubeVideoInfoService: VideosSourceController.fromUrlList(
      videoIds: [
        'https://www.youtube.com/shorts/PiWJWfzVwjU',
        'https://www.youtube.com/shorts/AeZ3dmC676c',
        'https://www.youtube.com/shorts/L1lg_lxUxfw',
        'https://www.youtube.com/shorts/OWPsdhLHK7c',
      ],
    ),
  );
}

通过频道名称显示Shorts

注意:频道名称不是以@开头的名字,而是类似/user/[channelName]中的名字。

late final ShortsController controller;

@override
void initState() {
  super.initState();
  controller = ShortsController(
    youtubeVideoInfoService: VideosSourceController.fromYoutubeChannel(
      channelName: 'fcbarcelona',
    ),
  );
}

通过多个频道名称显示Shorts

late final ShortsController controller;

@override
void initState() {
  super.initState();
  controller = ShortsController(
    youtubeVideoSourceController: VideosSourceController.fromMultiYoutubeChannels(
      channelsName: ['fcbarcelona', 'realmadridcf', 'atleticodemadrid'],
    ),
  );
}

最简页面示例

@override
Widget build(BuildContext context) {
  return YoutubeShortsPage(
    controller: controller,
  );
}

@override
void dispose() {
  controller.dispose();
  super.dispose();
}

完整Demo示例

以下是一个完整的示例,展示了如何从不同来源加载YouTube Shorts并在Flutter应用中展示:

import 'package:flutter/material.dart';
import 'package:youtube_shorts/youtube_shorts.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MediaKit.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'YouTube Shorts Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SelectionPage(),
    );
  }
}

class SelectionPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Select Source')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () {
                Navigator.of(context).push(MaterialPageRoute(builder: (_) => ShortsByUrls()));
              },
              child: Text('By URLs'),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.of(context).push(MaterialPageRoute(builder: (_) => ShortsByChannel()));
              },
              child: Text('By Channel Name'),
            ),
          ],
        ),
      ),
    );
  }
}

class ShortsByUrls extends StatefulWidget {
  @override
  _ShortsByUrlsState createState() => _ShortsByUrlsState();
}

class _ShortsByUrlsState extends State<ShortsByUrls> {
  late ShortsController _controller;

  @override
  void initState() {
    super.initState();
    _controller = ShortsController(
      youtubeVideoInfoService: VideosSourceController.fromUrlList(
        videoIds: [
          'https://www.youtube.com/shorts/PiWJWfzVwjU',
          'https://www.youtube.com/shorts/AeZ3dmC676c',
        ],
      ),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return YoutubeShortsPage(controller: _controller);
  }
}

class ShortsByChannel extends StatefulWidget {
  @override
  _ShortsByChannelState createState() => _ShortsByChannelState();
}

class _ShortsByChannelState extends State<ShortsByChannel> {
  late ShortsController _controller;

  @override
  void initState() {
    super.initState();
    _controller = ShortsController(
      youtubeVideoInfoService: VideosSourceController.fromYoutubeChannel(channelName: 'fcbarcelona'),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return YoutubeShortsPage(controller: _controller);
  }
}

这个示例展示了如何从不同的来源(如URL列表或频道名称)加载并展示YouTube Shorts。希望这对您的开发有所帮助!


更多关于Flutter YouTube Shorts视频播放插件youtube_shorts的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter YouTube Shorts视频播放插件youtube_shorts的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中集成并使用youtube_shorts插件来播放YouTube Shorts视频的示例代码。请注意,由于youtube_shorts这个具体的插件名称在Flutter社区中可能不是一个官方或广泛认可的插件(截至我最后的知识更新),我将以一个假设的集成过程为例,展示如何集成和使用一个类似的YouTube Shorts视频播放插件。实际使用中,请替换为实际存在的插件名称和API。

首先,确保你的Flutter环境已经设置好,并且你的项目已经初始化。

  1. 添加依赖

    在你的pubspec.yaml文件中添加插件依赖(这里假设插件名为youtube_shorts_player,你需要替换为实际的插件名):

    dependencies:
      flutter:
        sdk: flutter
      youtube_shorts_player: ^x.y.z  # 替换为实际版本号
    

    然后运行flutter pub get来安装依赖。

  2. 导入插件

    在你的Dart文件中导入插件:

    import 'package:youtube_shorts_player/youtube_shorts_player.dart';
    
  3. 使用插件

    下面是一个简单的示例,展示如何在Flutter应用中嵌入并播放一个YouTube Shorts视频。请注意,由于YouTube的API和插件的限制,你可能需要遵循特定的API使用条款和获取API密钥。

    import 'package:flutter/material.dart';
    import 'package:youtube_shorts_player/youtube_shorts_player.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'YouTube Shorts Player Demo',
          home: YouTubeShortsPlayerScreen(),
        );
      }
    }
    
    class YouTubeShortsPlayerScreen extends StatefulWidget {
      @override
      _YouTubeShortsPlayerScreenState createState() => _YouTubeShortsPlayerScreenState();
    }
    
    class _YouTubeShortsPlayerScreenState extends State<YouTubeShortsPlayerScreen> {
      late YouTubeShortsPlayerController _controller;
    
      @override
      void initState() {
        super.initState();
        // 初始化控制器,这里假设需要传入视频ID和API密钥
        _controller = YouTubeShortsPlayerController(
          videoId: 'SHORTS_VIDEO_ID',  // 替换为实际的YouTube Shorts视频ID
          apiKey: 'YOUR_API_KEY',      // 替换为实际的YouTube API密钥
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('YouTube Shorts Player'),
          ),
          body: Center(
            child: YouTubeShortsPlayer(
              controller: _controller,
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              // 播放视频
              _controller.play();
            },
            tooltip: 'Play',
            child: Icon(Icons.play_arrow),
          ),
        );
      }
    
      @override
      void dispose() {
        // 释放控制器资源
        _controller.dispose();
        super.dispose();
      }
    }
    

    请注意,上面的代码示例是一个假设性的实现,并且YouTubeShortsPlayerControllerYouTubeShortsPlayer等类和方法可能需要根据实际插件的API进行调整。此外,YouTube的API通常要求你注册并获取一个API密钥,并且可能需要处理用户认证和权限问题。

    在实际使用中,请查阅你选择的插件的官方文档,以获取准确的集成指南和API使用方法。如果youtube_shorts或类似的插件不存在,你可能需要寻找其他支持YouTube视频播放的Flutter插件,如youtube_player_flutter,并检查它是否支持YouTube Shorts视频的播放。

回到顶部