Connection error using FIJK Player to RTSP

461 Views Asked by At

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/[email protected] 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).

0

There are 0 best solutions below