安装
dependencies:
fijkplayer: ^0.11.0
使用方法
import 'package:fijkplayer/fijkplayer.dart';
import 'package:flutter/material.dart';
class RtmpPlayerPage extends StatefulWidget {
const RtmpPlayerPage({super.key});
@override
State<RtmpPlayerPage> createState() => _RtmpPlayerPageState();
}
// ijkplayer参数设置https://www.cnblogs.com/marklove/articles/10608812.html
class _RtmpPlayerPageState extends State<RtmpPlayerPage> {
final FijkPlayer player = new FijkPlayer();
@override
void initState() {
// TODO: implement initState
super.initState();
// 设置这些会降低延迟和打开速度变快
player.setOption(1, "analyzemaxduration", 100);
player.setOption(1, "probesize", 10240);
player.setOption(1, "flush_packets", 1);
player.setOption(4, "packet-buffering", 0);
player.setOption(4, "framedrop", 1);
player.setDataSource("https://live.nodemedia.cn:8443/live/b480_264.flv",
autoPlay: true);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Fijkplayer Example")),
body: Container(
alignment: Alignment.center,
child: FijkView(
player: player,
),
));
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
player.release();
}
}
ijkplayer参数调优
1: 设置是否开启变调
2:设置是否开启环路过滤: 0开启,画面质量高,解码开销大,48关闭,画面质量差点,解码开销小
3:设置播放前的最大探测时间
4:设置播放前的探测时间 1,达到首屏秒开效果
5:播放前的探测Size,默认是1M, 改小一点会出画面更快
6:每处理一个packet之后刷新io上下文
7: 是否开启预缓冲,一般直播项目会开启,达到秒开的效果,不过带来了播放丢帧卡顿的体验
8:播放重连次数
9:最大缓冲大小,单位kb
10:跳帧处理,放CPU处理较慢时,进行跳帧处理,保证播放流程,画面和声音同步
11:最大fps
12:设置硬解码方式
jkPlayer支持硬解码和软解码。 软解码时不会旋转视频角度这时需要你通过onInfo的what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED去获取角度,自己旋转画面。或者开启硬解硬解码,不过硬解码容易造成黑屏无声(硬件兼容问题),下面是设置硬解码相关的代码
13.SeekTo设置优化
某些视频在SeekTo的时候,会跳回到拖动前的位置,这是因为视频的关键帧的问题,通俗一点就是FFMPEG不兼容,视频压缩过于厉害,seek只支持关键帧,出现这个情况就是原始的视频文件中i 帧比较少