Flutter视频播放插件vlc_flutter的使用

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

Flutter视频播放插件vlc_flutter的使用

这是libvlc的Flutter包装插件。更多详细信息请访问他们的网站

Todo:

  • ✅ Android
  • ✅ iOS

使用方法

pubspec.yaml文件中添加依赖:

dependencies:
  vlc_flutter: ^0.0.2

导入包:

import 'package:vlc_flutter/vlcplayer.dart';

创建VLCController对象:

// "-vvv"选项用于打印尽可能详细的日志以便调试
VLCController _controller = VLCController(args: ["-vvv"]);

创建一个视图来播放视频:

AspectRatio(
  aspectRatio: 16 / 9,
  child: VLCVideoWidget(
    controller: _controller,
  ),
)

根据uri播放视频:

ElevatedButton(
  child: Text("播放"),
  onPressed: () async {
    await _controller.setDataSource(uri: "rtmp://58.200.131.2:1935/livetv/natlgeo");
    _controller.play();
  },
)

或者直接使用play方法:

_controller.play(uri: "rtmp://58.200.131.2:1935/livetv/natlgeo");

播放本地资源:

_controller.play(path: "/sdcard/test/test.mp4");

监听播放器状态:

_controller.onPlayerState.listen((event) {
  debugPrint("=*= $event =*=");
});

监听播放器事件:

_controller.onEvent.listen((event) {
  if (event.type == EventType.PositionChanged) {
    debugPrint("==[${event.positionChanged}]==");
  }
});

添加字幕:

// 加载本地字幕
await _controller.addSlave(path: "/sdcard/test/Test.srt");
// 设置字幕位置
_controller.setVideoTitleDisplay(Position.Bottom, 1000);

录制视频:

// 指定目录并开始录制
_controller.startRecord("/sdcard/test/");
// 停止录制
_controller.stopRecord();

不要忘记在AndroidManifest.xml中添加网络权限以播放网络资源:

<uses-permission android:name="android.permission.INTERNET" />

如果需要录制视频,可能还需要以下权限(这些是在Android 6.0及以上版本的危险权限,因此你可能还需要flutter_easy_permission插件):

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

示例

class _MyAppState extends State<MyApp> {
  VLCController _controller = VLCController();

  [@override](/user/override)
  void initState() {
    super.initState();

    _controller.onEvent.listen((event) {
      if (event.type == EventType.PositionChanged) {
        debugPrint("==[${event.positionChanged}]==");
      }
    });
  }

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('VLCPlayer 插件示例'),
        ),
        body: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            AspectRatio(
              aspectRatio: 16 / 9,
              child: VLCVideoWidget(
                controller: _controller,
              ),
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: [
                ElevatedButton(
                  child: Text("播放"),
                  onPressed: () async {
                    await _controller.setDataSource(
                        uri: "rtmp://58.200.131.2:1935/livetv/natlgeo");
                    _controller.play();
                  },
                ),
                ElevatedButton(
                  child: Text("暂停"),
                  onPressed: () {
                    _controller.pause();
                  },
                ),
                ElevatedButton(
                  child: Text("停止"),
                  onPressed: () {
                    _controller.stop();
                  },
                ),
                ElevatedButton(
                  child: Text("开始录制"),
                  onPressed: () {
                    _controller.startRecord("/sdcard/test/");
                  },
                ),
                ElevatedButton(
                  child: Text("停止录制"),
                  onPressed: () {
                    _controller.stopRecord();
                  },
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter应用中使用vlc_flutter插件来播放视频的示例代码。vlc_flutter是一个强大的插件,它基于VLC媒体播放器库,可以在Flutter应用中实现跨平台的视频播放功能。

首先,确保你已经在pubspec.yaml文件中添加了vlc_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  vlc_flutter: ^4.0.0  # 请检查最新版本号

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

接下来,我们创建一个简单的Flutter应用来演示如何使用vlc_flutter播放视频。

主应用代码 (main.dart)

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

void main() {
  runApp(MyApp());
}

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

class VideoPlayerScreen extends StatefulWidget {
  @override
  _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  final VlcPlayerController _controller = VlcPlayerController.network(
    'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4',
  );

  @override
  void initState() {
    super.initState();
    _controller.initialize().then((_) {
      // Optional: Set the video to start playing automatically.
      setState(() {
        _controller.play();
      });
    });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('VLC Flutter Video Player'),
      ),
      body: Center(
        child: _controller.value.isInitialized
            ? AspectRatio(
                aspectRatio: _controller.value.aspectRatio,
                child: VlcPlayer(
                  controller: _controller,
                ),
              )
            : Container(
                child: CircularProgressIndicator(),
              ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            if (_controller.value.isPlaying) {
              _controller.pause();
            } else {
              _controller.play();
            }
          });
        },
        tooltip: 'Play/Pause',
        child: Icon(
          _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加vlc_flutter依赖。

  2. VlcPlayerController:创建一个VlcPlayerController实例,用于控制视频的播放。在这个例子中,我们使用VlcPlayerController.network来加载一个网络视频。你也可以使用VlcPlayerController.file来加载本地视频文件。

  3. 初始化:在initState方法中,调用_controller.initialize()来初始化VLC播放器。初始化完成后,可以选择自动播放视频。

  4. UI构建:使用AspectRatioVlcPlayer组件来显示视频。在视频未初始化完成时,显示一个CircularProgressIndicator作为加载指示器。

  5. 播放/暂停控制:使用FloatingActionButton来控制视频的播放和暂停。根据_controller.value.isPlaying的状态来决定是播放还是暂停。

  6. 资源释放:在dispose方法中释放VlcPlayerController资源,以避免内存泄漏。

这个示例展示了如何使用vlc_flutter插件在Flutter应用中播放视频,并提供了基本的播放/暂停控制。你可以根据需要进一步扩展这个示例,比如添加音量控制、进度条、全屏模式等功能。

回到顶部