fijkplayer flutter 直播流播放

fijkplayer flutter 直播流播放

fijkplayer 是 ijkplayer 的 Flutter 封裝, 是一款支持 android 和 iOS 的 Flutter 媒體播放器插件, 由 ijkplayer 底層驅動。
通過紋理(Texture)接入播放器視頻渲染到 Flutter 中。

前言

目前使用的服務端是 srs_stack

我的本地環境
[?] Flutter (Channel stable, 3.13.1, on macOS 13.6.1 22G313 darwin-x64, locale zh-Hans-CN)
? Flutter version 3.13.1 on channel stable at /Users/wangq/flutter
? Upstream repository https://github.com/flutter/flutter.git
? Framework revision e1e47221e8 (4 months ago), 2023-08-22 21:43:18 -0700
? Engine revision b20183e040
? Dart version 3.1.0
? DevTools version 2.25.0
? Pub download mirror https://pub.flutter-io.cn
? Flutter download mirror https://storage.flutter-io.cn

加入依賴

pubspec.yaml中加入依賴 -> 官方地址

fijkplayer: ^0.11.0

配置(解決延遲)

連上視頻流可能會發現有差不多10秒的播放延遲, 以下是有一些調整參數可以試下調整
我測試配置了analyzeduration: 1)后延遲就有很大改善(大概1秒多rtmp方案)
如果需要做到1秒內的延遲可能得用srt協議

注意:需要做到1秒內,錄制端,傳輸和播放端均需要做好優化

srt推流方案

    player.setOption(FijkOption.playerCategory, "fflags", 'nobuffer');player.setOption(FijkOption.playerCategory, "fast", 1);player.setOption(FijkOption.playerCategory, "framedrop", 5);player.setOption(FijkOption.playerCategory, "start-on-prepared", 1);player.setOption(FijkOption.formatCategory, "max-buffer-size", 0);player.setOption(FijkOption.playerCategory, "packet-buffering", 0);player.setOption(FijkOption.formatCategory, "analyzeduration", 1);player.setOption(FijkOption.formatCategory, "analyzemaxduration", 100);player.setOption(FijkOption.formatCategory, "rtsp_transport", 'tcp');player.setOption(FijkOption.formatCategory, "probesize", 100);player.setOption(FijkOption.formatCategory, "flush_packets", 0);player.setOption(FijkOption.playerCategory, "reconnect", 5);

測試源碼

官方的demo 可能是基于久版本的flutter的,我無法直接用, 遇到有問題的可以用以下源碼測試

