Code Monkey home page Code Monkey logo

befovy / fijkplayer Goto Github PK

View Code? Open in Web Editor NEW
1.6K 28.0 331.0 2.84 MB

ijkplayer for flutter. ijkplayer 的 flutter 封装。 Flutter video/audio player. Flutter media player plugin for android/iOS based on ijkplayer. fijkplayer 是基于 ijkplayer 封装的 flutter 媒体播放器,开箱即用,无需编译 ijkplayer

Home Page: https://fijkplayer.befovy.com

License: MIT License

Java 19.42% Ruby 1.87% Objective-C 14.34% Dart 51.35% Go 10.65% C 2.28% Swift 0.09%
player video-player flutter ijkplayer ffmpeg fijkplayer video

fijkplayer's Introduction

fijkplayer (Video player plugin for Flutter) Flutter 媒体播放器

手把手带你写 Flutter 系统音量插件Flutter 多版本管理工具 fvm

HitCount     pub package     Action Status    

A Flutter media player plugin for iOS and android based on ijkplayer

您的支持是我们开发的动力。 欢迎Star,欢迎PR~。 Feedback welcome and Pull Requests are most welcome!

Documentation 文档

Installation 安装

Add fijkplayer as a dependency in your pubspec.yaml file.

pub package

dependencies:
  fijkplayer: ^{{latest version}}

Replace {{latest version}} with the version number in badge above.

Use git branch which not published to pub.

dependencies:
  fijkplayer:
    git:
      url: https://github.com/befovy/fijkplayer.git
      ref: develop # can be replaced to branch or tag name

Example 示例

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("Fijkplayer Example")),
        body: Container(
          alignment: Alignment.center,
          child: FijkView(
            player: player,
          ),
        ));
  }

  @override
  void dispose() {
    super.dispose();
    player.release();
  }
}

Contributors 贡献者 ✨

Thanks goes to these wonderful people (emoji key)

This project follows the all-contributors specification. Contributions of any kind welcome

iOS Warning 警告

Warning: The fijkplayer video player plugin is not functional on iOS simulators. An iOS device must be used during development/testing. For more details, please refer to this issue.

Join Ding Talk Group 加入钉钉群

加入钉钉群 微信赞赏码 支付宝
加入钉钉群 微信赞赏码 支付宝二维码

fijkplayer's People

Contributors

allcontributors[bot] avatar befovy avatar coderhfzhu avatar dependabot[bot] avatar duong-itads avatar fantasy525 avatar huluxia avatar im-ling avatar imgbotapp avatar jamesgzm avatar jinsong5 avatar layxyer avatar mmmzq avatar zhangbokang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fijkplayer's Issues

视频横竖屏切换后的适配问题(使用的是flutter_screenutil)

问题效果图:
全屏前:
11111111111

全屏后再次恢复成竖屏:
1569425081940

我的适配是用的框架flutter_screenutil,视频的container宽高设置为
width: ScreenUtil.screenWidthDp,
height: ScreenUtil.screenWidthDp0.5625, (16:9)
进入全屏后,宽度值即为屏幕的高度,退出全屏ScreenUtil.screenWidthDp获取到的宽度依然为屏幕的高度,所以导致ScreenUtil.screenWidthDp
0.5625比实际的大
代码:

Widget get videoSection {
    return Container(
        width: ScreenUtil.screenWidthDp,
        height: ScreenUtil.screenWidthDp*0.5625,
        color: Colors.white,
        alignment: Alignment.center,
        child: _video==''?
        Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.max,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Text('添加顶部宣传视频',
              style: TextStyle(
                color: Colors.grey,
                fontSize: ScreenUtil().setSp(29.0),
              ),
            ),
            Container(
              margin: EdgeInsets.fromLTRB(0, 15, 0, 0),
              padding: EdgeInsets.fromLTRB(15, 5, 15, 5),
              decoration: BoxDecoration(
                  border: new Border.all(color: Colors.red[500], width: 1), // 边色与边宽度
                  borderRadius: BorderRadius.all(Radius.circular(5))
              ),
              child: Text('添加视频',
                style: TextStyle(
                  color: Colors.red,
                  fontSize: ScreenUtil().setSp(28.0),
                ),
              ),
            )
          ],
        ): Container(
          child: FijkView(
            player: player,
          ),
        )
    );
  }

解决办法:
宽度的获取改成通过MediaQuery.of(context).size.width去获取,这样获取的宽度不会随着全屏而变化
代码:

Widget get videoSection {
    return Container(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.width*0.5625,
        color: Colors.white,
        alignment: Alignment.center,
        child: _video==''?
        Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.max,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Text('添加顶部宣传视频',
              style: TextStyle(
                color: Colors.grey,
                fontSize: 15,
              ),
            ),
            Container(
              margin: EdgeInsets.fromLTRB(0, 15, 0, 0),
              padding: EdgeInsets.fromLTRB(15, 5, 15, 5),
              decoration: BoxDecoration(
                  border: new Border.all(color: Colors.red[500], width: 1), // 边色与边宽度
                  borderRadius: BorderRadius.all(Radius.circular(5))
              ),
              child: Text('添加视频',
                style: TextStyle(
                  color: Colors.red,
                  fontSize: 15,
                ),
              ),
            )
          ],
        ): Container(
          child: FijkView(
            player: player,
            fit: FijkFit.ar16_9,
          ),
        )
    );
  }

