Flutter动漫视频流插件animeflv的使用

Flutter动漫视频流插件animeflv的使用

AnimeFLV dart API #

一个允许你从AnimeFLV目录检索不同数据,并在你的应用或代码中使用dart的API。 #

特性 #

  • 获取最近添加的剧集
  • 获取最近添加的动漫
  • 获取正在播放的动漫
  • 搜索动漫
  • 获取动漫信息(包括剧集)
  • 获取剧集服务器
  • 获取剧集下载链接

使用方法 #

可用函数返回Map或List of Maps。

#

导入包并创建AnimeFlv实例 #

import 'package:animeflv/animeflv.dart';

// 初始化AnimeFlv实例
var animeflv = AnimeFlv();

获取最近添加的剧集 #

// 获取AnimeFLV上最近上传的剧集
var lastEpisodes = await animeflv.getLastEpisodes();

lastEpisodes:

[
    {
        "anime":"Saihate no Paladin",
        "episode":"12","id":"saihate-no-paladin-12",
        "imagePreview":"https://animeflv.net/uploads/animes/thumbs/3541.jpg"
    },
    {
        "anime":"Kimetsu no Yaiba: Yuukaku-hen",
        "episode":"5",
        "id":"kimetsu-no-yaiba-yuukakuhen-5",
        "imagePreview":"https://animeflv.net/uploads/animes/thumbs/3554.jpg"
    },

        "..."
    {
        "anime":"86 2nd Season",
        "episode":"10",
        "id":"86-2nd-season-10",
        "imagePreview":"https://animeflv.net/uploads/animes/thumbs/3520.jpg"
    }
]

获取最近添加的动漫 #

// 获取AnimeFLV上最近添加的动漫
var lastAnimes = await animeflv.getLastAddedAnimes();

lastAnimes:

[
    {
        "id":"anime/mahouka-koukou-no-rettousei-tsuiokuhen",
        "title":"Mahouka Koukou no Rettousei: Tsuioku-hen",
        "poster":"/uploads/animes/covers/3556.jpg",
        "banner":"/uploads/animes/banners/3556.jpg",
        "type":"Especial",
        "synopsis":"Mirando a Miyuki y Tatsuya ahora, podría ser difícil imaginarlos como algo más que hermanos cariñosos. Pero no siempre fue así… Hace tres años, Miyuki siempre se sentía incómoda con su hermano mayor. El resto de la familia lo trataba como a un simple sirviente, a pesar de que era el guardi...",
        "rating":"4.7"
    },
    {
        "id":"anime/mahoutsukai-no-yome-nishi-no-shounen-to-seiran-no-kishi",
        "title":"Mahoutsukai no Yome: Nishi no Shounen to Seiran no Kishi",
        "poster":"/uploads/animes/covers/3555.jpg",
        "banner":"/uploads/animes/banners/3555.jpg",
        "type":"OVA",
        "synopsis":"La historia original de tres partes sigue a Gabriel, un chico común que se acaba de mudar de Londres y estaba aburrido de su entorno, hasta que un día, vio una voluta de humo púrpura desde la ventana de su casa. En ese momento, persiguió apresuradamente el humo, buscando cualquier tipo de libert...",
        "rating":"4.7"
    },

        "..."

    {
        "id":"anime/shin-no-nakama-ja-nai-to-yuusha-no-party-wo-oidasareta-node-henkyou-de-slow-life-suru-koto-ni-shimas",
        "title":"Shin no Nakama ja Nai to Yuusha no Party wo Oidasareta node, Henkyou de Slow Life suru Koto ni Shima",
        "poster":"/uploads/animes/covers/3533.jpg",
        "banner":"/uploads/animes/banners/3533.jpg",
        "type":"Anime",
        "synopsis":"En un mundo de fantasía en el que una chica con la Protección Divina del héroe combate contra el Señor Demonio. En ese mundo, Red, el hermano mayor de esa chica, quien posee la Protección Divina del “Guía”, que solo le otorga un nivel inicial mayor que sus compañeros, acompañó al héroe...",
        "rating":"4.6"
    }
]

获取正在播放的动漫 #

// 获取AnimeFLV上正在播放的动漫
var airingAnimes = await animeflv.getAiringAnimes();

airingAnimes:

[
    {
        "id":"anime/one-piece-tv",
        "title":"One Piece",
        "type":"Anime"
    },
    {
        "id":"anime/detective-conan",
        "title":"Detective Conan",
        "type":"Anime"
    },

        "..."

    {
        "id":"anime/mahoutsukai-no-yome-nishi-no-shounen-to-seiran-no-kishi",
        "title":"Mahoutsukai no Yome: Nishi no Shounen to Seiran no Kishi",
        "type":"OVA"
    }
]

搜索动漫,比如horimiya #

// 使用查询horimiya搜索
var searchResult = await animeflv.search('horimiya');

