2

I am trying to use IJK Player (for flutter, FIJK player) to play an RTSP stream. However, I keep getting errors. Here's a simple example:

import 'package:fijkplayer/fijkplayer.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final FijkPlayer player = FijkPlayer();

  @override
  void initState() {
    super.initState();
    player.setDataSource('rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4', 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();
  }
}

Here are the logs:

Syncing files to device SM G950F...
D/J4A     (18689): J4ALoader: OK: 'android.os.Build$VERSION' loaded
D/J4A     (18689): J4ALoader: OK: 'android.os.Build' loaded
D/J4A     (18689): J4ALoader: OK: 'java.nio.Buffer' loaded
D/J4A     (18689): J4ALoader: OK: 'java.nio.ByteBuffer' loaded
D/J4A     (18689): J4ALoader: OK: 'java.util.ArrayList' loaded
I/J4A     (18689): API-Level: 28
D/J4A     (18689): J4ALoader: OK: 'android.media.AudioTrack' loaded
D/J4A     (18689): J4ALoader: OK: 'android.media.MediaCodec$BufferInfo' loaded
D/J4A     (18689): J4ALoader: OK: 'android.media.MediaCodec' loaded
D/J4A     (18689): J4ALoader: OK: 'android.media.MediaFormat' loaded
D/J4A     (18689): J4ALoader: OK: 'android.media.PlaybackParams' loaded
D/J4A     (18689): J4ALoader: OK: 'android.os.Bundle' loaded
D/J4A     (18689): J4ALoader: OK: 'tv.danmaku.ijk.media.player.misc.IMediaDataSource' loaded
D/J4A     (18689): J4ALoader: OK: 'tv.danmaku.ijk.media.player.misc.IAndroidIO' loaded
D/J4A     (18689): J4ALoader: OK: 'tv.danmaku.ijk.media.player.misc.MediaCodecSurface' loaded
D/J4A     (18689): J4ALoader: OK: 'tv.danmaku.ijk.media.player.IjkMediaPlayer' loaded
D/IJKMEDIA(18689): ijkmediaplayer version : 
D/IJKMEDIA(18689): IjkMediaPlayer_native_init
D/IJKMEDIA(18689): IjkMediaPlayer_native_setup
I/IJKMEDIA(18689): av_version_info: ff4.0--ijk0.8.8--20211030--926
I/IJKMEDIA(18689): ijk_version_info: 
D/IJKMEDIA(18689): ffpipeline_create_from_android()
D/IJKMEDIA(18689): ijkmp_set_inject_opaque(0x28d6)
D/IJKMEDIA(18689): ijkmp_set_inject_opaque()=void
D/IJKMEDIA(18689): ijkmp_set_ijkio_inject_opaque(0x28d6)
D/IJKMEDIA(18689): ijkmp_set_ijkio_inject_opaque()=void
D/IJKMEDIA(18689): ijkmp_android_set_mediacodec_select_callback()
D/IJKMEDIA(18689): ffpipeline_set_mediacodec_select_callback
D/IJKMEDIA(18689): ijkmp_android_set_mediacodec_select_callback()=void
D/IJKMEDIA(18689): IjkMediaPlayer_setOptionLong
D/IJKMEDIA(18689): IjkMediaPlayer_setOptionLong
D/vndksupport(18689): Loading /vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace.
I/flutter (18689): [inf] 2023-06-12 10:57:56.440863 [fijk] create player id:2
I/flutter (18689): [inf] 2023-06-12 10:57:56.455582 [fijk] FijkPlayer{id:2} invoke setDataSource rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4
D/ViewRootImpl@ac59723[MainActivity](18689): Relayout returned: old=[0,0][1080,2220] new=[0,0][1080,2220] result=0x3 surface={valid=true 546134716416} changed=false
D/IJKMEDIA(18689): IjkMediaPlayer_setDataSourceAndHeaders
V/IJKMEDIA(18689): setDataSource: path rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4
D/IJKMEDIA(18689): ijkmp_set_data_source(url="rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4")
D/IJKMEDIA(18689): ijkmp_set_data_source(url="rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4")=0
I/flutter (18689): [inf] 2023-06-12 10:57:56.489175 [fijk] FijkPlayer{id:2} state changed to FijkState.initialized <= FijkState.idle
I/flutter (18689): [inf] 2023-06-12 10:57:56.500278 [fijk] FijkPlayer{id:2} invoke prepareAsync and start #1
I/flutter (18689): [inf] 2023-06-12 10:57:56.501402 [fijk] FijkPlayer{id:2} setOption k:start-on-prepared, v:1
D/IJKMEDIA(18689): IjkMediaPlayer_setOptionLong
D/IJKMEDIA(18689): IjkMediaPlayer_prepareAsync
D/IJKMEDIA(18689): ijkmp_prepare_async()
W/IJKMEDIA(18689): remove 'timeout' option for rtmp.
I/IJKMEDIA(18689): ===== versions =====
I/IJKMEDIA(18689): ijkplayer    : 
I/IJKMEDIA(18689): SDL_RunThread: [18893] ff_msg_loop
I/IJKMEDIA(18689): FFmpeg       : ff4.0--ijk0.8.8--20211030--926
I/IJKMEDIA(18689): libavutil    : 56.14.100
D/IJKMEDIA(18689): message_loop
I/IJKMEDIA(18689): libavcodec   : 58.18.100
I/IJKMEDIA(18689): libavformat  : 58.12.100
I/IJKMEDIA(18689): libswscale   : 5.1.100
I/IJKMEDIA(18689): libswresample: 3.1.100
I/IJKMEDIA(18689): ===== options =====
I/IJKMEDIA(18689): player-opts : enable-position-notify       = 1
I/IJKMEDIA(18689): player-opts : start-on-prepared            = 1
I/IJKMEDIA(18689): format-opts : ijkapplication               = 546139559776
I/IJKMEDIA(18689): format-opts : ijkiomanager                 = 546134369280
I/IJKMEDIA(18689): ===================
D/IJKMEDIA(18689): FFP_MSG_FLUSH:
I/IJKMEDIA(18689): SDL_RunThread: [18894] ff_vout
D/IJKMEDIA(18689): ijkmp_prepare_async()=0
I/IJKMEDIA(18689): SDL_RunThread: [18895] ff_read
W/IJKMEDIA(18689): remove 'timeout' option for rtmp.
I/flutter (18689): [inf] 2023-06-12 10:57:56.532332 [fijk] FijkPlayer{id:2} state changed to FijkState.asyncPreparing <= FijkState.initialized
I/flutter (18689): [inf] 2023-06-12 10:57:56.533073 [fijk] FijkPlayer{id:2} invoke prepareAsync and start #1 -> done
I/flutter (18689): [inf] 2023-06-12 10:57:56.534148 [fijk] FijkPlayer{id:2} state changed to FijkState.initialized <= FijkState.idle
I/flutter (18689): [inf] 2023-06-12 10:57:56.534974 [fijk] FijkPlayer{id:2} state changed to FijkState.asyncPreparing <= FijkState.initialized
I/IJKMEDIA(18689): cur ipv4 c_ipaddr = 3.87.10.134
E/IJKMEDIA(18689): Connection to tcp://wowzaec2demo.streamlock.net:554?timeout=0 failed: Connection refused
E/IJKMEDIA(18689): rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4: Connection refused
I/IJKMEDIA(18689): SDL_JNI_DetachThreadEnv: [18895]
D/IJKMEDIA(18689): FFP_MSG_ERROR: -111
E/tv.danmaku.ijk.media.player.IjkMediaPlayer(18689): Error (-111,0,Connection refused)
I/flutter (18689): [err] 2023-06-12 10:57:56.749146 [fijk] FijkPlayer{id:2} errorListener: FijkException(-111, Connection refused)
I/flutter (18689): [inf] 2023-06-12 10:57:56.750916 [fijk] FijkPlayer{id:2} state changed to FijkState.error <= FijkState.asyncPreparing
I/flutter (18689): FijkState.error

