Flutter视频直播播放插件neliveplayer_core的使用

Flutter视频直播播放插件neliveplayer_core的使用

NELivePlayer for Flutter

来自网易的Flutter NELivePlayer插件。

更多关于NELivePlayer的信息,请访问官网

请注意,此播放器必须与nertc一起使用。

开始使用

步骤 1: 添加依赖

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  neliveplayer_core: ^1.0.0-rc.0
步骤 2: 在你的Widget树中添加NeLivePlayerView

在你的应用布局中添加NeLivePlayerView组件。例如,在Scaffoldbody部分添加如下代码:

body: Stack(
  children: [
    NeLivePlayerView(
      // 对象用于控制播放器
      player: player,
    ),
  ],
),

使用说明

请查看example目录下的player_page.dartplayer_page_second.dart文件以获取完整的示例代码。

完整示例代码

以下是一个完整的示例代码,展示了如何使用neliveplayer_core插件进行视频直播播放。

// Copyright (c) 2022 NetEase, Inc. All rights reserved.
// Use of this source code is governed by a MIT license that can be
// found in the LICENSE file.

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:neliveplayer_core/neliveplayer.dart';
import 'package:neliveplayer_example/player_page.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    if (Platform.isAndroid) {
      NELivePlayer.initAndroid(NeLiveConfig());
    }
    NELivePlayer.addPreloadUrls([
      'http://flv591dc843.live.126.net/live/a39ec9202fc74a71b9bc81b762349e99.flv'
    ]);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: InkWell(
            onTap: () {
              Navigator.of(context).push(MaterialPageRoute(
                builder: (context) => const PlayerPage(),
              ));
            },
            child: const Text('去播放'),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


neliveplayer_core 是一个用于 Flutter 的视频直播播放插件,通常用于集成网易云信(Netease YunXin)提供的直播播放功能。下面是如何在 Flutter 项目中使用 neliveplayer_core 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 neliveplayer_core 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  neliveplayer_core: ^版本号  # 请替换为最新的版本号

然后运行 flutter pub get 来获取依赖。

2. 导入插件

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

import 'package:neliveplayer_core/neliveplayer_core.dart';

3. 初始化播放器

在使用播放器之前,你需要初始化播放器实例:

NELivePlayerController _controller;

[@override](/user/override)
void initState() {
  super.initState();
  _controller = NELivePlayerController();
}

4. 设置播放源并开始播放

你可以通过 setDataSource 方法设置播放源,然后调用 start 方法开始播放:

void startPlay() async {
  await _controller.setDataSource("你的直播流地址", isLive: true);
  await _controller.start();
}

5. 控制播放器

你可以使用 _controller 来控制播放器的行为,例如暂停、停止、调整音量等:

void pausePlay() async {
  await _controller.pause();
}

void stopPlay() async {
  await _controller.stop();
}

void setVolume(int volume) async {
  await _controller.setVolume(volume);
}

6. 显示播放器视图

neliveplayer_core 插件提供了一个 NELivePlayerView 组件,用于显示视频播放内容。你可以将这个组件添加到你的 UI 中:

[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('视频直播'),
    ),
    body: Center(
      child: NELivePlayerView(
        controller: _controller,
      ),
    ),
  );
}

7. 释放播放器资源

在页面销毁时,记得释放播放器资源以避免内存泄漏:

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

8. 处理播放事件

你可以监听播放器的各种事件,例如播放状态变化、缓冲状态、播放完成等:

void initState() {
  super.initState();
  _controller = NELivePlayerController();

  _controller.addListener(() {
    if (_controller.value.isPlaying) {
      print('正在播放');
    } else if (_controller.value.isPaused) {
      print('播放暂停');
    } else if (_controller.value.isCompleted) {
      print('播放完成');
    }
  });
}

9. 处理错误

你可以通过监听 _controller 的错误事件来处理播放过程中可能出现的错误:

void initState() {
  super.initState();
  _controller = NELivePlayerController();

  _controller.onError.listen((error) {
    print('播放错误: $error');
  });
}

10. 自定义播放器UI

如果你需要自定义播放器的 UI,可以通过 NELivePlayerViewcontroller 属性来控制播放器的行为,并在外部构建自定义的 UI 布局。

示例代码

以下是一个完整的示例代码:

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

class LivePlayerPage extends StatefulWidget {
  [@override](/user/override)
  _LivePlayerPageState createState() => _LivePlayerPageState();
}

class _LivePlayerPageState extends State<LivePlayerPage> {
  NELivePlayerController _controller;

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

    _controller.addListener(() {
      if (_controller.value.isPlaying) {
        print('正在播放');
      } else if (_controller.value.isPaused) {
        print('播放暂停');
      } else if (_controller.value.isCompleted) {
        print('播放完成');
      }
    });

    _controller.onError.listen((error) {
      print('播放错误: $error');
    });
  }

  void startPlay() async {
    await _controller.setDataSource("你的直播流地址", isLive: true);
    await _controller.start();
  }

  void pausePlay() async {
    await _controller.pause();
  }

  void stopPlay() async {
    await _controller.stop();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('视频直播'),
      ),
      body: Column(
        children: [
          Expanded(
            child: NELivePlayerView(
              controller: _controller,
            ),
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              ElevatedButton(
                onPressed: startPlay,
                child: Text('播放'),
              ),
              ElevatedButton(
                onPressed: pausePlay,
                child: Text('暂停'),
              ),
              ElevatedButton(
                onPressed: stopPlay,
                child: Text('停止'),
              ),
            ],
          ),
        ],
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _controller.release();
    super.dispose();
  }
}
回到顶部