国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

flutter 視頻解碼器fijkplayer使用

這篇具有很好參考價值的文章主要介紹了flutter 視頻解碼器fijkplayer使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ? ? ?本人做視頻監(jiān)控項目的時候,需要去展示視頻流到用戶端,一開始使用flutter自帶的VideoPlayer播放監(jiān)控視頻,一開始沒有發(fā)現(xiàn)有什么問題,因為使用多的是Android模擬器,一直沒有使用iso模擬器或者真機測試能不能播放,直到開發(fā)接近尾聲,在ios模擬器上測試的時候發(fā)現(xiàn)了問題,視頻流為H264的時候能正常播放,但是視頻流為H265的時候一直轉(zhuǎn)圈,模擬器和真機播放不了(Android模擬器和真機都是可以播放的)。后來就打算換一個三方插件來調(diào)整播放。

  1. 在pubspec.yaml導(dǎo)入引用的fijkplayer插件
     # 視頻解碼器 軟解碼
      fijkplayer: ^0.10.1
  2. 狀態(tài)詳解
    狀態(tài)名 播放器表現(xiàn)
    idle 閑置狀態(tài),剛完成構(gòu)造的 FijkPlayer 處于此狀態(tài)。
    此狀態(tài)下播放器占用少量內(nèi)存,無額外線程啟動。
    idle 狀態(tài)只能通過 setDataSource 轉(zhuǎn)換為 initialized 狀態(tài)
    initialized 初始化完成狀態(tài),和 idle 狀態(tài)相比,僅是多了輸入媒體數(shù)據(jù)源的信息。 同樣無額外線程打開。
    asyncPreparing 異步準(zhǔn)備狀態(tài),在 initialized 狀態(tài)調(diào)用 prepareAsync 到達(dá)此狀態(tài)。
    這不是一個穩(wěn)定狀態(tài),此狀態(tài)等待特定任務(wù)完成后自動轉(zhuǎn)化為 prepared 狀態(tài)。
    這一狀態(tài)的主要準(zhǔn)備工作是 探測媒體文件類型,打開媒體文件,打開解碼器以及新建解碼線程,新建數(shù)據(jù) read 線程,打開音頻輸出設(shè)備,新建視頻輸出線程等。
    prepared asyncPreparing 完成指定任務(wù)后自動轉(zhuǎn)化為此狀態(tài)。
    此狀態(tài)下已經(jīng)開始緩沖解碼了一部分音視頻數(shù)據(jù),可以隨時進(jìn)行播放。
    started 媒體(視頻、音頻)正在播放中。
    paused 媒體(視頻、音頻)播放暫停。
    completed 媒體(視頻、音頻)播放完成。 可重新從頭開始播放。
    stopped 播放器各種線程占用資源都已經(jīng)釋放。 音頻設(shè)備關(guān)閉。
    end 播放器中所有需要手動釋放的內(nèi)存都釋放完成。
    處于此狀態(tài)的播放器只能等待垃圾回收進(jìn)行內(nèi)存釋放。
    error 播放器出現(xiàn)錯誤。
  3. 簡單使用代碼如下
    import 'package:fijkplayer/fijkplayer.dart';
    import 'package:flutter/material.dart';
    
    class VideoScreen extends StatefulWidget {
      final String url;//視頻地址
    
      VideoScreen({@required this.url});
    
      @override
      _VideoScreenState createState() => _VideoScreenState();
    }
    
    class _VideoScreenState extends State<VideoScreen> {
      final FijkPlayer player = FijkPlayer();
    
      _VideoScreenState();
    
      @override
      void initState() {
        super.initState();
        //傳入視頻地址,視頻是否自動播放
        player.setDataSource(widget.url, autoPlay: true);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(title: Text("視頻監(jiān)控")),
            body: Container(
              alignment: Alignment.center,
              child: FijkView(
                player: player,
              ),
            ));
      }
    
      @override
      void dispose() {
        super.dispose();
        player.release();
      }
    }
    ?
  4. 使用后能夠正常播放,但是你發(fā)現(xiàn)UI界面太丑了,或者功能不夠自己使用,需要更多的功能使用才行,別急!三方提供者早就想到了這里,所以提供了可以自己定的UI界面設(shè)置。需要修改panelBuilder更改UI界面,廢話不多說,上代碼。 首先加入自定的UI界面代碼
    class CustomFijkPanel extends StatefulWidget {
      final FijkPlayer player;
      final BuildContext buildContext;
      final Size viewSize;
      final Rect texturePos;
    
      const CustomFijkPanel({
        @required this.player,
        this.buildContext,
        this.viewSize,
        this.texturePos,
      });
    
      @override
      _CustomFijkPanelState createState() => _CustomFijkPanelState();
    }
    
    class _CustomFijkPanelState extends State<CustomFijkPanel> {
    
      FijkPlayer get player => widget.player;
      bool _playing = false;
    
      @override
      void initState() {
        super.initState();
        widget.player.addListener(_playerValueChanged);
      }
    
      void _playerValueChanged() {
        FijkValue value = player.value;
    
        bool playing = (value.state == FijkState.started);
        if (playing != _playing) {
          setState(() {
            _playing = playing;
          });
        }
      }
    
      @override
      Widget build(BuildContext context) {
        Rect rect = Rect.fromLTRB(
            max(0.0, widget.texturePos.left),
            max(0.0, widget.texturePos.top),
            min(widget.viewSize.width, widget.texturePos.right),
            min(widget.viewSize.height, widget.texturePos.bottom));
    
        return Positioned.fromRect(
          rect: rect,
          child: Container(
            alignment: Alignment.bottomLeft,
            child: IconButton(
              icon: Icon(
                _playing ? Icons.pause : Icons.play_arrow,
                color: Colors.white,
              ),
              onPressed: () {
                _playing ? widget.player.pause() : widget.player.start();
              },
            ),
          ),
        );
      }
    
      @override
      void dispose() {
        super.dispose();
        player.removeListener(_playerValueChanged);
      }
    }