I can play this RTSP stream easily on VLC (both on mobile and on the Desktop). Am I missing something?

Note: this snippet uses a public available RTSP stream, I've also tried hosting a server on my machine and got the same result (error).

Raphael Sauer
  • 630
  • 1
  • 6
  • 27
  • I can't install fijkview.dart. I am getting the following error ../../.pub-cache/hosted/pub.dev/fijkplayer-0.10.1/lib/core/fijkview.dart:293:24: Error: Member not found: 'SystemChrome.setEnabledSystemUIOverlays'. await SystemChrome.setEnabledSystemUIOverlays([]); It seems fijkview.dart is using an outdated [dependency](https://stackoverflow.com/questions/69326384/setenabledsystemuioverlays-is-deprecated-and-shouldnt-be-used-migrate-to-seten). – Mearaj Jun 14 '23 at 16:52
  • @Mearaj I'm on Flutter 3.3.10, using fijk: ^0.10.1 on the pubspec – Raphael Sauer Jun 14 '23 at 17:08
  • This may be because I am using latest android sdk version. What's the android sdk version you are using?. I tried to lower my android API. Still the same issue. I am using Linux OS(Arch LInux) – Mearaj Jun 14 '23 at 17:10
  • Someone is facing the same [issue](https://github.com/befovy/fijkplayer/issues/574) – Mearaj Jun 14 '23 at 17:17
  • @Mearaj from flutter doctor: [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0) – Raphael Sauer Jun 14 '23 at 17:22
  • I am using the same. I think it's related to this [bug](https://github.com/befovy/fijkplayer/issues/574). Perhaps you are using Mac or Windows and this issue exists on only Linux? – Mearaj Jun 14 '23 at 17:34
  • @Mearaj I am on Ubuntu 22.04.2 LTS, I will try to run it on my other machine that uses a different distro – Raphael Sauer Jun 14 '23 at 17:41
  • Thanks a lot @Raphael Sauer. – Mearaj Jun 14 '23 at 17:57
  • Hi @[Raphael Sauer](https://stackoverflow.com/users/6419736/raphael-sauer), I tested it. It's working on real device(android) but not on emulator. I had to port forward with port 554.(on router) I also had to add my public IP in /etc/hosts file. Added internet permission in android's manifest file. It's working on real devices but not on emulators. Thanks :) – Mearaj Jun 15 '23 at 00:13
  • Hey @Mearaj! Sorry for the late reply. Glad you could run it on your end. I've successfully built the app on Fedora 38. If I can be of assistance just ask. – Raphael Sauer Jun 15 '23 at 16:54
  • Yeah sure. Thanks a lot :) – Mearaj Jun 15 '23 at 17:00

0 Answers0