动态更改视频流

在fluuter中,想要动态修改player中的视频流时,无法修改,有什么解决方法吗?

[BUG]把自动播放 设置false 的时候 一直是转圈圈的状态

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

fijkplayer version
Which version you used.

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]

Additional context
Add any other context about the problem here.

编译 Android 报错

iOS 正常
编译 Android 模拟器报错
/.../flutter/.pub-cache/hosted/pub.flutter-io.cn/fijkplayer-0.1.0/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java:11: 错误: 找不到符号
import androidx.annotation.NonNull;
^
符号: 类 NonNull
位置: 程序包 androidx.annotation
/Users/zerojian/Code/Framework/flutter/.pub-cache/hosted/pub.flutter-io.cn/fijkplayer-0.1.0/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java:223: 错误: 找不到符号
public void onMethodCall(@nonnull MethodCall call, @nonnull MethodChannel.Result result) {
^
符号: 类 NonNull
位置: 类 FijkPlayer
/Users/zerojian/Code/Framework/flutter/.pub-cache/hosted/pub.flutter-io.cn/fijkplayer-0.1.0/android/src/main/java/com/befovy/fijkplayer/FijkPlayer.java:223: 错误: 找不到符号
public void onMethodCall(@nonnull MethodCall call, @nonnull MethodChannel.Result result) {
^
符号: 类 NonNull
位置: 类 FijkPlayer
3 个错误

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':fijkplayer:compileDebugJavaWithJavac'.

Compilation failed; see the compiler error output for details.

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

部分视频无法播放

http://jiasu-33.ivneu.cn/20190702/%E5%88%9D%E6%81%8B%E6%9C%AA%E6%BB%A1/2000kb/hls/index.m3u8

控制台显示如下:
I/IJKMEDIA(15880): SDL_JNI_DetachThreadEnv: [16315]
D/IJKMEDIA(15880): FFP_MSG_ERROR: -1094995529
E/tv.danmaku.ijk.media.player.IjkMediaPlayer(15880): Error (-1094995529,0,Invalid data found when processing input)
I/flutter (15880): errorListerner: PlatformException(-1094995529, Invalid data found when processing input, 0), FijkException(-1094995529, Invalid data found when processing input)
I/flutter (15880): state_change: new: FijkState.error <= old: FijkState.asyncPreparing

ERROR: Tried to send a platform message to Flutter, but FlutterJNI was detached from native C++.

在播放直播流媒体视频时,dispose方法中执行player.release();页面退出后视频仍然在播放,且控制台一直打印
W/FlutterJNI(18808): Tried to send a platform message to Flutter, but FlutterJNI was detached from native C++. Could not send. Channel: befovy.com/fijkplayer/event/2. Response ID: 0
V/DartMessenger(18808): Sending message with callback over channel 'befovy.com/fijkplayer/event/3'
W/FlutterJNI(18808): Tried to send a platform message to Flutter, but FlutterJNI was detached from native C++. Could not send. Channel: befovy.com/fijkplayer/event/3. Response ID: 0
V/DartMessenger(18808): Sending message with callback over channel 'befovy.com/fijkplayer/event/2'
不停的循环打印这两段日志信息

[BUG]出现一次默认控制器 Slider 错误

Flutter 1.91 sdk 版本 0.1.0
为了实现自动播放下一集目前我这边的做法是监听播放器状态 completed 然后 reSet 和 setDataSource(), 测试中出现一次 Slider 溢出错误, 在播放到最后一秒的时候
错误信息:
"package:flutter/src/material/slider.dart':Failed assertion: line 132 pos 15: 'value >= min && value <= max':is not true

另外测试多个视频发现没有调用 completed, 播放时长也会在离总时长差 1 秒时停住, 播放源为 .m3u8

视频太大播放卡顿

大哥 你好,非常感谢你提供这个分享

主要使用问题: 我在播放 腾讯的视频流的时候 非常卡顿

   [`流`]https://ltsws.qq.com/uwMROfz2r5zAoaQXGdGnC2df644E7D3uP8M8pmtgwsRK9nEL/5UyykS86KVQ2mlAI0UveLqXs7Yf8Sn5QSEAO1T7Tltr7XIBIawTmdGfMcfVw_DZDdAMFbwqQEoXh0peMsleyGDOFNV_BRovI0GSdDbYY_w1Ci7t3BT13cQWWD-Sf_8evM7GCMYnxdLuedkXErucUqUxoxbx_qlGufkBKckZhPiA/e003281huvn.321002.ts.m3u8?ver=4",

没有调用 start 接口,播放器就开始播放

遇到的情况是在进入页面的时候直接开始播放,会太突然

建议增加一个点击了再播放的状态
可以在进入的时候还是异步加载,然后不播放,或者直接暂停在第一帧

Error when running example app

Error when running example app

Resolving dependencies...                                           5.9s

Compiler message:
file:///E:/Flutter%20Apps/fijkplayer-master/lib/fijkplayer.dart:5:8: Error: Error when reading 'file:///E:/Flutter%20Apps/fijkplayer-master/lib/utils.dart': The system cannot find the file specified.

import 'utils.dart';
       ^
Compiler failed on E:\Flutter Apps\fijkplayer-master\example\lib/main.dart
Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done                         6.8s
Gradle task assembleDebug failed with exit code 1

视频截图功能

现在网上关于Flutter 屏幕截图全都是采用 RepaintBoundary 来包裹Widget实现,但是FijkPlayer并不是一个Widget, 我在操作用这种方式截屏的时候,只能截取到我自定义的播放器UI的图,视频的播放内容截取不到,目前有没有什么其他的方法可以实现视频截图,如果你后面要实现视频截图功能,你大概会怎么做,可以给点意见吗

在mac上进行pod install时报错 No such file or directory fijkplayer.podspec.json

报错信息如下
The 'Pods-Runner' target has transitive dependencies that include statically linked binaries: (/Users/apple/code/IH_MT/IH_MT/ios/Pods/FIJKPlayer/IJKPlayer.framework)
然后看了一下别人的解决方案
在spec文档中添加s.static_framework=true时
报了另外一个错误
no file found Fijkplayer. json
我使用的版本是0.1.4

Rtsp protocol support?

Is there any plans of adding rtsp protocol support? Right now i'm making an app in Flutter where I need to use stream with rtsp protocol but I can't find any package that would work with Flutter.

动态更改加载视频地址

你好,我想问一下怎么在一个界面动态更改视频地址呢?
我们的视频是有清晰度1和清晰度2两种,对应两个地址。功能要求可以动态切换。

目前代码:
url = url1;
player.setDataSource(url,autoPlay: true);

然后切换的时候:
setState(() {
url = url2;
});

这样操作会报错:
[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: Bad state: setDataSource on invalid state FijkState.error
null

请问正确的实现方式是什么呢?

[BUG]视频画面和声音不同步

[BUG]更改视频源之后,画面卡在上一个视频切换点

如题,异步等待reset重置idle后,切换播放源之后视频画面卡在上一个视频切换点,其他的都是正常的,打印无明显报错,切换到第一个视频后又回归正常播放

代码如下

await player.reset();
await player.setDataSource(url, autoPlay: true)

fijkplayer flutter环境

  • fijkplayer: ^0.1.9
  • flutter:1.9.1+hotfix.6

手机

  • iPhone6s 13.1.2)
  • Pixel 2 API 29 安卓模拟器

打印信息

第一段视频

D/IJKMEDIA(29889): IjkMediaPlayer_native_setup
I/IJKMEDIA(29889): av_version_info: ff3.4--ijk0.8.7--20180103--001
I/IJKMEDIA(29889): ijk_version_info: f0.3.7
D/IJKMEDIA(29889): ffpipeline_create_from_android()
D/IJKMEDIA(29889): ijkmp_set_inject_opaque(0x28a2)
D/IJKMEDIA(29889): ijkmp_set_inject_opaque()=void
D/IJKMEDIA(29889): ijkmp_set_ijkio_inject_opaque(0x28a2)
D/IJKMEDIA(29889): ijkmp_set_ijkio_inject_opaque()=void
D/IJKMEDIA(29889): ijkmp_android_set_mediacodec_select_callback()
D/IJKMEDIA(29889): ffpipeline_set_mediacodec_select_callback
D/IJKMEDIA(29889): ijkmp_android_set_mediacodec_select_callback()=void
D/IJKMEDIA(29889): IjkMediaPlayer_setOptionLong
D/IJKMEDIA(29889): IjkMediaPlayer_native_setLogLevel(4)
D/IJKMEDIA(29889): moncleanup
I/flutter (29889): [inf] 2019-11-05 11:51:37.053345 [fijk] create player id:2
I/flutter (29889): [inf] 2019-11-05 11:51:37.102796 [fijk] FijkPlayer{id:2} setupSurface
D/IJKMEDIA(29889): IjkMediaPlayer_setVideoSurface
D/IJKMEDIA(29889): ijkmp_set_android_surface(surface=0xffacae60)
D/IJKMEDIA(29889): ffpipeline_set_surface()
D/IJKMEDIA(29889): ijkmp_set_android_surface(surface=0xffacae60)=void
I/flutter (29889): [inf] 2019-11-05 11:51:37.145001 [fijk] view setup, vid:1
I/flutter (29889): CacheManager: Failed to download file from  with error:
I/flutter (29889): Invalid argument(s): No host specified in URI
I/flutter (29889): CacheManager: Failed to download file from  with error:
I/flutter (29889): Invalid argument(s): No host specified in URI
I/flutter (29889): [inf] 2019-11-05 11:51:37.419818 [fijk] FijkPlayer{id:2} invoke reset #1
D/IJKMEDIA(29889): IjkMediaPlayer_reset
D/IJKMEDIA(29889): ijkmp_reset()
D/IJKMEDIA(29889): ijkmp_reset()=0
I/flutter (29889): [inf] 2019-11-05 11:51:37.506097 [fijk] FijkPlayer{id:2} invoke reset #1 -> done
I/flutter (29889): [inf] 2019-11-05 11:51:37.511573 [fijk] FijkPlayer{id:2} invoke setDateSource http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191011/294b702c4cb3434c9d203450fcf720a4.mp4
D/tv.danmaku.ijk.media.player.IjkMediaPlayer(29889): Couldn't open file on client side, trying server side
D/IJKMEDIA(29889): IjkMediaPlayer_setDataSourceAndHeaders
V/IJKMEDIA(29889): setDataSource: path http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191011/294b702c4cb3434c9d203450fcf720a4.mp4
D/IJKMEDIA(29889): ijkmp_set_data_source(url="http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191011/294b702c4cb3434c9d203450fcf720a4.mp4")
D/IJKMEDIA(29889): ijkmp_set_data_source(url="http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191011/294b702c4cb3434c9d203450fcf720a4.mp4")=0
I/flutter (29889): [inf] 2019-11-05 11:51:37.526174 [fijk] FijkPlayer{id:2} state changed to FijkState.initialized <= FijkState.idle
I/flutter (29889): [inf] 2019-11-05 11:51:37.536759 [fijk] FijkPlayer{id:2} invoke prepareAsync and start #2
I/flutter (29889): [inf] 2019-11-05 11:51:37.538327 [fijk] FijkPlayer{id:2} setOption k:start-on-prepared, v:1
D/IJKMEDIA(29889): IjkMediaPlayer_setOptionLong
D/IJKMEDIA(29889): IjkMediaPlayer_prepareAsync
D/IJKMEDIA(29889): ijkmp_prepare_async()
I/IJKMEDIA(29889): ===== versions =====
I/IJKMEDIA(29889): ijkplayer    : f0.3.7
I/IJKMEDIA(29889): FFmpeg       : ff3.4--ijk0.8.7--20180103--001
I/IJKMEDIA(29889): libavutil    : 55.78.100
I/IJKMEDIA(29889): libavcodec   : 57.107.100
I/IJKMEDIA(29889): libavformat  : 57.83.100
I/IJKMEDIA(29889): libswscale   : 4.8.100
I/IJKMEDIA(29889): libswresample: 2.9.100
I/IJKMEDIA(29889): ===== options =====
I/IJKMEDIA(29889): player-opts : start-on-prepared            = 1
I/IJKMEDIA(29889): format-opts : ijkapplication               = -975655728
I/IJKMEDIA(29889): format-opts : ijkiomanager                 = -975488128
I/IJKMEDIA(29889): ===================
D/IJKMEDIA(29889): ijkmp_prepare_async()=0
I/flutter (29889): [inf] 2019-11-05 11:51:37.631145 [fijk] FijkPlayer{id:2} state changed to FijkState.asyncPreparing <= FijkState.initialized
I/IJKMEDIA(29889): SDL_RunThread: [30178] ff_msg_loop
D/IJKMEDIA(29889): message_loop
D/IJKMEDIA(29889): FFP_MSG_FLUSH:
I/IJKMEDIA(29889): SDL_RunThread: [30180] ff_read
I/IJKMEDIA(29889): SDL_RunThread: [30179] ff_vout
I/flutter (29889): [inf] 2019-11-05 11:51:37.665931 [fijk] FijkPlayer{id:2} invoke prepareAsync and start #2 -> done
I/tv.danmaku.ijk.media.player.IjkMediaPlayer(29889): onNativeInvoke 1
I/flutter (29889): [inf] 2019-11-05 11:51:37.688440 [fijk] FijkPlayer{id:2} state changed to FijkState.initialized <= FijkState.idle
I/flutter (29889): [inf] 2019-11-05 11:51:37.688765 [fijk] FijkPlayer{id:2} state changed to FijkState.asyncPreparing <= FijkState.initialized
I/tv.danmaku.ijk.media.player.IjkMediaPlayer(29889): onNativeInvoke 131073
I/tv.danmaku.ijk.media.player.IjkMediaPlayer(29889): onNativeInvoke 131074
I/IJKMEDIA(29889): Add dns cache hostname = ppbp.oss-cn-hangzhou.aliyuncs.com, ip = 47.110.23.127
I/tv.danmaku.ijk.media.player.IjkMediaPlayer(29889): onNativeInvoke 2
D/IJKMEDIA(29889): FFP_MSG_OPEN_INPUT:
E/IJKMEDIA(29889): Option ijkiomanager not found.
D/IJKMEDIA(29889): FFP_MSG_FIND_STREAM_INFO:
I/IJKMEDIA(29889): max_frame_duration: 10.000
I/IJKMEDIA(29889): Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191011/294b702c4cb3434c9d203450fcf720a4.mp4':
I/IJKMEDIA(29889):   Metadata:
I/IJKMEDIA(29889):     major_brand     :
I/IJKMEDIA(29889): isom
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     minor_version   :
I/IJKMEDIA(29889): 512
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     compatible_brands:
I/IJKMEDIA(29889): isomiso2avc1mp41
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     encoder         :
I/IJKMEDIA(29889): Lavf56.40.101
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):   Duration:
I/IJKMEDIA(29889): 00:00:08.50
I/IJKMEDIA(29889): , start:
I/IJKMEDIA(29889): 0.000000
I/IJKMEDIA(29889): , bitrate:
I/IJKMEDIA(29889): 744 kb/s
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     Stream #0:0
I/IJKMEDIA(29889): (eng)
I/IJKMEDIA(29889): : Video: h264 (avc1 / 0x31637661), yuv420p, 640x640 [SAR 1:1 DAR 1:1], 675 kb/s
I/IJKMEDIA(29889): ,
I/IJKMEDIA(29889): 30 fps,
I/IJKMEDIA(29889): 30 tbr,
I/IJKMEDIA(29889): 15360 tbn,
I/IJKMEDIA(29889): 60 tbc
I/IJKMEDIA(29889):  (default)
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     Metadata:
I/IJKMEDIA(29889):       handler_name    :
I/IJKMEDIA(29889): VideoHandler
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     Stream #0:1
I/IJKMEDIA(29889): (eng)
I/IJKMEDIA(29889): : Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 64 kb/s
I/IJKMEDIA(29889):  (default)
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     Metadata:
I/IJKMEDIA(29889):       handler_name    :
I/IJKMEDIA(29889): SoundHandler
I/IJKMEDIA(29889):
I/IJKMEDIA(29889): SDL_Android_AudioTrack: CHANNEL_OUT_MONO
I/IJKMEDIA(29889): SDL_Android_AudioTrack: ENCODING_PCM_16BIT
W/AudioTrack(29889): Use of stream types is deprecated for operations other than volume control
W/AudioTrack(29889): See the documentation of AudioTrack() for what to use instead with android.media.AudioAttributes to qualify your playback use case
I/IJKMEDIA(29889): SDL_Android_AudioTrack_new_from_spec: init volume as 1.000000/(0.000000,1.000000)
I/IJKMEDIA(29889): audio_session_id = 1193
I/IJKMEDIA(29889): AudioCodec: avcodec, aac
I/IJKMEDIA(29889): VideoCodec: avcodec, h264
W/IJKMEDIA(29889): fps: 30.000000 (normal)
W/IJKMEDIA(29889): fps: 30.000000 (normal)
D/IJKMEDIA(29889): FFP_MSG_COMPONENT_OPEN:
D/IJKMEDIA(29889): FFP_MSG_VIDEO_SIZE_CHANGED: 640, 640
D/IJKMEDIA(29889): FFP_MSG_SAR_CHANGED: 1, 1
D/IJKMEDIA(29889): ijkmp_get_msg: FFP_MSG_PREPARED
D/IJKMEDIA(29889): FFP_MSG_PREPARED:
I/IJKMEDIA(29889): SDL_RunThread: [30184] ff_aout_android
I/IJKMEDIA(29889): SDL_RunThread: [30189] ff_video_dec
D/IJKMEDIA(29889): FFP_MSG_VIDEO_ROTATION_CHANGED: 0
I/flutter (29889): [inf] 2019-11-05 11:51:38.042551 [fijk] FijkPlayer{id:2} size changed (640, 640)
D/IJKMEDIA(29889): FFP_MSG_AUDIO_RENDERING_START:
I/IJKMEDIA(29889): SDL_RunThread: [30185] ff_audio_dec
I/flutter (29889): [inf] 2019-11-05 11:51:38.086692 [fijk] FijkPlayer{id:2} prepared duration 0:00:08.499000
I/flutter (29889): [inf] 2019-11-05 11:51:38.096934 [fijk] FijkPlayer{id:2} state changed to FijkState.prepared <= FijkState.asyncPreparing
I/flutter (29889): [inf] 2019-11-05 11:51:38.097423 [fijk] FijkPlayer{id:2} state changed to FijkState.started <= FijkState.prepared
D/IJKMEDIA(29889): SDL_VoutFFmpeg_CreateOverlay(w=640, h=640, fmt=RV32(0x32335652, dp=0xb3bc8620)
D/IJKMEDIA(29889): Video: first frame decoded
D/IJKMEDIA(29889): FFP_MSG_VIDEO_SIZE_CHANGED: 640, 640
D/IJKMEDIA(29889): FFP_MSG_VIDEO_DECODED_START:
D/IJKMEDIA(29889): ANativeWindow_setBuffersGeometry: w=1, h=1, f=�(0x1) => w=640, h=640, f=RV32(0x32335652)
W/Gralloc3(29889): allocator 3.x is not supported
I/flutter (29889): [inf] 2019-11-05 11:51:38.150064 [fijk] FijkPlayer{id:2} audio rendering started
D/IJKMEDIA(29889): FFP_MSG_VIDEO_SIZE_CHANGED: 640, 640
D/IJKMEDIA(29889): avcodec/Audio: first frame decoded
D/IJKMEDIA(29889): FFP_MSG_AUDIO_DECODED_START:
D/eglCodecCommon(29889): allocate: Ask for block of size 0x191000
D/eglCodecCommon(29889): allocate: ioctl allocate returned offset 0x3fee33000 size 0x192000
D/IJKMEDIA(29889): SDL_VoutFFmpeg_CreateOverlay(w=640, h=640, fmt=RV32(0x32335652, dp=0xb3bc8620)
D/IJKMEDIA(29889): SDL_VoutFFmpeg_CreateOverlay(w=640, h=640, fmt=RV32(0x32335652, dp=0xb3bc8620)
D/IJKMEDIA(29889): FFP_MSG_VIDEO_RENDERING_START:
D/IJKMEDIA(29889): FFP_MSG_VIDEO_SIZE_CHANGED: 640, 640
I/tv.danmaku.ijk.media.player.IjkMediaPlayer(29889): Info: MEDIA_INFO_VIDEO_RENDERING_START
I/flutter (29889): [inf] 2019-11-05 11:51:38.352834 [fijk] FijkPlayer{id:2} size changed (640, 640)
I/flutter (29889): [inf] 2019-11-05 11:51:38.353396 [fijk] FijkPlayer{id:2} size changed (640, 640)
I/flutter (29889): [inf] 2019-11-05 11:51:38.353578 [fijk] FijkPlayer{id:2} video rendering started
I/flutter (29889): [inf] 2019-11-05 11:51:38.354257 [fijk] FijkPlayer{id:2} size changed (640, 640)
I/yu.shop.androi(29889): Background young concurrent copying GC freed 9595(1393KB) AllocSpace objects, 0(0B) LOS objects, 52% free, 1296KB/2743KB, paused 508us total 120.477ms
I/IJKMEDIA(29889): ffp_toggle_buffering: completed: OK
D/IJKMEDIA(29889): ijkmp_get_msg: FFP_MSG_COMPLETED
D/IJKMEDIA(29889): FFP_MSG_COMPLETED:
I/IJKMEDIA(29889): ffp_toggle_buffering: eof

第二段视频

I/flutter (29889): [inf] 2019-11-05 11:51:47.302659 [fijk] FijkPlayer{id:2} state changed to FijkState.completed <= FijkState.started
I/flutter (29889): [inf] 2019-11-05 11:52:57.745 [fijk] FijkPlayer{id:2} invoke reset #3
D/IJKMEDIA(29889): IjkMediaPlayer_reset
D/IJKMEDIA(29889): ijkmp_reset()
I/IJKMEDIA(29889): convert image convert_frame_count = 0
I/IJKMEDIA(29889): SDL_JNI_DetachThreadEnv: [30189]
I/IJKMEDIA(29889): SDL_JNI_DetachThreadEnv: [30185]
I/IJKMEDIA(29889): SDL_JNI_DetachThreadEnv: [30179]
I/IJKMEDIA(29889): SDL_JNI_DetachThreadEnv: [30180]
W/AudioTrack(29889): restartIfDisabled(156): releaseBuffer() track 0xbbbd7500 disabled due to previous underrun, restarting
D/AudioTrack(29889): stop(156): called with 380288 frames delivered
I/IJKMEDIA(29889): SDL_JNI_DetachThreadEnv: [30184]
E/IJKMEDIA(29889): SDL_Overlay(ffmpeg): overlay_free_l(0xbe17ad80)
E/IJKMEDIA(29889): SDL_Overlay(ffmpeg): overlay_free_l(0xc528b740)
E/IJKMEDIA(29889): SDL_Overlay(ffmpeg): overlay_free_l(0xbe17ae80)
D/IJKMEDIA(29889): ijkmp_reset()=0
I/flutter (29889): [inf] 2019-11-05 11:52:57.932551 [fijk] FijkPlayer{id:2} state changed to FijkState.idle <= FijkState.completed
I/flutter (29889): [inf] 2019-11-05 11:52:57.933721 [fijk] FijkPlayer{id:2} invoke reset #3 -> done
I/flutter (29889): [inf] 2019-11-05 11:52:57.934390 [fijk] FijkPlayer{id:2} invoke setDateSource http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191010/7a888bd3385843afb431ad67661a36cb.mp4
D/tv.danmaku.ijk.media.player.IjkMediaPlayer(29889): Couldn't open file on client side, trying server side
D/IJKMEDIA(29889): IjkMediaPlayer_setDataSourceAndHeaders
V/IJKMEDIA(29889): setDataSource: path http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191010/7a888bd3385843afb431ad67661a36cb.mp4
D/IJKMEDIA(29889): ijkmp_set_data_source(url="http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191010/7a888bd3385843afb431ad67661a36cb.mp4")
D/IJKMEDIA(29889): ijkmp_set_data_source(url="http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191010/7a888bd3385843afb431ad67661a36cb.mp4")=0
I/flutter (29889): [inf] 2019-11-05 11:52:57.941940 [fijk] FijkPlayer{id:2} state changed to FijkState.initialized <= FijkState.idle
I/flutter (29889): [inf] 2019-11-05 11:52:57.942307 [fijk] FijkPlayer{id:2} invoke prepareAsync and start #4
I/flutter (29889): [inf] 2019-11-05 11:52:57.942424 [fijk] FijkPlayer{id:2} setOption k:start-on-prepared, v:1
D/IJKMEDIA(29889): IjkMediaPlayer_setOptionLong
I/flutter (29889): [inf] 2019-11-05 11:52:57.972681 [fijk] FijkPlayer{id:2} state changed to FijkState.initialized <= FijkState.idle
D/IJKMEDIA(29889): IjkMediaPlayer_prepareAsync
D/IJKMEDIA(29889): ijkmp_prepare_async()
I/IJKMEDIA(29889): ===== versions =====
I/IJKMEDIA(29889): ijkplayer    : f0.3.7
I/IJKMEDIA(29889): FFmpeg       : ff3.4--ijk0.8.7--20180103--001
I/IJKMEDIA(29889): libavutil    : 55.78.100
I/IJKMEDIA(29889): libavcodec   : 57.107.100
I/IJKMEDIA(29889): libavformat  : 57.83.100
I/IJKMEDIA(29889): libswscale   : 4.8.100
I/IJKMEDIA(29889): SDL_RunThread: [30223] ff_msg_loop
D/IJKMEDIA(29889): message_loop
I/IJKMEDIA(29889): libswresample: 2.9.100
I/IJKMEDIA(29889): ===== options =====
I/IJKMEDIA(29889): player-opts : start-on-prepared            = 1
I/IJKMEDIA(29889): format-opts : ijkiomanager                 = -975488128
I/IJKMEDIA(29889): ===================
W/IJKMEDIA(29889): -volume=128 > 100, setting to 100
I/IJKMEDIA(29889): SDL_RunThread: [30224] ff_vout
D/IJKMEDIA(29889): ijkmp_prepare_async()=0
I/IJKMEDIA(29889): SDL_RunThread: [30225] ff_read
I/IJKMEDIA(29889): Hit DNS cache hostname = ppbp.oss-cn-hangzhou.aliyuncs.com
I/flutter (29889): [inf] 2019-11-05 11:52:57.997667 [fijk] FijkPlayer{id:2} state changed to FijkState.asyncPreparing <= FijkState.initialized
I/flutter (29889): [inf] 2019-11-05 11:52:57.997979 [fijk] FijkPlayer{id:2} invoke prepareAsync and start #4 -> done
I/flutter (29889): [inf] 2019-11-05 11:52:57.998254 [fijk] FijkPlayer{id:2} state changed to FijkState.asyncPreparing <= FijkState.initialized
I/IJKMEDIA(29889): Hit DNS cache hostname = ppbp.oss-cn-hangzhou.aliyuncs.com
D/IJKMEDIA(29889): FFP_MSG_OPEN_INPUT:
E/IJKMEDIA(29889): Option ijkiomanager not found.
I/IJKMEDIA(29889): Hit DNS cache hostname = ppbp.oss-cn-hangzhou.aliyuncs.com
I/IJKMEDIA(29889): max_frame_duration: 10.000
I/IJKMEDIA(29889): Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'http://ppbp.oss-cn-hangzhou.aliyuncs.com/upload/20191010/7a888bd3385843afb431ad67661a36cb.mp4':
I/IJKMEDIA(29889):   Metadata:
I/IJKMEDIA(29889):     major_brand     :
I/IJKMEDIA(29889): isom
I/IJKMEDIA(29889):
D/IJKMEDIA(29889): FFP_MSG_FIND_STREAM_INFO:
I/IJKMEDIA(29889):     minor_version   :
I/IJKMEDIA(29889): 512
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     compatible_brands:
I/IJKMEDIA(29889): isomiso2mp41
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     encoder         :
I/IJKMEDIA(29889): Lavf58.12.100
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):   Duration:
I/IJKMEDIA(29889): 00:00:28.02
I/IJKMEDIA(29889): , start:
I/IJKMEDIA(29889): 0.000000
I/IJKMEDIA(29889): , bitrate:
I/IJKMEDIA(29889): 977 kb/s
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     Stream #0:0
I/IJKMEDIA(29889): (eng)
I/IJKMEDIA(29889): : Video: mpeg4 (mp4v / 0x7634706D), none, 640x360, 844 kb/s
I/IJKMEDIA(29889): , SAR 1:1 DAR 16:9
I/IJKMEDIA(29889): ,
I/IJKMEDIA(29889): 24 fps,
I/IJKMEDIA(29889): 24 tbr,
I/IJKMEDIA(29889): 12288 tbn,
I/IJKMEDIA(29889): 12288 tbc
I/IJKMEDIA(29889):  (default)
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     Metadata:
I/IJKMEDIA(29889):       handler_name    :
I/IJKMEDIA(29889): VideoHandler
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     Stream #0:1
I/IJKMEDIA(29889): (eng)
I/IJKMEDIA(29889): : Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s
I/IJKMEDIA(29889):  (default)
I/IJKMEDIA(29889):
I/IJKMEDIA(29889):     Metadata:
I/IJKMEDIA(29889):       handler_name    :
I/IJKMEDIA(29889): SoundHandler
I/IJKMEDIA(29889):
I/IJKMEDIA(29889): SDL_Android_AudioTrack: CHANNEL_OUT_STEREO
I/IJKMEDIA(29889): SDL_Android_AudioTrack: ENCODING_PCM_16BIT
W/AudioTrack(29889): Use of stream types is deprecated for operations other than volume control
W/AudioTrack(29889): See the documentation of AudioTrack() for what to use instead with android.media.AudioAttributes to qualify your playback use case
I/IJKMEDIA(29889): SDL_Android_AudioTrack_new_from_spec: init volume as 1.000000/(0.000000,1.000000)
I/IJKMEDIA(29889): audio_session_id = 1201
I/IJKMEDIA(29889): AudioCodec: avcodec, aac
W/IJKMEDIA(29889): No codec could be found with id 13
D/IJKMEDIA(29889): FFP_MSG_COMPONENT_OPEN:
D/IJKMEDIA(29889): ijkmp_get_msg: FFP_MSG_PREPARED
D/IJKMEDIA(29889): FFP_MSG_PREPARED:
I/IJKMEDIA(29889): SDL_RunThread: [30229] ff_audio_dec
I/flutter (29889): [inf] 2019-11-05 11:52:58.308947 [fijk] FijkPlayer{id:2} state changed to FijkState.prepared <= FijkState.asyncPreparing
I/flutter (29889): [inf] 2019-11-05 11:52:58.310977 [fijk] FijkPlayer{id:2} prepared duration 0:00:28.024000
I/flutter (29889): [inf] 2019-11-05 11:52:58.311301 [fijk] FijkPlayer{id:2} state changed to FijkState.started <= FijkState.prepared
I/IJKMEDIA(29889): SDL_RunThread: [30228] ff_aout_android
D/IJKMEDIA(29889): avcodec/Audio: first frame decoded
D/IJKMEDIA(29889): FFP_MSG_AUDIO_DECODED_START:
D/IJKMEDIA(29889): FFP_MSG_AUDIO_RENDERING_START:
I/flutter (29889): [inf] 2019-11-05 11:52:58.393197 [fijk] FijkPlayer{id:2} audio rendering started
I/IJKMEDIA(29889): ffp_toggle_buffering: completed: OK
D/IJKMEDIA(29889): ijkmp_get_msg: FFP_MSG_COMPLETED
D/IJKMEDIA(29889): FFP_MSG_COMPLETED:
I/flutter (29889): [inf] 2019-11-05 11:53:26.569471 [fijk] FijkPlayer{id:2} state changed to FijkState.completed <= FijkState.started
I/IJKMEDIA(29889): ffp_toggle_buffering: eof

[BUG]偶现bug,没有画面,日志无报错,对比正常显示的少了一条日志

Describe the bug
页面黑屏,不显示页面,无报错,通过看输出日志,对比正常可以播放的输出日志发现少了一条输出不确定每次都会出现,但是几率在40%,

先看正常的输出
image

正常的话在最后四条输出中会有一个 video rendering stared的输出
不展示画面的日志如下
image

看到少了一个 video rendering stared 的输出。

To Reproduce
不确定哪次会复现,但是几率在30%,
如果退出播放页面,再进入,多试几次就又可以了

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

fijkplayer version
Which version you used.

Smartphone (please complete the following information):

  • Device: iphoneX
  • OS: ios12.4
  • flutter:1.7.8-hotfix4

[BUG] No DMA context bound!

之前一直没出现过这个问题,现在跑起来很大概率出现,出现这个问题之后视频只有声音没有图像,然后就一直循环打印下面这段日志的最后两句:
updateHostColorBuffer: Unexpected DMA,ERROR: No DMA context bound!

D/IJKMEDIA(17044): avcodec/Audio: first frame decoded
D/IJKMEDIA(17044): FFP_MSG_AUDIO_DECODED_START:
E/eglCodecCommon(17044): goldfish_dma_create_region: could not obtain fd to device! fd 0 errno=11
E/gralloc_ranchu(17044): updateHostColorBuffer: Unexpected DMA
E/ (17044): lockAndWriteDma: ERROR: No DMA context bound!
D/IJKMEDIA(17044): FFP_MSG_VIDEO_RENDERING_START:
D/IJKMEDIA(17044): SDL_VoutFFmpeg_CreateOverlay(w=1024, h=576, fmt=RV32(0x32335652, dp=0xc839dca0)
V/DartMessenger(17044): Sending message with callback over channel 'befovy.com/fijkplayer/event/8'
I/tv.danmaku.ijk.media.player.IjkMediaPlayer(17044): Info: MEDIA_INFO_VIDEO_RENDERING_START
I/flutter (17044): [inf] 2019-10-09 14:10:45.800574 [fijk] FijkPlayer{id:8} video rendering started
E/gralloc_ranchu(17044): updateHostColorBuffer: Unexpected DMA
E/ (17044): lockAndWriteDma: ERROR: No DMA context bound!

执行,第一帧解码,视频开始渲染之后
然后一直没有图像出来。就只有声音

Plugin not supported user-agent in some video

I have some link url m3u stream but this links play using user-agent, it's possible add user-agent to play this link.
Please I need this option because I have links url support user-agent

自定义控制器

目前是不是还不支持自定义控制器,哈哈哈,自带的那个实在是不太好看...

[BUG]在mac下调试错误

MacBook-Air:ios$ pod install
Analyzing dependencies
Fetching podspec for Flutter from .symlinks/flutter/ios
Fetching podspec for fijkplayer from .symlinks/plugins/fijkplayer/ios
Downloading dependencies
Installing FIJKPlayer (0.3.5)

一直卡在这里

在iOS上运行不起来

[!] CocoaPods could not find compatible versions for pod "FIJKPlayer":
In Podfile:
fijkplayer (from .symlinks/plugins/fijkplayer/ios) was resolved to 0.1.3, which depends on
FIJKPlayer (~> 0.3.7)

None of your spec sources contain a spec satisfying the dependency: FIJKPlayer (~> 0.3.7).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.