? ? ? ? 這里是使用時候的代碼

FijkView(
  player: player,
  panelBuilder: (FijkPlayer player, FijkData data, BuildContext context, Size viewSize, Rect texturePos) {
    return CustomFijkPanel(
      player: player,
      buildContext: context,
      viewSize: viewSize,
      texturePos: texturePos);
  },
)

到這里就完成了,簡單使用、自定義使用,如果還需要看詳細(xì)信息,可參考他們提供的官方文檔,地址如下:fijkplayer -- Flutter plugin for ijkplayer - fijkplayer -- Flutter plugin for ijkplayer文章來源地址http://www.zghlxwxcb.cn/news/detail-409500.html

到了這里,關(guān)于flutter 視頻解碼器fijkplayer使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 使用AutoDecoder自動解碼器實現(xiàn)簡單MNIST特征向量提取

    使用AutoDecoder自動解碼器實現(xiàn)簡單MNIST特征向量提取

    自動解碼器(AD)是論文\\\"DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation\\\" 中使用的一種方法,與傳統(tǒng)編碼-解碼結(jié)構(gòu)不同,AD無編碼器,僅有一個解碼器。 解碼器實現(xiàn)特征向量(隱向量)與圖片之間的轉(zhuǎn)換 。 在訓(xùn)練過程中 同時優(yōu)化 特征向量與神經(jīng)網(wǎng)絡(luò)參數(shù)。如

    2024年02月02日
    瀏覽(37)
  • Qt6 QMediaPlayer播放視頻沒有聲音或者無法播放聲音報錯handleSourceError: 0x8007007B解決方法(無需下載解碼器)

    Qt5到Qt6時變動了許多類QMediaPlayer也在其中。曾經(jīng)只需要這樣即可播放視頻。 而如今需要這樣 這樣寫完后運行,發(fā)現(xiàn)視頻可以播放了,但是發(fā)現(xiàn)了個問題,播放的視頻沒有聲音。打開瀏覽器搜索,發(fā)現(xiàn)好像沒有類似問題的文章。至少筆者沒找到太多類似的。有也是大部分都是

    2024年02月13日
    瀏覽(49)
  • 解碼器 | 基于 Transformers 的編碼器-解碼器模型

    基于 transformer 的編碼器-解碼器模型是 表征學(xué)習(xí) 和 模型架構(gòu) 這兩個領(lǐng)域多年研究成果的結(jié)晶。本文簡要介紹了神經(jīng)編碼器-解碼器模型的歷史,更多背景知識,建議讀者閱讀由 Sebastion Ruder 撰寫的這篇精彩 博文。此外,建議讀者對 自注意力 (self-attention) 架構(gòu) 有一個基本了解

    2024年02月08日
    瀏覽(25)
  • 利用第三方解碼器ffmpeg讓群暉DSM6.2.4版本的Video Station支持DTS視頻編碼和EAC3音頻編碼

    利用第三方解碼器ffmpeg讓群暉DSM6.2.4版本的Video Station支持DTS視頻編碼和EAC3音頻編碼

    截至2022年5月6日,此方法可用! 本文章可以解決群暉版本6.2.4-25556 Update5(Video Station版本2.5.0-1656)在播放dts、eac3音頻編碼的視頻時提示不支持的問題。 對于群暉6.2.3版本,Video Station版本2.4.9,網(wǎng)上隨便搜的方法都可以使用,但是用在6.2.4未必可行。原因在于Video Station版本2

    2023年04月08日
    瀏覽(40)
  • Netty編解碼器,Netty自定義編解碼器解決粘包拆包問題,Netty編解碼器的執(zhí)行過程詳解

    Netty編解碼器,Netty自定義編解碼器解決粘包拆包問題,Netty編解碼器的執(zhí)行過程詳解

    當(dāng)Netty發(fā)送或者接收一個消息的時候,就會發(fā)生一次數(shù)據(jù)轉(zhuǎn)換。入站消息會被解碼(從字節(jié)轉(zhuǎn)換為另一種格式,比如java對象);出站消息會被編碼成字節(jié)。 Netty 提供一系列實用的編解碼器,他們都實現(xiàn)了 ChannelInboundHadnler 或者 ChannelOutboundHandler 接口。在這些類中,channelRead 方

    2023年04月23日
    瀏覽(31)
  • 【計算機視覺 | 目標(biāo)檢測】術(shù)語理解9:AIGC的理解,對比學(xué)習(xí),解碼器,Mask解碼器,耦合蒸餾,半耦合,圖像編碼器和組合解碼器的耦合優(yōu)化

    【計算機視覺 | 目標(biāo)檢測】術(shù)語理解9:AIGC的理解,對比學(xué)習(xí),解碼器,Mask解碼器,耦合蒸餾,半耦合,圖像編碼器和組合解碼器的耦合優(yōu)化

    AIGC指的是使用人工智能技術(shù)自動生成的各類數(shù)字內(nèi)容,包括文本、圖像、音頻、視頻等。它利用機器學(xué)習(xí)模型進(jìn)行智能化內(nèi)容生成。 主要的技術(shù)手段包括: 自然語言生成(NLG):使用RNN、GPT等語言模型生成文本。 生成對抗網(wǎng)絡(luò)(GAN):使用GAN生成高質(zhì)量圖片。 自動語音合成(TTS):使用

    2024年02月04日
    瀏覽(21)
  • 編碼器 | 基于 Transformers 的編碼器-解碼器模型

    基于 transformer 的編碼器-解碼器模型是 表征學(xué)習(xí) 和 模型架構(gòu) 這兩個領(lǐng)域多年研究成果的結(jié)晶。本文簡要介紹了神經(jīng)編碼器-解碼器模型的歷史,更多背景知識,建議讀者閱讀由 Sebastion Ruder 撰寫的這篇精彩 博文。此外,建議讀者對 自注意力 (self-attention) 架構(gòu) 有一個基本了解

    2024年02月08日
    瀏覽(28)
  • 【Transformer系列(1)】encoder(編碼器)和decoder(解碼器)

    【Transformer系列(1)】encoder(編碼器)和decoder(解碼器)

    前言 這個專欄我們開始學(xué)習(xí)transformer,自推出以來transformer在深度學(xué)習(xí)中占有重要地位,不僅在NLP領(lǐng)域,在CV領(lǐng)域中也被廣泛應(yīng)用,尤其是2021年,transformer在CV領(lǐng)域可謂大殺四方。 在論文的學(xué)習(xí)之前,我們先來介紹一些專業(yè)術(shù)語。本篇就讓我們先來認(rèn)識一下encoder和decoder吧!

    2024年03月25日
    瀏覽(22)
  • 22.Netty源碼之解碼器

    22.Netty源碼之解碼器

    https://mp.weixin.qq.com/s/526p5f9fgtZu7yYq5j7LiQ Netty 常用解碼器類型: ByteToMessageDecoder/ReplayingDecoder 將字節(jié)流解碼為消息對象; MessageToMessageDecoder 將一種消息類型解碼為另外一種消息類型。 自定義一次解碼器ByteToMessageDecoder解碼器,如果讀到的字節(jié)大小為4,那么認(rèn)為讀取到了1個完整的數(shù)

    2024年02月14日
    瀏覽(24)
  • 【Netty】Netty 解碼器(十二)

    【Netty】Netty 解碼器(十二)

    回顧Netty系列文章: Netty 概述(一) Netty 架構(gòu)設(shè)計(二) Netty Channel 概述(三) Netty ChannelHandler(四) ChannelPipeline源碼分析(五) 字節(jié)緩沖區(qū) ByteBuf (六)(上) 字節(jié)緩沖區(qū) ByteBuf(七)(下) Netty 如何實現(xiàn)零拷貝(八) Netty 程序引導(dǎo)類(九) Reactor 模型(十) 工作原理

    2024年02月07日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包