searchResult:

[
    {
        "id": "anime/horimiya", 
        "title": "Horimiya", 
        "poster": "https://animeflv.net/uploads/animes/covers/3406.jpg", 
        "banner": "https://animeflv.net/uploads/animes/banners/3406.jpg", 
        "type": "Anime", 
        "synopsis": "Aunque admirada en la escuela por su amabilidad y destreza académica, la estudiante de preparatoria Kyouko Hori ha estado escondiendo otro lado de ella. Con sus padres a menudo fuera de casa debido al trabajo, Hori tiene que cuidar de su hermano menor y hacer las tareas del hogar, sin tener tiempo para socializar fuera de la escuela. \n        Mientras t...", 
        "rating": "4.7",
    }
]

获取horimiya的信息 #

// 将第一个结果保存为horimiya
var horimiya = searchResult[0];

// 获取动漫horimiya的信息
var horimiyaInfo = await animeflv.getAnimeInfo(horimiya['id']);

horimiyaInfo:

{
    "id": "anime/horimiya", 
    "title": "Horimiya", 
    "poster": "https://animeflv.net/uploads/animes/covers/3406.jpg", 
    "banner": "https://animeflv.net/uploads/animes/banners/3406.jpg", 
    "synopsis": "Aunque admirada en la escuela por su amabilidad y destreza académica, la estudiante de preparatoria Kyouko Hori ha estado escondiendo otro lado de ella. Con sus padres a menudo fuera de casa debido al trabajo, Hori tiene que cuidar de su hermano menor y hacer las tareas del hogar, sin tener tiempo para socializar fuera de la escuela.\n    Mientras tanto, Izumi Miyamura es visto como un inquietante otaku que usa anteojos. Sin embargo, en realidad es una persona amable e inepta para estudiar. Además, tiene nueve piercings escondidos detrás de su largo cabello, y un tatuaje a lo largo de su espalda y hombro izquierdo.\n    Por pura casualidad, Hori y Miyamura se cruzan fuera de la escuela, ninguno luciendo como el otro lo esperaría. Estos polos aparentemente opuestos se convierten en amigos, compartiendo un lado que nunca le han mostrado a nadie.", 
    "rating": "4.7", 
    "debut": "Finalizado", 
    "type": "Anime", 
    "genres": ["comedia", "escolares", "recuentos-de-la-vida", "romance", "shounen"], 
    "episodes": [
        {
            "episode": "1", 
            "id": "horimiya-1", 
            "imagePreview": "https://cdn.animeflv.net/screenshots/3406/1/th_3.jpg"
        },
        {
            "episode": "2", 
            "id": "horimiya-2", 
            "imagePreview": "https://cdn.animeflv.net/screenshots/3406/2/th_3.jpg"
        }
            "..."

        {
        
            "episode": "13", 
            "id": "horimiya-13", 
            "imagePreview": "https://cdn.animeflv.net/screenshots/3406/13/th_3.jpg"
        }

    ]
}

获取动漫horimiya第一集的服务器(不是所有服务器都会有相同的属性,但它们都会有一个server和url或code) #

// 将horimiya的第一集保存为horimiyaFirstEpisode
var horimiyaFirstEpisode = horimiyaInfo['episodes'][0];

// 获取horimiya第一集的服务器
var servers = await animeflv.getVideoServers(horimiyaFirstEpisode['id']);

servers:

[
    {
        "server": "mega", 
        "title": "MEGA",
        "ads": 0, 
        "url": "https://mega.nz/#!hZJHHSBR!c4jM0fqL0i3tZnEYytw3M73Fvz70UtHD7c5DoReVDaM", 
        "allow_mobile": true, 
        "code": "https://mega.nz/embed#!hZJHHSBR!c4jM0fqL0i3tZnEYytw3M73Fvz70UtHD7c5DoReVDaM"
    }, 
    {
        "server": "yu", 
        "title": "YourUpload", 
        "ads": 0, 
        "allow_mobile": true, 
        "code": "https://www.yourupload.com/embed/BjjGnSUJ68q0"
    },

        "..."

    {
        "server": "Stape", 
        "url": "https://streamtape.com/v/BP4zD44wWxFydZa/"
    }
]

获取动漫horimiya第一集的下载链接 #

// 获取horimiya第一集的下载链接
var downloadLinks = await animeflv.downloadLinksByEpisodeId(horimiyaFirstEpisode['id']);

downloadLinks:

[
    {
        "server": "MEGA", 
        "url": "https://mega.nz/#!hZJHHSBR!c4jM0fqL0i3tZnEYytw3M73Fvz70UtHD7c5DoReVDaM"
    }, 
    {
        "server": "Zippyshare", 
        "url": "https://www102.zippyshare.com/d/Qhpk3cCA/955113/3406_1.mp4"
    }, 
    {
        "server": "Stape", 
        "url": "https://streamtape.com/v/BP4zD44wWxFydZa/"
    }
]