import 'package:fijkplayer/fijkplayer.dart';
import 'package:flutter/material.dart';void main() {runApp(VideoScreen(url: 'rtmp://192.168.31.91/live/test110'));// runApp(VideoScreen(url: 'http://192.168.31.91:2022/live/test110.flv'));// runApp(VideoScreen(url: 'http://192.168.31.91:2022/live/livestream-trans.flv'));
}class VideoScreen extends StatefulWidget {final String url;VideoScreen({required this.url});_VideoScreenState createState() => _VideoScreenState();
}class _VideoScreenState extends State<VideoScreen> {final FijkPlayer player = FijkPlayer();_VideoScreenState();void initState() {super.initState();player.setDataSource(widget.url, autoPlay: true);// 解決播放延遲// player.setOption(FijkOption.playerCategory, "fflags", 'nobuffer');// player.setOption(FijkOption.playerCategory, "fast", 1);player.setOption(FijkOption.playerCategory, "framedrop", 1);// player.setOption(FijkOption.playerCategory, "framedrop", 5);// player.setOption(FijkOption.playerCategory, "start-on-prepared", 1);// player.setOption(FijkOption.formatCategory, "max-buffer-size", 0);// player.setOption(FijkOption.playerCategory, "packet-buffering", 0);player.setOption(FijkOption.formatCategory, "analyzeduration", 1);// player.setOption(FijkOption.formatCategory, "analyzemaxduration", 100);// player.setOption(FijkOption.formatCategory, "rtsp_transport", 'tcp');// player.setOption(FijkOption.formatCategory, "probesize", 100);// player.setOption(FijkOption.formatCategory, "flush_packets", 0);// player.setOption(FijkOption.playerCategory, "reconnect", 5);}Widget build(BuildContext context) {return MaterialApp(theme: ThemeData.from(colorScheme: ColorScheme.fromSeed(seedColor: Colors.red,brightness: Brightness.light,),useMaterial3: true,),home: Scaffold(appBar: AppBar(title: const Text('測試視頻流播放'),),body: Builder(builder: (context) {return Column(children: [Row(mainAxisAlignment: MainAxisAlignment.center,children: [IconButton(onPressed: () {// player.dispose();player.reset();player.setDataSource(widget.url, autoPlay: true);// player.start();},icon: Icon(Icons.not_started),color: Colors.green,),IconButton(onPressed: () {player.stop();},icon: Icon(Icons.stop),color: Colors.red,),IconButton(onPressed: () {var playable = player.isPlayable();print('playable: ${playable}');showSnackBar('playable: ${playable}', context: context);},icon: Icon(Icons.safety_check),color: Colors.blueAccent,),],),FijkView(player: player,width: 400,height: 300,),]);},),),);}void dispose() {super.dispose();player.release();}void showSnackBar(String text, {required BuildContext context}) {ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(text, style: const TextStyle(fontSize: 12))),);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207251.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設置單擊右鍵可以選擇用VS Code打開文件

設置單擊右鍵可以選擇用VS Code打開文件_通過code打開-CSDN博客

PostgreSQL 技術內幕(十二) CloudberryDB 并行化查詢之路

隨著數據驅動的應用日益增多&#xff0c;數據查詢和分析的量級和時效性要求也在不斷提升&#xff0c;對數據庫的查詢性能提出了更高的要求。為了滿足這一需求&#xff0c;數據庫引擎不斷經歷創新&#xff0c;其中并行執行引擎是性能提升的重要手段之一&#xff0c;逐漸成為數據…

sh腳本移動文件

內容&#xff1a;兩臺服務器&#xff0c;one 和 two ,在one的指定目錄下&#xff0c;找到指定結尾的文件&#xff0c;將這個文件移到two服務器的指定路徑下&#xff0c;同時將one的源文件 移到 其他目錄下。 #!/bin/bash# 指定源路徑 source_path"/u01/isi/75_files_te…

One-to-Few Label Assignment for End-to-End Dense Detection閱讀筆記

One-to-Few Label Assignment for End-to-End Dense Detection閱讀筆記 Abstract 一對一&#xff08;o2o&#xff09;標簽分配對基于變換器的端到端檢測起著關鍵作用&#xff0c;最近已經被引入到全卷積檢測器中&#xff0c;用于端到端密集檢測。然而&#xff0c;o2o可能因為…

[動態規劃及遞歸記憶搜索法]1.鋼條切割問題

摘要 本系列從6道經典的動態規劃題入手&#xff0c;去理解動態規劃的基本思路和想法&#xff0c;以及動態規劃和遞歸記憶搜索法存在的某些聯系&#xff0c;對于每道題目&#xff0c;我們將用兩種方法去實現&#xff0c;這里講解第一道題目&#xff0c;作個開頭。 前言 我們知…

elasticsearch 內網下如何以離線的方式上傳任意的huggingFace上的NLP模型(國內避坑指南)

es自2020年的8.x版本以來&#xff0c;就提供了機器學習的能力。我們可以使用es官方提供的工具eland&#xff0c;將hugging face上的NLP模型&#xff0c;上傳到es集群中。利用es的機器學習模塊&#xff0c;來運維部署管理模型。配合es的管道處理&#xff0c;來更加便捷的處理數據…

吳恩達《機器學習》12-1:優化目標

在機器學習的旅程中&#xff0c;我們已經接觸了多種學習算法。在監督學習中&#xff0c;選擇使用算法 A 還是算法 B 的重要性逐漸減弱&#xff0c;而更關鍵的是如何在應用這些算法時優化目標。這包括設計特征、選擇正則化參數等因素&#xff0c;這些在不同水平的實踐者之間可能…

UG NX二次開發(C#)-求曲線在某一點處的法矢和切矢

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 1、前言2、在UG NX中創建一個曲線3、直接放代碼4、測試案例1、前言 最近確實有點忙了,好久沒更新博客了。今天恰好有時間,就更新下,還請家人們見諒。 今天我們講一下如何獲取一條曲線上某一條曲…

注意力機制的快速學習

注意力機制的快速學習 注意力機制 將焦點聚焦在比較重要的事物上 我&#xff08;查詢對象Q&#xff09;&#xff0c;這張圖&#xff08;被查詢對象V&#xff09; 我看一張圖&#xff0c;第一眼&#xff0c;就會判斷那些東西對我而言比較重要&#xff0c;那些對于我不重要&…

Pytorch從零開始實戰12

Pytorch從零開始實戰——DenseNet算法實戰 本系列來源于365天深度學習訓練營 原作者K同學 文章目錄 Pytorch從零開始實戰——DenseNet算法實戰環境準備數據集模型選擇開始訓練可視化總結 環境準備 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch2.…

Elasticsearch、Logstash、Kibana(ELK)環境搭建

下面是 Elasticsearch、Logstash、Kibana&#xff08;ELK&#xff09;環境搭建的具體操作步驟&#xff1a; 安裝 Java ELK 是基于 Java 編寫的&#xff0c;因此需要先安裝 Java。建議安裝 Java 8 或以上版本。 下載并安裝 Elasticsearch Elasticsearch 是一個基于 Lucene 的…

DevEco Studio 運行項目有時會自動出現.js和.map文件

運行的時候報錯了&#xff0c;發現多了.js和.map&#xff0c;而且還不是一個&#xff0c;很多個。 通過查詢&#xff0c;好像是之前已知問題了&#xff0c;給的建議是手動刪除(一個一個刪)&#xff0c;而且有的評論還說&#xff0c;一周出現了3次&#xff0c;太可怕了。 搜的過…

【網絡編程】-- 02 端口、通信協議

網絡編程 3 端口 端口表示計算機上的一個程序的進程 不同的進程有不同的端口號&#xff01;用來區分不同的軟件進程 被規定總共0~65535 TCP,UDP&#xff1a;65535 * 2 在同一協議下&#xff0c;端口號不可以沖突占用 端口分類&#xff1a; 公有端口&#xff1a;0~1023 HT…

【android開發-23】android中WebView的用法詳解

1&#xff0c;WabView的用法 在Android中&#xff0c;WebView是一個非常重要的組件&#xff0c;它允許我們在Android應用中嵌入網頁&#xff0c;展示HTML內容。WebView是Android SDK中提供的標準組件&#xff0c;使用它我們可以很方便地將web頁面直接嵌入到Android應用中。Web…

亞信安慧AntDB數據庫中級培訓ACP上線,中國移動總部首批客戶認證通過

近日&#xff0c;亞信安慧AntDB數據庫ACP&#xff08;AntDB Certified Professional&#xff09;中級培訓課程于官網上線。在中國移動總部客戶運維團隊、現場項目部伙伴和AntDB數據庫成員的協同組織下&#xff0c;首批中級認證學員順利完成相關課程的培訓&#xff0c;并獲得Ant…

自然語言處理22-基于本地知識庫的快速問答系統,利用大模型的中文訓練集為知識庫

大家好,我是微學AI,今天給大家介紹一下自然語言處理22-基于本地知識庫的快速問答系統,利用大模型的中文訓練集為知識庫。我們的快速問答系統是基于本地知識庫和大模型的最新技術,它利用了經過訓練的中文大模型,該模型使用了包括alpaca_gpt4_data的開源數據集。 一、本地…

C //例10.3 從鍵盤讀入若干個字符串,對它們按字母大小的順序排序,然后把排好序的字符串送到磁盤文件中保存。

C程序設計 &#xff08;第四版&#xff09; 譚浩強 例10.3 例10.3 從鍵盤讀入若干個字符串&#xff0c;對它們按字母大小的順序排序&#xff0c;然后把排好序的字符串送到磁盤文件中保存。 IDE工具&#xff1a;VS2010 Note: 使用不同的IDE工具可能有部分差異。 代碼塊 方法…

2023_Spark_實驗二十五:SparkStreaming讀取Kafka數據源:使用Direct方式

SparkStreaming讀取Kafka數據源&#xff1a;使用Direct方式 一、前提工作 安裝了zookeeper 安裝了Kafka 實驗環境&#xff1a;kafka zookeeper spark 實驗流程 二、實驗內容 實驗要求&#xff1a;實現的從kafka讀取實現wordcount程序 啟動zookeeper zk.sh start# zk.sh…

生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)

如果x加上x的各個數字之和得到y&#xff0c;就說x是y的生成元。 給出n&#xff08;1≤n≤100000&#xff09;&#xff0c;求最小生成元。 無解輸出0。 例如&#xff0c;n216&#xff0c;121&#xff0c;2005時的解分別為198&#xff0c;0&#xff0c;1979。 我的思路很簡單&am…