完整示例代码

以下是完整的示例代码,展示了如何使用animeflv插件来获取动漫信息和剧集服务器及下载链接。

import 'package:animeflv/animeflv.dart';
import 'dart:convert';

void main() async {
  // 初始化AnimeFlv实例
  var animeflv = AnimeFlv();

  // 获取AnimeFLV上最近上传的剧集
  var lastEpisodes = await animeflv.getLastEpisodes();
  print('\n最近添加的剧集: \n$lastEpisodes\n');

  // 获取AnimeFLV上最近添加的动漫
  var lastAnimes = await animeflv.getLastAddedAnimes();
  print('\n最近添加的动漫: \n$lastAnimes\n');

  // 获取AnimeFLV上正在播放的动漫
  var airingAnimes = await animeflv.getAiringAnimes();
  print('\n正在播放的动漫: \n$airingAnmes\n');

  // 使用查询horimiya搜索
  var searchResult = await animeflv.search('horimiya');
  print('\n搜索结果: \n$searchResult\n');

  // 将第一个结果保存为horimiya
  var horimiya = searchResult[0];

  // 获取动漫horimiya的信息
  var horimiyaInfo = await animeflv.getAnimeInfo(horimiya['id']);
  print('\nhorimiya的信息: \n$horimiyaInfo\n');

  // 将horimiya的第一集保存为horimiyaFirstEpisode
  var horimiyaFirstEpisode = horimiyaInfo['episodes'][0];

  // 获取horimiya第一集的服务器
  var servers = await animeflv.getVideoServers(horimiyaFirstEpisode['id']);
  print('\n服务器: \n$servers\n');

  // 获取horimiya第一集的下载链接
  var downloadLinks = await animeflv.downloadLinksByEpisodeId(horimiyaFirstEpisode['id']);
  print('\n下载链接: \n$downloadLinks\n');
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用animeflv插件(假设该插件存在并且已经发布在pub.dev上)的代码示例。由于animeflv插件可能不是官方或广泛知名的插件,下面的代码是基于一般Flutter插件使用的假设编写的。如果animeflv插件的实际API有所不同,请参考其官方文档进行调整。

首先,确保在你的pubspec.yaml文件中添加animeflv插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  animeflv: ^最新版本号  # 替换为实际版本号

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

接下来,在你的Flutter项目中,你可以使用animeflv插件来加载和播放动漫视频流。以下是一个简单的示例,展示如何在Flutter应用中实现这一点:

import 'package:flutter/material.dart';
import 'package:animeflv/animeflv.dart';  // 假设这是插件的导入路径

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

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

class AnimePlayerScreen extends StatefulWidget {
  @override
  _AnimePlayerScreenState createState() => _AnimePlayerScreenState();
}

class _AnimePlayerScreenState extends State<AnimePlayerScreen> {
  AnimeflvPlayerController? _controller;
  String? _videoUrl;

  @override
  void initState() {
    super.initState();
    // 假设我们有一个视频URL,这通常是从API获取的
    _videoUrl = "https://example.com/anime/episode1.mp4";  // 替换为实际视频URL
    _initializePlayer();
  }

  void _initializePlayer() async {
    // 初始化播放器控制器
    _controller = await AnimeflvPlayerController.fromUrl(_videoUrl!);

    // 设置监听器以处理播放完成等事件(可选)
    _controller!.onVideoCompleted = () {
      print("Video completed!");
      // 可以在这里添加播放下一集或显示提示的逻辑
    };

    // 其他初始化逻辑...
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("AnimeFLV Player"),
      ),
      body: Center(
        child: _controller != null
            ? AspectRatio(
                aspectRatio: _controller!.value.aspectRatio,
                child: AnimeflvPlayer(_controller!))
            : CircularProgressIndicator(),  // 在播放器初始化时显示加载指示器
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 播放或暂停视频
          if (_controller!.value.isPlaying) {
            _controller!.pause();
          } else {
            _controller!.play();
          }
        },
        tooltip: 'Play/Pause',
        child: Icon(_controller!.value.isPlaying ? Icons.pause : Icons.play_arrow),
      ),
    );
  }

  @override
  void dispose() {
    _controller?.dispose();  // 释放播放器资源
    super.dispose();
  }
}

注意

  1. 上述代码是基于假设的animeflv插件API编写的。实际使用时,请查阅该插件的官方文档以获取正确的API和初始化方法。
  2. 如果animeflv插件不是一个视频播放器插件,而是一个提供动漫视频列表或详细信息的插件,那么你需要根据插件的实际功能调整代码。
  3. 视频URL是一个占位符,你需要替换为实际可用的视频流URL。

由于animeflv插件可能不是广泛存在的,如果找不到相应的插件,你可能需要寻找其他替代方案或自己实现相关功能。

回到顶部