Giter Site home page Giter Site logo

proxylive's Introduction

proxylive

This application allow you to transcode and broadcast on demand a http mpeg ts to transcoded mpegts/hls

Features

  • broadcasting: Multiple users conected to same channel only consume a single connection to your backend.
  • transcode on demand: you can define transcode profiles(ffmpeg) that allow you to convert the format to whatever you want. (HLS & mpegTS containers)
  • M3u Playlist: proxylive generate on real time m3u playlist
  • Authentication: Plex Auth and LDAP Auth, Only accept users you want.
  • Multiple sources per channel: If a source goes down automatically get another source without close user connection or stop transcoding.
  • EPG Support

Types of channels sources:

  • Tvheadend: Will load all the channels from tvheadend
  • Custom JSON: You will need to define a Json with all the channel info

Tvheadend Channel Sources:

application.yaml

source:
    tvheadendURL: http://user:[email protected]:9981
    channels:
        type: tvheadend
        refresh: 60 #In seconds

Custom JSON Channel Source

Custom JSON can be read from:

  • File/URL: every X seconds the file will be readed

application.yaml

source:
    channels:
        type: json
        refresh: 60 #In seconds
        url: file:///my/disk/channels.json or  http://my.server.com/channels.json
  • Git: Channel and picons will be readed from a Git repository, only refreshed if commits detected.

application.yaml

source:
    channels:
        git:
            repository: https://github.com/user/repo.git
            #optional
            user: youruser
            #optional
            pass: yourpass 
            branch: master
        type: json
        refresh: 60 #In seconds

channels.json

[ 
    {
      "number" : 1,
      "name" : "La 1 HD",
      "id" : "la1hd",
      "epgID" : "La 1 HD",
      "logoFile":"/picons/la1hd.png",
      "logoURL": "http://server.com/logo.png",
      "categories" : [ "Generales", "TDT" ],
      "ffmpegParameters": "extra ffmpeg parameters only for this channel, this is optional, usable for MTPS extracting",
      "sources" : [ 
          {
            "url" : "http://your/server/stream",
            "priority" : 1,
            "type" : "ffmpeg" <- This is used to force ffmpeg usage when raw profile (usefull for MTPS)
          },
          {
            "url" : "udp://225.225.201.1:8008",
            "closeHook": "http://myServer/hook?myChannel={{channel}}&date={{now}}",
            "priority" : 2
          },
          {
            "url" : "rtp://200.100.1500:1001",
            "priority" : 3
          },
          {
            "url" : "hlss://my.server/my/stream.m3u8", <- hls or hlss(TLS)            
            "closeHook": "pipe://echo \"Closed channel {{channel}} when {{now}}\" > example.txt",
            "priority" : 4,
          },
          {
            "url" : "dashs://my.server/my/stream.m3u8",  <- dash or dashs(TLS)
            "priority" : 5
          },
          {
            "url" : "rtmp://my.server/rtmp/live",
            "priority" : 6
          },
          {
            "url" : "pipe://raspivid -o - -t 0 -fps 25 -g 50 -rot 180 -n -a 12 -b 6000000", <- process the inputstream of a process
            "priority" : 7
          }    
      ]
      
    }
]

Picons can be readed from URL or File (logoFile or logoURL), logoURL will be cached on proxylive, so clients will request picons to proxylive instead of directly to the defined URL. In case of use git backend, picons will be expected to be in the root of the git repository.

Configuration

You need to write application.yml file in the same directory where jar is running (In case of docker on /app/application.yaml)

application.yaml

source:
    #My Tvheadend source instance
            
    #In case of source connection problem, retry connection in 10 seconds
    reconnectTimeout: 10
    ##This is optional, only used if tvheadend channel backend
    tvheadendURL: http://tvheadend:9981
    epg:
        url: http://tvheadend:9981/xmltv/channels
        refresh: 600 #10 minutes
    channels:
        #Check (types of channels sources) for more information of this section
#UserAgent String used to connect backend http(s) type
userAgent: "Proxylive"
streamTimeout: 60
#Client Stream timeout, if no bytes from backend on this timeout range, the client connection will be closed
#Pros:
#-Single connection to tvheadend per channel
#-when 2 clients with HLS and mpegTS with the same transcoding profile only transcoded one time.(so less cpu usage)
#Cons:
#-Slower start when the channel is not yet initialized on HLS/or mpegTs with transcoding.
ffmpeg:
    #Path where proxylive can find ffmpeg binary
    path: '/usr/bin/ffmpeg'
    
    ##Profiles definition alias param is used in the view link, see (Url Definition) for more details of use profiles
    profiles:
        -
            alias: "aac"
            #transcoder:
              #if defined all the transcoding operations will be handled by this remote proxylive server
              #in this case is mandatory  define the same authentication.secret on both servers.
              #endpoint: http://myremoteproxylive.com
              #if defined will be use this profile on the remote server, if not the alias value.              
              #profile: myremoteprofile
            #FFmpeg parameters, check ffmpeg documentation for more info
            parameters: "-i {input} {channelParameters} -sn -ac 2 -c:a aac -b:a 320k -c:v copy"
        -
            alias: "240p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 64k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 300k  -preset veryslow -vf scale=-1:244,yadif=0"
        -
            alias: "360p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 96k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 700k  -preset veryslow -vf scale=-1:360,yadif=0"
        -
            alias: "480p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 196k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 1500k  -preset slow -vf scale=-1:484,yadif=0"
        -
            alias: "720p"
            parameters: "-i {input} {channelParameters} -sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 3000k  -preset fast -vf scale=-1:720,yadif=0"
        -
            alias: "1080p"
            parameters:  "-i {input} {channelParameters} -sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 300 -vprofile high -level 4.0 -movflags +faststart -bufsize 15000k -maxrate 5000k  -preset faster -vf yadif=0"
    mpegTS:
        parameters: "-threads 0 -f mpegts -mpegts_m2ts_mode 1 -mpegts_copyts 1 -mpegts_flags +resend_headers  "
		#Specific parameters for mpegTS(only works if a diferent profile than raw is selected, raw send direct data from backend so no transcoded, in this case not applied this parameter.
    hls:
        #by default HLS is disabled 
        enabled: false
        tempPath: "/tmp"
		#Path where HLS will save segment files and playlist
        parameters: "-flags -global_header  -avoid_negative_ts disabled -map_metadata -1 -start_at_zero -copyts -flags -global_header -vsync cfr -y -nostats -f hls  -hls_time 2 -hls_list_size 10 -hls_wrap 20 -hls_allow_cache 0  -hls_flags +append_list -hls_flags +discont_start -hls_flags +delete_segments"
		#FFmpeg parameters specific for HLS
        timeout: 30
		#When user disconnect from stream, we doesnt have any way to be sure the user is totally disconnected so this parameter control how many seconds since last download of a segment of a concret stream, if the timeout is reached, the timeout is canceled.

buffers:
    #The max amount of bytes the application can read from a stream, default 1MB in a single action
    chunkSize: 1048576
    #Buffer size of the broadcast buffer,larger buffer more stable but larger delay than source stream, default 50MB
    broadcastBufferSize: 52428800
    
    
### Authentication

You can use plex authentication ldap or without(default) adding this in the application.yaml all your plex friends that have the option "allow channels" will have access to stream from proxylive

authentication:
    secret: xxxxxxxxx # 512 bits Secret, if not defined will generated randomly per each start
    # recomended use persistent secret or tokens will be invalid in case of restart
    expireInHours: 48 # JWT expire time in hours
    #For plex auth
    plex:
        #every refresh time in seconds we will fetch users that are allowed to login
        refresh:  10800
        adminUser: "plexOwnerUser"
        adminPass: "plexOwnerPass"
        serverName: "MyPlexServerName"

    #For LDAP auth (not implemented yet)
    ldap:
        server: "ldap://server:389"
        username: "user"
        pass: "pass"
        searchBase: "dc=ad,dc=my-domain,dc=com"

Client users will connect attaching to the URL ?user=user&pass=pass or ?token=xxx

http://localhost:8080/channel/list/mpeg/1080p?user=myplexuser&pass=myplexpass

In case of using token can be recovered via

TOKEN=$(curl --location --request POST 'localhost:8080/login' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'username=xxxxxxx' \
--data-urlencode 'password=xxxxxx')

Url Definition

you could get a broadcasted stream from http://{server}:8080/view/{profile}/{channelID}

get the playlist

http://[server]:8080/channel/list/[format]/[profile]

in case of auth enabled

http://[server]:8080/channel/list/[format]/[profile]?token=xxx

get EPG

http://[server]:8080/epg

server

ip or domain of the host where the application is running

profile

This is the defined profile in the yaml configuration, is a alias of a ffmpeg video encoding configuration. By default we have 1080p, 720p, raw, aac profiles, you can add or modify as your needs.

id

Source Stream identification. This ID is used to identify channels, in case you use tvheadend backend then channelID is equal to streamID for example in tvheadend http://tvheadend:9981/stream/channel/{id}

format

The format the server will stream the live streaming.

  • mpeg: mpegts stream
  • hls: hls stream

if you don't know what to choose, use mpeg

Requirements

  • jre8 or docker > 1.9
  • Http Live Streaming Source
  • ffmpeg installed

Build

to build you need JDK > 1.9 and maven 3.5.2 installed.

then...

git clone https://github.com/segator/proxylive
cd proxylive
mvn clean install
#you will have a file called dist/proxylive.jar

Run in docker

docker run --name=proxylive -p 8080:8080 --restart=always -d -v /my/application.yml:/app/application.yml:ro segator/proxylive

Run on any OS

to run first you need to have at least java jre 1.9 installed.

##Remember to have the application.yml in the working directory before run the app
java -jar proxylive.jar

RoadMap

  • Multiple Source Input(Failover sources)
  • TVHeadend Backend as source
  • Custom Backends as source
  • QSV/VAAPI Support (Hardware transcoding)
  • NVENC Support (Hardware Nvidia Transcoding)
  • Prometheus Support
  • Fluend support
  • UDP Input
  • RTMP Input
  • RTSP Input
  • HLS Input
  • DASH Input
  • RTMP Output
  • UDP Output
  • Dash Output
  • HLS Output
  • MPEG-TS Output
  • Reconnect Source/transcoder on failure without disconnect clients,
  • Plex Authentication
  • LDAP Authentication
  • Playlist Generator
  • EPG extractor
  • Refactor(This application is a Prove of concept, the code is not clean enough and aren't tested to use in a production environment

proxylive's People

Contributors

dbiesecke avatar iaymerich avatar segator 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

proxylive's Issues

Channel refresh only works when the EPG is updated

In the latest Docker version (sha-650c4fe) (possibly even earlier) the refresh of channels only works when the EPG is updated, i.e. if the refresh is set to 600 seconds (= 10 minutes), no matter what you define as channels.refresh, it will only be updated when the EPG is updated.

iptv-proxylive-app  | 2024-03-18T21:02:38,370 INFO  [scheduling-1] c.g.s.p.s.EPGService: Refreshing EPG
iptv-proxylive-app  | 2024-03-18T21:02:38,642 INFO  [scheduling-1] c.g.s.p.s.ChannelURLService: Channels loaded

How can I use vaapi?

Hey segator!
Thank you for the very nice tool. I'm really enjoying it.
Unfortunately, I have not yet been able to benefit from the vaapi hardware acceleration

I'm streaming a bunch of satelite channels from TVHeadend at a remote location and need to shrink the video streams. My targeted output format would be HEVC (hls). I successfully created a h.265 ffmpeg profile but the CPU load is excessively high and the streams are stuttering. Hardware acceleration is essential for me.

I would really appreciate it if you or someone else could help me with this.

I'm working with the docker image and passed through my Intel GPU with the following command:

docker run -d --restart=on-failure --name=proxylive -p 8080:8080 -v /proxylive/application.yml:/app/application.yml:ro --device=/dev/dri:/dev/dri segator/proxylive:sha-650c4fe

Render device is available inside the docker container:

**ls -l /dev/dri**
`root@ccf3f06c261a:/app# ls -l /dev/dri
total 0
crw-rw---- 1 root video 226,   0 Sep 13 13:19 card0
crw-rw---- 1 root video 226,   1 Sep 13 13:19 card1
crw-rw---- 1 root   105 226, 128 Sep 13 13:19 renderD128`

Hardware acceleration is available to ffmpeg inside the docker container:

root@ccf3f06c261a:/app# ffmpeg -hwaccels
ffmpeg version 4.3.4 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
  configuration: --disable-debug --disable-doc --disable-ffplay --enable-avresample --enable-fontconfig --enable-gpl --enable-libaom --enable-libaribb24 --enable-libass --enable-libbluray --enable-libfdk_aac --enable-libfreetype --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libsrt --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-libzmq --enable-nonfree --enable-openssl --enable-postproc --enable-shared --enable-small --enable-vaapi --enable-version3 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib --extra-libs=-ldl --extra-libs=-lpthread --prefix=/opt/ffmpeg
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Hardware acceleration methods:
vaapi

I assume I need to adjust the ffmpeg parameters to use vaapi?

This is my application.yml with hevc720p profile:

source:
    tvheadendURL: "http://xxxxx:[email protected]:9981"
    channels:
        type: tvheadend
        refresh: 60 #In seconds

ffmpeg:
    #Path where proxylive can find ffmpeg binary
    path: '/usr/local/bin/ffmpeg'

    ##Profiles definition alias param is used in the view link, see (Url Definition) for more details of use profiles
    profiles:
        -   alias: "aac"
            #FFmpeg parameters, check ffmpeg documentation for more info
            parameters: "-i {input} {channelParameters} -sn -ac 2 -c:a aac -b:a 320k -c:v copy"
        -   alias: "240p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 64k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 300k  -preset veryslow -vf scale=-1:244,yadif=0"
        -   alias: "360p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 96k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 700k  -preset veryslow -vf scale=-1:360,yadif=0"
        -   alias: "480p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 196k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 1500k  -preset slow -vf scale=-1:484,yadif=0"
        -   alias: "720p"
            parameters: "-i {input} {channelParameters} -hide_banner -loglevel warning -map 0:v:0 -map 0:a:0 -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:v hevc -profile:v main -b:v 2800k -maxrate 2996k -bufsize 4200k -crf 20 -sc_threshold 0 -g 48 -keyint_min 48"
        -   alias: "1080p"
            parameters:  "-i {input} {channelParameters} -sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 300 -vprofile high -level 4.0 -movflags +faststart -bufsize 15000k -maxrate 5000k  -preset faster -vf yadif=0"
        -   alias: "hevc720p"
            parameters: "-i {input} {channelParameters} -hide_banner -loglevel warning -map 0:v:0 -map 0:a:0 -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:v hevc -crf 20 -sc_threshold 0 -g 48 -keyint_min 4 -b:v 2800k -maxrate 2996k -bufsize 4200k -profile:v main"
    mpegTS:
        parameters: "-threads 0 -f mpegts -mpegts_m2ts_mode -1 -mpegts_copyts 1 -mpegts_flags +resend_headers  "
#Specific parameters for mpegTS(only works if a diferent profile than raw is selected, raw send direct data from backend so no transcoded, in this case not applied this parameter.
#Had to adjust mpegts_m2ts_mode -1 - otherwise no sound in output stream
    hls:
        #by default HLS is disabled
        enabled: true
        tempPath: "/tmp"
#Path where HLS will save segment files and playlist
        parameters: "-flags -global_header  -avoid_negative_ts disabled -map_metadata -1 -start_at_zero -copyts -flags -global_header -vsync cfr -y -nostats -f hls  -hls_time 2 -hls_list_size 10 -hls_wrap 20 -hls_allow_cache 0  -hls_flags +append_list -hls_flags +discont_start -hls_flags +delete_segments"
#FFmpeg parameters specific for HLS
        timeout: 30


buffers:
    #The max amount of bytes the application can read from a stream, default 1MB in a single action
    chunkSize: 1048576
    #Buffer size of the broadcast buffer,larger buffer more stable but larger delay than source stream, default 50MB
    broadcastBufferSize: 52428800

Docker: Application failed to start

Hello I'm trying to get proxylive running with docker on my openmediavault nas system.
The Log gives me the following Error:

Description:

Binding to target com.github.segator.proxylive.config.ProxyLiveConfiguration$$EnhancerBySpringCGLIB$$999d712c@13e39c73 failed:

Property: target.source.channels
Value:
Reason: Failed to convert property value of type 'java.lang.String' to required type 'com.github.segator.proxylive.config.ChannelsConfiguration' for property 'source.channels'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.github.segator.proxylive.config.ChannelsConfiguration' for property 'channels': no matching editors or conversion strategy found

Action:

Update your application's configuration

My application.yml looks like this:

`
source:
#My Tvheadend source instance

#In case of source connection problem, retry connection in 10 seconds
reconnectTimeout: 10
##This is optional, only used if tvheadend channel backend
tvheadendURL: http://user:pass@ip:9981/tvheadend
epg:
    url: http://user:pass@ip:9981/tvheadend/xmltv/channels
    refresh: 600 #10 minutes
channels:

type: tvheadend
refresh: 60
#Check (types of channels sources) for more information of this section

streamTimeout: 60
#Client Stream timeout, if no bytes from backend on this timeout range, the client connection will be closed
#Pros:
#-Single connection to tvheadend per channel
#-when 2 clients with HLS and mpegTS with the same transcoding profile only transcoded one time.(so less cpu usage)
#Cons:
#-Slower start when the channel is not yet initialized on HLS/or mpegTs with transcoding.
ffmpeg:
#Path where proxylive can find ffmpeg binary
path: '/usr/bin/ffmpeg'

##Profiles definition alias param is used in the view link, see (Url Definition) for more details of use profiles
profiles:
    -
        alias: "aac"
        #FFmpeg parameters, check ffmpeg documentation for more info
        parameters: "-sn -ac 2 -c:a aac -b:a 320k -c:v copy"
    -
        alias: "240p"
        parameters: "-sn -c:a:0 aac -ac 2 -b:a 64k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 300k  -preset veryslow -vf scale=-1:244,yadif=0"
    -
        alias: "360p"
        parameters: "-sn -c:a:0 aac -ac 2 -b:a 96k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 700k  -preset veryslow -vf scale=-1:360,yadif=0"
    -
        alias: "480p"
        parameters: "-sn -c:a:0 aac -ac 2 -b:a 196k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 1500k  -preset slow -vf scale=-1:484,yadif=0"
    -
        alias: "720p"
        parameters: "-sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 3000k  -preset fast -vf scale=-1:720,yadif=0"
    -
        alias: "1080p"
        parameters:  "-sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 300 -vprofile high -level 4.0 -movflags +faststart -bufsize 15000k -maxrate 5000k  -preset faster -vf yadif=0"
mpegTS:
    parameters: "-threads 0 -f mpegts -mpegts_m2ts_mode 1 -mpegts_copyts 1 -mpegts_flags +resend_headers  "
    #Specific parameters for mpegTS(only works if a diferent profile than raw is selected, raw send direct data from backend so no transcoded, in this case not applied this parameter.
hls:
    #by default HLS is disabled 
    enabled: false
    tempPath: "/tmp"
    #Path where HLS will save segment files and playlist
    parameters: "-flags -global_header  -avoid_negative_ts disabled -map_metadata -1 -start_at_zero -copyts -flags -global_header -vsync cfr -y -nostats -f hls  -hls_time 2 -hls_list_size 10 -hls_wrap 20 -hls_allow_cache 0  -hls_flags +append_list -hls_flags +discont_start -hls_flags +delete_segments"
    #FFmpeg parameters specific for HLS
    timeout: 30
    #When user disconnect from stream, we doesnt have any way to be sure the user is totally disconnected so this parameter control how many seconds since last download of a segment of a concret stream, if the timeout is reached, the timeout is canceled.

buffers:
#The max amount of bytes the application can read from a stream, default 1MB in a single action
chunkSize: 1048576
#Buffer size of the broadcast buffer,larger buffer more stable but larger delay than source stream, default 50MB
broadcastBufferSize: 52428800

Authentication`

I hope you can help me fix this problem. Thanks in advance.

proxylive.jar failure

Hey segator
I wanted to try your proxy live tool, used the docker repository - but the program doesn't start.
Could you please help?

Thank you very much!
ericdx

`root@77a0de0ca02a:/app# java -jar proxyLive.jar
( ( ) ) ) ( (
)\ ) )\ ) ( /( ( /( ( /( )\ ) )\ )
(()/( (()/( )()) )()) )()) (()/( (()/( ( ( (
___ ___ /()) /()) (()\ (()\ (()\ /()) /()) )\ )\ )\ ___ ___
|
| || ()) ()) (() (() __ (() ()) ()) (()(() (() || ||
| _ \ | _ \ / _ \ \ / / \ \ / / | | |
| \ \ / / | |
| / | / | () | > < \ V / | |
| | \ V / | |
|
| |
|
\ _
/ //_\ || || || _/ |_|

        (         )              (                         (                     (
   (    )\ )   ( /(      (       )\ )      (       (       )\ )    *   )         )\ )
 ( )\  (()/(   )\())     )\     (()/(      )\      )\     (()/(  ` )  /(   (    (()/(
 )((_)  /(_)) ((_)\   ((((_)(    /(_))   (((_)  ((((_)(    /(_))  ( )(_))  )\    /(_))
((_)_  (_))     ((_)   )\ _ )\  (_))_    )\___   )\ _ )\  (_))   (_(_())  ((_)  (_))
 | _ ) | _ \   / _ \   (_)_\(_)  |   \  ((/ __|  (_)_\(_) / __|  |_   _|  | __| | _ \
 | _ \ |   /  | (_) |   / _ \    | |) |  | (__    / _ \   \__ \    | |    | _|  |   /
 |___/ |_|_\   \___/   /_/ \_\   |___/    \___|  /_/ \_\  |___/    |_|    |___| |_|_\

2023-09-12T14:51:58,978 INFO [main] o.s.b.StartupInfoLogger: Starting Application v1.0-SNAPSHOT using Java 14.0.2 on 77a0de0ca02a with PID 10 (/app/proxyLive.jar started by root in /app)
2023-09-12T14:51:58,981 DEBUG [main] o.s.b.StartupInfoLogger: Running with Spring Boot v2.6.1, Spring v5.3.13
2023-09-12T14:51:58,981 INFO [main] o.s.b.SpringApplication: No active profile set, falling back to default profiles: default
2023-09-12T14:52:00,615 INFO [main] o.s.b.w.e.t.TomcatWebServer: Tomcat initialized with port(s): 8080 (http)
2023-09-12T14:52:00,628 INFO [main] o.a.j.l.DirectJDKLog: Initializing ProtocolHandler ["http-nio-8080"]
2023-09-12T14:52:00,628 INFO [main] o.a.j.l.DirectJDKLog: Starting service [Tomcat]
2023-09-12T14:52:00,629 INFO [main] o.a.j.l.DirectJDKLog: Starting Servlet engine: [Apache Tomcat/9.0.55]
2023-09-12T14:52:00,687 INFO [main] o.a.j.l.DirectJDKLog: Initializing Spring embedded WebApplicationContext
2023-09-12T14:52:00,688 INFO [main] o.s.b.w.s.c.ServletWebServerApplicationContext: Root WebApplicationContext: initialization completed in 1629 ms
2023-09-12T14:52:00,968 DEBUG [main] o.s.w.f.GenericFilterBean: Filter 'JWTBasicFilter' configured for use
2023-09-12T14:52:01,066 WARN [main] o.s.c.s.AbstractApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'frontendController' defined in URL [jar:file:/app/proxyLive.jar!/BOOT-INF/classes!/com/github/segator/proxylive/controller/FrontendController.class]: Unsatisfied dependency expressed through constructor parameter 3; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
2023-09-12T14:52:01,071 INFO [main] o.a.j.l.DirectJDKLog: Stopping service [Tomcat]
2023-09-12T14:52:01,088 INFO [main] o.s.b.a.l.ConditionEvaluationReportLoggingListener:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-09-12T14:52:01,110 ERROR [main] o.s.b.SpringApplication: Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'frontendController' defined in URL [jar:file:/app/proxyLive.jar!/BOOT-INF/classes!/com/github/segator/proxylive/controller/FrontendController.class]: Unsatisfied dependency expressed through constructor parameter 3; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)
at com.github.segator.proxylive.Application.main(Application.java:38)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
... 27 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
... 41 common frames omitted
Caused by: java.lang.NullPointerException: null
at com.github.segator.proxylive.service.ChannelServiceFactory.createChannelService(ChannelServiceFactory.java:18)
at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$c7ea70df.CGLIB$createChannelService$0()
at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$c7ea70df$$FastClassBySpringCGLIB$$317817da.invoke()
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$c7ea70df.createChannelService()
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 42 common frames omitted`

Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService';

Sorry Guys, I am getting this error, could you please help:

WARN [main] org.springframework.context.support.AbstractApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException

after that the error continued...
ERROR [main] org.springframework.boot.SpringApplication: Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:882) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) at com.github.segator.proxylive.Application.main(Application.java:38) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:484) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1290) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1210) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ... 27 common frames omitted Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ... 40 common frames omitted Caused by: java.lang.NullPointerException: null at com.github.segator.proxylive.service.ChannelServiceFactory.createChannelService(ChannelServiceFactory.java:15) at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$db149b83.CGLIB$createChannelService$0(<generated>) at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$db149b83$$FastClassBySpringCGLIB$$20d0b594.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$db149b83.createChannelService(<generated>) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ... 41 common frames omitted

here is the config (application.yml):

`spring.jackson.serialization.INDENT_OUTPUT: true
management:
server:
port: 8090
endpoints:
prometheus:
enabled: true
metrics:
enabled: true
web:
exposure:
include: "*"
metrics:
export:
prometheus:
enabled: true
security:
enabled: false
geoIP:
enabled: false
url: https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
source:
reconnectTimeout: 10
tvheadendURL: http://root:password@IP:9981
epg:
url: http://root:password@IP:9981/xmltv/channels
refresh: 600 #10 minutes
channels:
type: tvheadend
refresh: 60 #In seconds
streamTimeout: 60
ffmpeg:
path: '/usr/bin/ffmpeg'
profiles:
-
alias: "aac"
parameters: "-sn -ac 2 -c:a aac -b:a 320k -c:v copy"

        alias: "240p"
        parameters: "-sn -c:a:0 aac -ac 2 -b:a 64k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 300k  -preset veryslow -vf scale=-1:244,yadif=0"
    -
        alias: "360p"
        parameters: "-sn -c:a:0 aac -ac 2 -b:a 96k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 700k  -preset veryslow -vf scale=-1:360,yadif=0"
    -
        alias: "480p"
        parameters: "-sn -c:a:0 aac -ac 2 -b:a 196k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 1500k  -preset slow -vf scale=-1:484,yadif=0"
    -
        alias: "720p"
        parameters: "-sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 3000k  -preset fast -vf scale=-1:720,yadif=0"
    -
        alias: "1080p"
        parameters:  "-sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 300 -vprofile high -level 4.0 -movflags +faststart -bufsize 15000k -maxrate 5000k  -preset faster -vf yadif=0"
mpegTS:
    parameters: "-threads 0 -f mpegts -mpegts_m2ts_mode 1 -mpegts_copyts 1 -mpegts_flags +resend_headers  "
hls:
    enabled: false
    tempPath: "/tmp"
    parameters: "-flags -global_header  -avoid_negative_ts disabled -map_metadata -1 -start_at_zero -copyts -flags -global_header -vsync cfr -y -nostats -f hls  -hls_time 2 -hls_list_size 10 -hls_wrap 20 -hls_allow_cache 0  -hls_flags +append_list -hls_flags +discont_start -hls_flags +delete_segments"
    timeout: 30

buffers:
chunkSize: 1048576
broadcastBufferSize: 52428800
`

System is:
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
Linux stream 4.19.0-8-amd64
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Debian-1deb10u1, mixed mode, sharing)

Error on open stream:api/channel/grid?start=0&limit=5000

Hi,

With latest docker image, I've got problems setting up tvheadend. Looks like the url in not reported building the channel list:

ERROR [main] org.springframework.boot.SpringApplication: Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService': Invocation of init method failed; nested exception is java.io.IOException: Error on open stream:api/channel/grid?start=0&limit=5000

Configuration:

source:
    tvheadendURL: http://user:[email protected]:9981
    channels:
        type: tvheadend
        refresh: 60
    reconnectTimeout: 3 
streamTimeout: 30
ffmpeg:
    path: ffmpeg
    profiles:
        -
            alias: "aac"
            #FFmpeg parameters, check ffmpeg documentation for more info
            parameters: "-i {input} {channelParameters} -sn -ac 2 -c:a libfdk_aac -b:a:0 128k  -b:a:1 96k  -b:a:2 128k -c:v copy -c:s copy"
        -
            alias: "copy"
            parameters: "-i {input} {channelParameters} -sn -c:a copy -c:v copy -c:s copy"
    mpegTS:
        parameters: "-threads 0 -f mpegts -mpegts_m2ts_mode 1 -mpegts_copyts 1 -mpegts_flags +resend_headers  -nostats -hide_banner"
    hls:
        tempPath: "/tmp"
        parameters: "-flags -global_header  -avoid_negative_ts disabled -map_metadata -1 -start_at_zero -copyts -flags -global_header -vsync cfr -y -nostats -hide_banner -f hls  -hls_time 2 -hls_list_size 10  -hls_flags delete_segments  -hls_flags +append_list -hls_flags +discont_start -hls_flags +delete_segments"
        timeout: 30

buffers:
    chunkSize: 131072
    broadcastBufferSize: 52428800

restarting after some seconds

Dear all,

I'm a little bit lost.
I spend inbetween almost one day to put this promising application into operation. But still wihout any success.
I tried it with docker as well with bare metal debian10/11 setups. It is always throwing expceptions in startup and restarting.
Reading the issues I conclude that application.yaml is a cruical topic.
So, could some body provide me a simple expample file that is definitly working?

Many thanks in advance, O.

Error on transcoding

sorry, it's me again, after server starts without any issus (see issue #13) using link faced issue below, could you please help again

http://IP:8080/view/480p/9f3aaf85a39f3b5441e7e8ff537832ca/playlist.m3u8?user=null&pass=null
'
------------------------------error begin-----------------------------------
ERROR [9f3aaf85a39f3b5441e7e8ff537832ca_480p] com.github.segator.proxylive.tasks.DirectTranscodeTask: Error on transcoding 9f3aaf85a39f3b5441e7e8ff537832ca_480p
java.io.IOException: Process is not running
at com.github.segator.proxylive.tasks.DirectTranscodeTask.isRunning(DirectTranscodeTask.java:228)
at com.github.segator.proxylive.tasks.DirectTranscodeTask.run(DirectTranscodeTask.java:146)
at java.base/java.lang.Thread.run(Thread.java:834)

-----------------------------------error end----------------------------------------------------------------
'
system is:
ffmpeg version 4.1.4-1deb10u1 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --prefix=/usr --extra-version='1
deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100

FFMPEG arguments are added by default

During testing, it seems like even if in application.yml:

    profiles:
        -
            alias: "h264"
            parameters: "-i {input} {channelParameters}"
    hls:
        tempPath: "/tmp"
        parameters: ""
        timeout: 30

as well as in channels.json:

      "ffmpegParameters": "",

are left completely empty, some ffmpeg switches are still added by default:

[test_h264] Start Transcode
Transcoding Commandffmpeg -i http://localhost:8080/view/raw/test?user=internal&token=DH3FM5MH2L62DMHTZVSJQ6FE9X80HPZRILT5MXD8  -threads 0 -f mpegts -mpegts_m2ts_mode 1 -mpegts_copyts 1 -mpegts_flags +resend_headers   -

Is it possible to completely control ffmpeg arguments, meaning exclude these default ones, and only add whatever was defined?
Thank you for any input.

Error creating bean with name 'streamController': Unsatisfied dependency expressed through field - Ubuntu 18.04

Hi,

I'm just started to use proxylive but couldn't able run the application, while running I'm getting the following error.
Where did I go wrong?

OS info:

Ubuntu 18.04.5 LTS Codename: bionic

JDK info:

openjdk version "11.0.8" 2020-07-14 OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1) OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)

Maven version:

Apache Maven 3.6.0 Maven home: /usr/share/maven Java version: 11.0.8, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64 Default locale: en, platform encoding: UTF-8 OS name: "linux", version: "5.4.0-1024-gcp", arch: "amd64", family: "unix"

Here is my configuration file application.yml under target directory.

    server:
        port: 8090
    endpoints:
        prometheus:
            enabled: true
        metrics:
            enabled: true
        web:
            exposure:
                include: "*"
    metrics:
        export:
            prometheus:
                enabled: true
    security:
        enabled: false

geoIP:
    enabled: false
    url: https://download.maxmind.com/app/geoip_download_by_token?edition_id=GeoLite2-City&date=20200915&suffix=tar.gz&token=some_token_goes_here
source:
    tvheadendURL: http://username:[email protected]:9981
    epg:
        refresh: 600
    channels:
        refresh: 60
    reconnectTimeout: 15
streamTimeout: 30

Here is my complete debug

Z2020-09-18 13:46:45,743 INFO  [main] org.springframework.boot.StartupInfoLogger: Starting Application v1.0-SNAPSHOT on fitv with PID 29619 (/home/matcha_anu/proxylive/target/ProxyLive.jar started by root in /home/matcha_anu/proxylive/target)
2020-09-18 13:46:45,747 DEBUG [main] org.springframework.boot.StartupInfoLogger: Running with Spring Boot v2.1.3.RELEASE, Spring v5.1.5.RELEASE
2020-09-18 13:46:45,750 INFO  [main] org.springframework.boot.SpringApplication: No active profile set, falling back to default profiles: default
2020-09-18 13:46:47,724 INFO  [main] org.springframework.boot.web.embedded.tomcat.TomcatWebServer: Tomcat initialized with port(s): 8080 (http)
2020-09-18 13:46:47,749 INFO  [main] org.apache.juli.logging.DirectJDKLog: Initializing ProtocolHandler ["http-nio-8080"]
2020-09-18 13:46:47,770 INFO  [main] org.apache.juli.logging.DirectJDKLog: Starting service [Tomcat]
2020-09-18 13:46:47,770 INFO  [main] org.apache.juli.logging.DirectJDKLog: Starting Servlet engine: [Apache Tomcat/9.0.16]
2020-09-18 13:46:47,785 INFO  [main] org.apache.juli.logging.DirectJDKLog: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib]
2020-09-18 13:46:47,927 INFO  [main] org.apache.juli.logging.DirectJDKLog: Initializing Spring embedded WebApplicationContext
2020-09-18 13:46:47,927 INFO  [main] org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext: Root WebApplicationContext: initialization completed in 2112 ms
2020-09-18 13:46:48,079 INFO  [main] com.github.segator.proxylive.config.ProxyLiveConfiguration: Your internal token is:OB7YENDEO6TTF8IYSAVBJGX1T8DEC0SQM4P7JYIS
2020-09-18 13:46:48,285 WARN  [main] org.springframework.context.support.AbstractApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
2020-09-18 13:46:48,289 INFO  [main] org.apache.juli.logging.DirectJDKLog: Stopping service [Tomcat]
2020-09-18 13:46:48,312 INFO  [main] org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-09-18 13:46:48,316 ERROR [main] org.springframework.boot.SpringApplication: Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596)
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1395)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:849)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
        at com.github.segator.proxylive.Application.main(Application.java:38)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:456)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1305)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1144)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1247)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1167)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
        ... 27 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
        ... 40 common frames omitted
Caused by: java.lang.NullPointerException: null
        at com.github.segator.proxylive.service.ChannelServiceFactory.createChannelService(ChannelServiceFactory.java:15)
        at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$b2c95122.CGLIB$createChannelService$0(<generated>)
        at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$b2c95122$$FastClassBySpringCGLIB$$bb797a11.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
        at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$b2c95122.createChannelService(<generated>)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 41 common frames omitted

Input MPEG TS Multicast - Questions

Hi how are you? this is not a issue is more like a questions about the app works.
I have 100 channels in multicast from satellite receptor, now i have this channels over a 2 Wowza Servers, but need transcoding first and later the transcode put on Wowza to make the streaming online.

This is possible with this app?ยฟ what is the hardware limitation o what is the requirements i need to make transcoding the 100 channels?

Thx.
BR
Santiago

Application wont launch

Hi there!
I'm struggling in trying to launch the application, I've successfully built the app but when I attempt to launch it using "java -jar proxylive.jar" command, it throws some exceptions relatively beans creation, it looks like there are some unsatisfied dependencies.
Can you figure out what's the problem?

I'm going to attach the log details.

log details.txt

guide to build jar

build jar for ubuntu
git clone https://github.com/segator/proxylive.git
cd proxylive/
mvn compile

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building ProxyLive 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The artifact org.apache.commons:commons-io:jar:1.3.2 has been relocated to commons-io:commons-io:jar:1.3.2
[INFO]
[INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ ProxyLive ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ProxyLive ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.538s
[INFO] Finished at: Sun Oct 29 23:43:27 CET 2017
[INFO] Final Memory: 14M/605M
[INFO] ------------------------------------------------------------------------

good luck

error: RemoteException("channel no exist")

hi there,
I recieve the following error when trying to connect to a channel using the url
http://username:password@tvheadendserver:8080/view/1080p/1478245957
1478245957 is a channelid from my tvheadendserver. I can successfully access the same channel using the usual tvheadend url which is
http://username:password@tvheadendserver:9981/stream/channelid/1478245957
note the url above contain the literal "channelid" not "channel" as in your examples and code.

here is the error:

java.rmi.RemoteException: channel no exist

at com.github.segator.proxylive.controller.StreamController.getChannelData(StreamController.java:408) ~[classes!/:1.0-SNAPSHOT],
at com.github.segator.proxylive.controller.StreamController.dispatchStream(StreamController.java:98) ~[classes!/:1.0-SNAPSHOT],
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191],
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191],
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191],
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191],
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE],
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.14.RELEASE.jar!/:4.3.14.RELEASE],
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-4.3.14.RELEASE.jar!/:4.3.14.RELEASE]

please can you point me to the issue ?

exessive logging

hi, would it be possible tu insert a switch to turn off this excessive looging ?, i almost guess the pretty high cpu usage comes from there in combination when streaming ...

for debugging, fine, for daily usage i would say its pretty much ... sample, playing a hls stream, for 90 seconds i have like 600 lines of logging

Feature Request Adaptive streaming

Hi, so, after some testings and so on (high cpu usage) may a request about hls streaming

to get some benfit from hls it would be nice to implement adaptive streaming, so running as sample

360 and 480 transcode and build the m3u8 with both streams ... so HLS could play its benefit ;)

Malformed Channel Names in playlist generated by proxylive

Hi segator,

one question regarding the playlist's channel names. Some are displayed correctly. And approximately 30% are not and are malformed. This happens when the source is set to tvheadend. The error can be best explained via this image. Would be great to know how to fix this in the channel generation.

Thank you in advance and kind regards.

PS: if there is a way to tip you just let me know

Problem with docker start

Hi, with docker on Mac OSX the application doesn't start with this error:

2020-01-06 14:38:41,115 ERROR [main] org.springframework.boot.web.embedded.tomcat.TomcatStarter: Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webMvcMetricsFilter' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]: Unsatisfied dependency expressed through method 'webMvcMetricsFilter' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'prometheusMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'prometheusMetrics': Unsatisfied dependency expressed through field 'streamProcessorsSession'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamProcessorsSession': Unsatisfied dependency expressed through field 'geoIPService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'geoIPService': Invocation of init method failed; nested exception is java.net.UnknownHostException: geolite.maxmind.com
2020-01-06 14:38:41,139 INFO [main] org.apache.juli.logging.DirectJDKLog: Stopping service [Tomcat]
2020-01-06 14:38:41,144 WARN [main] org.springframework.context.support.AbstractApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
2020-01-06 14:38:41,158 INFO [main] org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-01-06 14:38:41,162 ERROR [main] org.springframework.boot.SpringApplication: Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat

Error running docker Mac OSX Mojave

When I try to run the docker with this command:

docker run -it -v /Users/<MY_USERNAME>/Downloads/docker_shared/application.yml:/app/application.yml segator/proxylive

where /Users/<MY_USERNAME>/Downloads/docker_shared/application.yml looks like this:

source:
#My Tvheadend source instance
tvheadendurl: http://192.168.0.1:9981/stream/channel/{id}
#In case of source connection problem, retry connection in 10 seconds
reconnectTimeout: 10
streamTimeout: 60
#Client Stream timeout, if no bytes from backend on this timeout range, the client connection will be closed
internalConnection: true
#all tasks always try to connect to proxylive(loop) instead of direct to tvheadend.
#Pros:
#-Single connection to tvheadend per channel
#-when 2 clients with HLS and mpegTS with the same transcoding profile only transcoded one time.(so less cpu usage)
#Cons:
#-Slower start when the channel is not yet initialized on HLS/or mpegTs with transcoding.
ffmpeg:
path: '/usr/bin/ffmpeg'
profiles:
-
alias: "aac"
parameters: "-sn -c:a:0 aac -b:a 320k -c:v copy"
-
alias: "360p"
parameters: "-sn -c:a:0 aac -b:a 128k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 3.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 700k -preset veryfast -vf scale=-1:360,yadif=0"
-
alias: "480p"
parameters: "-sn -c:a:0 aac -b:a 196k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 3.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 1500k -preset veryfast -vf scale=-1:480,yadif=0"
-
alias: "720p"
parameters: "-sn -c:a:0 aac -b:a 320k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 3000k -preset veryfast -vf scale=-1:720,yadif=0"
-
alias: "1080p"
parameters: "-sn -c:a:0 aac -b:a 320k -c:v libx264 -tune zerolatency -g 300 -vprofile high -level 4.0 -movflags +faststart -bufsize 15000k -maxrate 5000k -preset veryfast -vf yadif=0"
mpegTS:
parameters: "-threads 0 -f mpegts -mpegts_m2ts_mode 1 -mpegts_copyts 1 -mpegts_flags +resend_headers "
#Specific parameters for mpegTS(only works if a diferent profile than raw is selected, raw send direct data from backend so no transcoded, in this case not applied this parameter.
hls:
tempPath: "/tmp"
#Path where HLS will save segment files and playlist
parameters: "-flags -global_header -avoid_negative_ts disabled -map_metadata -1 -start_at_zero -copyts -flags -global_header -vsync cfr -y -nostats -f hls -hls_time 2 -hls_list_size 10 -hls_wrap 20 -hls_allow_cache 0 -hls_flags +append_list -hls_flags +discont_start -hls_flags +delete_segments"
#FFmpeg parameters specific for HLS
timeout: 120
#When user disconnect from stream, we doesnt have any way to be sure the user is totally disconnected so this parameter control how many seconds since last download of a segment of a concret stream, if the timeout is reached, the timeout is canceled.

buffers:
#The max amount of bytes the application can read from a stream, default 1MB
chunkSize: 1048576
#Buffer size of the broadcast buffer,larger buffer more stable but larger delay than source stream, default 50MB
broadcastBufferSize: 52428800
#Override the endpoint in the playlist(optional)
endpoint: https://myendpoint.com

The 192.168.0.1:9981 is where I have tvheadend running.
I go this error:

019-02-11 20:55:51.406 INFO 7 --- [ main] c.github.segator.proxylive.Application : No active profile set, falling back to default profiles: default
2019-02-11 20:55:51.447 INFO 7 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@131276c2: startup date [Mon Feb 11 20:55:51 UTC 2019]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@1ee0005
2019-02-11 20:55:52.238 INFO 7 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=470aa287-ebaf-30e8-88c4-3a2a275def5d
2019-02-11 20:55:52.337 INFO 7 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$80b05bf9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-02-11 20:55:52.750 INFO 7 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2019-02-11 20:55:52.779 INFO 7 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-02-11 20:55:52.782 INFO 7 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.27
2019-02-11 20:55:52.925 INFO 7 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-02-11 20:55:52.927 INFO 7 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1479 ms
2019-02-11 20:55:53.081 INFO 7 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2019-02-11 20:55:53.087 INFO 7 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/]
2019-02-11 20:55:53.088 INFO 7 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/
]
2019-02-11 20:55:53.089 INFO 7 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/]
2019-02-11 20:55:53.090 INFO 7 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/
]
2019-02-11 20:55:53.261 WARN 7 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService': Invocation of init method failed; nested exception is java.net.UnknownHostException: tvheadend
2019-02-11 20:55:53.268 INFO 7 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2019-02-11 20:55:53.308 INFO 7 --- [ main] utoConfigurationReportLoggingInitializer :

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2019-02-11 20:55:53.329 ERROR 7 --- [ main] o.s.boot.SpringApplication : Application startup failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService': Invocation of init method failed; nested exception is java.net.UnknownHostException: tvheadend .....

Any help?

Thanks

ffmpeg not found

hi,
I got the problem, that ffmpeg is not found.
Raw streams work without a problem, but anytime I try to transcode, it says:

java.io.IOException: Cannot run program "/usr/bin/ffmpeg": error=2, No such file or directory

Funny thing is, when I bash into the docker container and type:

/usr/bin/ffmpeg
bash: /usr/bin/ffmpeg: No such file or directory

But do I enter the folder first, then ffmpeg is found.

cd /usr/bin/
ffmpeg
ffmpeg version 4.3.3 Copyright (c) 2000-2021 the FFmpeg developers
...

any ideas?

Unable to run image as docker container - application.yaml malformed ffmpeg profile commands

Hi there,

first of all thank you very much for your great work. I can hardly express in words how much I appreciate the fact you share your knowledge and code here. I tried to run the instance as follow

docker run --name=proxylive -p 3080:8080 --restart=always -d -v /mnt/application.yml:/app/application.yml:ro segator/proxylive

I am using the application.yml from a previous issue.

Getting following docker logs errors:

/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
11:29:20.899 [main] DEBUG org.springframework.boot.context.logging.ClasspathLoggingApplicationListener - Application failed to start with classpath: [jar:file:/app/proxyLive.jar!/BOOT-INF/classes!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-starter-web-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-starter-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-autoconfigure-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-starter-logging-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/logback-classic-1.2.3.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/logback-core-1.2.3.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/log4j-to-slf4j-2.11.2.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/log4j-api-2.11.2.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jul-to-slf4j-1.7.25.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/javax.annotation-api-1.3.2.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-core-5.1.5.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-jcl-5.1.5.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/snakeyaml-1.23.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-starter-json-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jackson-datatype-jdk8-2.9.8.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jackson-datatype-jsr310-2.9.8.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jackson-module-parameter-names-2.9.8.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-starter-tomcat-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/tomcat-embed-core-9.0.16.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/tomcat-embed-el-9.0.16.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/tomcat-embed-websocket-9.0.16.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/hibernate-validator-6.0.14.Final.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/validation-api-2.0.1.Final.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jboss-logging-3.3.2.Final.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/classmate-1.4.0.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-web-5.1.5.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-beans-5.1.5.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-webmvc-5.1.5.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-aop-5.1.5.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-context-5.1.5.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-expression-5.1.5.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-starter-actuator-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-actuator-autoconfigure-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/spring-boot-actuator-2.1.3.RELEASE.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/micrometer-core-1.1.3.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/HdrHistogram-2.1.9.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/LatencyUtils-2.0.3.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/micrometer-registry-prometheus-1.1.3.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/simpleclient_common-0.5.0.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/simpleclient-0.5.0.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/geoip2-2.8.0.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/maxmind-db-1.2.1.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/httpclient-4.5.7.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/httpcore-4.4.11.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/commons-codec-1.11.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jackson-databind-2.9.8.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jackson-annotations-2.9.0.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jackson-core-2.9.8.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/commons-compress-1.19.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/commons-io-1.3.2.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/commons-lang3-3.4.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/commons-cli-1.2.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/json-simple-1.1.1.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/junit-4.12.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/hamcrest-core-1.3.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/org.eclipse.jgit-5.7.0.202003110725-r.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jsch-0.1.55.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/jzlib-1.1.1.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/JavaEWAH-1.1.7.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/slf4j-api-1.7.25.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/bcpg-jdk15on-1.64.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/bcprov-jdk15on-1.64.jar!/, jar:file:/app/proxyLive.jar!/BOOT-INF/lib/bcpkix-jdk15on-1.64.jar!/]
11:29:21.204 [background-preinit] DEBUG org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator - Loaded expression factory via original TCCL
11:29:21.215 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator as ValidatorFactory-scoped message interpolator.
11:29:21.216 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.resolver.TraverseAllTraversableResolver as ValidatorFactory-scoped traversable resolver.
11:29:21.216 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.util.ExecutableParameterNameProvider as ValidatorFactory-scoped parameter name provider.
11:29:21.217 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.DefaultClockProvider as ValidatorFactory-scoped clock provider.
11:29:21.217 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.scripting.DefaultScriptEvaluatorFactory as ValidatorFactory-scoped script evaluator factory.
11:29:22.243 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalStateException: Failed to load property source from location 'file:./application.yml'
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:554)
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadForFileExtension(ConfigFileApplicationListener.java:500)
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:467)
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.lambda$null$6(ConfigFileApplicationListener.java:448)
        at java.base/java.lang.Iterable.forEach(Iterable.java:75)
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.lambda$load$7(ConfigFileApplicationListener.java:447)
        at java.base/java.lang.Iterable.forEach(Iterable.java:75)
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:444)
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:332)
        at org.springframework.boot.context.config.ConfigFileApplicationListener.addPropertySources(ConfigFileApplicationListener.java:207)
        at org.springframework.boot.context.config.ConfigFileApplicationListener.postProcessEnvironment(ConfigFileApplicationListener.java:190)
        at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:177)
        at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:163)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
        at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:75)
        at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
        at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:347)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:306)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
        at com.github.segator.proxylive.Application.main(Application.java:38)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed here
 in 'reader', line 6, column 16:
            refresh: 600 #10 minutes
                   ^

        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchValue(ScannerImpl.java:870)
        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:358)
        at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
        at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:558)
        at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
        at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
        at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:214)
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
        at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
        at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
        at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
        at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
        at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
        at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
        at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:85)
        at org.yaml.snakeyaml.constructor.BaseConstructor.getData(BaseConstructor.java:123)
        at org.yaml.snakeyaml.Yaml$1.next(Yaml.java:547)
        at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:161)
        at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:134)
        at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:75)
        at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadDocuments(ConfigFileApplicationListener.java:572)
        at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:526)
        ... 31 common frames omitted
โžœ  iptv_proxylive

Any help is highly appreciated. Thank you in advance !

transcode error

Hi,

I tried to use proxylive without success. I've got this message run proxylive in MacOS Docker:

Input #0, mpegts, from 'http://xxxxxxx:9981/stream/channel/bbf9b26ed82ad77c53142a775e2dbb98':
Duration: N/A, start: 20319.848100, bitrate: N/A
Program 303
Metadata:
service_name : Nat Geo HD
service_provider: DIGI Videk
Stream #0:0[0x1f40]: Video: h264 ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0:10x1f41: Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, s16p, 192 kb/s
Output #0, mpegts, to 'pipe:':
Metadata:
encoder : Lavf57.56.100
Stream #0:0: Video: h264 ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, top first), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 50 tbr, 90k tbn, 90k tbc
Stream #0:1(hun): Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, 192 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
stopping from controller
[bbf9b26ed82ad77c53142a775e2dbb98_raw] Required Terminate Transcode
Saliendo Error Thread
que pasa dudeeeeeeeeeeeeee
LOL1
[bbf9b26ed82ad77c53142a775e2dbb98_raw] Terminated Transcode
User Close:{ip=172.17.0.1, browserInfo=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8, streams=]}

Debian unable to launch

Unfortunately unable to launch on Debian:

$ java -version
openjdk version "11.0.5-ea" 2019-10-15
OpenJDK Runtime Environment (build 11.0.5-ea+6-post-Debian-2)
OpenJDK 64-Bit Server VM (build 11.0.5-ea+6-post-Debian-2, mixed mode, sharing)`
$ mvn -v
Apache Maven 3.6.2
Maven home: /usr/share/maven
Java version: 11.0.5-ea, vendor: Debian, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "4.13.0-1-amd64", arch: "amd64", family: "unix"
$ mvn clean install
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/usr/share/maven/lib/guice.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for org.segator:ProxyLive:jar:1.0-SNAPSHOT
[WARNING] 'dependencies.dependency.version' for org.eclipse.jgit:org.eclipse.jgit:jar is either LATEST or RELEASE (both of them are being deprecated) @ line 76, column 22
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO] 
[INFO] -----------------------< org.segator:ProxyLive >------------------------
[INFO] Building ProxyLive 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The artifact org.apache.commons:commons-io:jar:1.3.2 has been relocated to commons-io:commons-io:jar:1.3.2
[INFO] 
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ ProxyLive ---
[INFO] 
[INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ ProxyLive ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ ProxyLive ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 65 source files to /opt/proxylive/target/classes
[INFO] /opt/proxylive/src/main/java/com/github/segator/proxylive/service/ChannelTVHeadendService.java: Some input files use or override a deprecated API.
[INFO] /opt/proxylive/src/main/java/com/github/segator/proxylive/service/ChannelTVHeadendService.java: Recompile with -Xlint:deprecation for details.
[INFO] /opt/proxylive/src/main/java/com/github/segator/proxylive/controller/StreamController.java: Some input files use unchecked or unsafe operations.
[INFO] /opt/proxylive/src/main/java/com/github/segator/proxylive/controller/StreamController.java: Recompile with -Xlint:unchecked for details.
[INFO] 
[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ ProxyLive ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /opt/proxylive/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ ProxyLive ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ ProxyLive ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:3.1.1:jar (default-jar) @ ProxyLive ---
[INFO] Building jar: /opt/proxylive/target/ProxyLive.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.1.3.RELEASE:repackage (repackage) @ ProxyLive ---
[INFO] Replacing main artifact with repackaged archive
[INFO] 
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ ProxyLive ---
[INFO] Installing /opt/proxylive/target/ProxyLive.jar to /root/.m2/repository/org/segator/ProxyLive/1.0-SNAPSHOT/ProxyLive-1.0-SNAPSHOT.jar
[INFO] Installing /opt/proxylive/pom.xml to /root/.m2/repository/org/segator/ProxyLive/1.0-SNAPSHOT/ProxyLive-1.0-SNAPSHOT.pom
[INFO] 
[INFO] --- maven-resources-plugin:2.7:copy-resources (copy-resource-one) @ ProxyLive ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource to /opt/proxylive/target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.784 s
[INFO] Finished at: 2019-09-18T23:27:51Z
[INFO] ------------------------------------------------------------------------
$ java -jar ProxyLive.jar 

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.3.RELEASE)

2019-09-18 23:28:47.993  INFO 11690 --- [           main] c.github.segator.proxylive.Application   : Starting Application v1.0-SNAPSHOT on debian with PID 11690 (/opt/proxylive/target/ProxyLive.jar started by root in /opt/proxylive/target)
2019-09-18 23:28:48.019  INFO 11690 --- [           main] c.github.segator.proxylive.Application   : No active profile set, falling back to default profiles: default
2019-09-18 23:28:51.953  INFO 11690 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-09-18 23:28:52.170  INFO 11690 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-09-18 23:28:52.171  INFO 11690 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.16]
2019-09-18 23:28:52.191  INFO 11690 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib]
2019-09-18 23:28:52.340  INFO 11690 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-09-18 23:28:52.340  INFO 11690 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4138 ms
Refreshing GEOIP Database
2019-09-18 23:28:56.815  WARN 11690 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
2019-09-18 23:28:56.822  INFO 11690 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-09-18 23:28:56.864  INFO 11690 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-09-18 23:28:56.876 ERROR 11690 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamController': Unsatisfied dependency expressed through field 'channelService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1395) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:849) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) ~[spring-context-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.3.RELEASE.jar!/:2.1.3.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) ~[spring-boot-2.1.3.RELEASE.jar!/:2.1.3.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.1.3.RELEASE.jar!/:2.1.3.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-2.1.3.RELEASE.jar!/:2.1.3.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) ~[spring-boot-2.1.3.RELEASE.jar!/:2.1.3.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) ~[spring-boot-2.1.3.RELEASE.jar!/:2.1.3.RELEASE]
        at com.github.segator.proxylive.Application.main(Application.java:38) ~[classes!/:1.0-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[ProxyLive.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[ProxyLive.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) ~[ProxyLive.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) ~[ProxyLive.jar:1.0-SNAPSHOT]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createChannelService' defined in class path resource [com/github/segator/proxylive/service/ChannelServiceFactory.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:456) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1305) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1144) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1247) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1167) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        ... 27 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.segator.proxylive.service.ChannelService]: Factory method 'createChannelService' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        ... 40 common frames omitted
Caused by: java.lang.NullPointerException: null
        at com.github.segator.proxylive.service.ChannelServiceFactory.createChannelService(ChannelServiceFactory.java:15) ~[classes!/:1.0-SNAPSHOT]
        at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$2b6a01a0.CGLIB$createChannelService$0(<generated>) ~[classes!/:1.0-SNAPSHOT]
        at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$2b6a01a0$$FastClassBySpringCGLIB$$e1d3847a.invoke(<generated>) ~[classes!/:1.0-SNAPSHOT]
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363) ~[spring-context-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        at com.github.segator.proxylive.service.ChannelServiceFactory$$EnhancerBySpringCGLIB$$2b6a01a0.createChannelService(<generated>) ~[classes!/:1.0-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
        ... 41 common frames omitted

Any help would be very appreciated.

I am unable to get the current version to build and run correctly on Ubuntu 18.08 19.04 or 20.04

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/usr/share/maven/lib/guice.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for org.segator:ProxyLive:jar:1.0-SNAPSHOT
[WARNING] 'dependencies.dependency.version' for org.eclipse.jgit:org.eclipse.jgit:jar is either LATEST or RELEASE (both of them are being deprecated) @ line 76, column 22
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 

Although I get a .jar file if I try to run that with 'java -jar ProxyLive'

I get

2020-09-04 16:58:03,046 ERROR [main] org.springframework.boot.web.embedded.tomcat.TomcatStarter: Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webMvcMetricsFilter' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]: Unsatisfied dependency expressed through method 'webMvcMetricsFilter' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'prometheusMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'prometheusMetrics': Unsatisfied dependency expressed through field 'streamProcessorsSession'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'streamProcessorsSession': Unsatisfied dependency expressed through field 'geoIPService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'geoIPService': Invocation of init method failed; nested exception is java.net.UnknownHostException: geolite.maxmind.com
2020-09-04 16:58:03,132 INFO  [main] org.apache.juli.logging.DirectJDKLog: Stopping service [Tomcat]
2020-09-04 16:58:03,143 WARN  [main] org.springframework.context.support.AbstractApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
2020-09-04 16:58:03,199 INFO  [main] org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener: 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-09-04 16:58:03,218 ERROR [main] org.springframework.boot.SpringApplication: Application run failed

Unable to stream anything due to an apparent error obtaining the IP

I have tried to get proxylive running by all means necessary, but when streaming anything, it errors out with this in the middle of DirectTranscoeTask logs:

2020-08-17 23:01:57,888 ERROR [http-nio-8080-exec-9] org.apache.juli.logging.DirectJDKLog: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
java.net.UnknownHostException: XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX: Name or service not known
        at java.net.Inet6AddressImpl.lookupAllHostAddr(java.base@9-internal/Native Method)
        at java.net.InetAddress$PlatformNameService.lookupAllHostAddr(java.base@9-internal/InetAddress.java:900)
        at java.net.InetAddress.getAddressesFromNameService(java.base@9-internal/InetAddress.java:1484)
        at java.net.InetAddress$NameServiceAddresses.get(java.base@9-internal/InetAddress.java:819)
        at java.net.InetAddress.getAllByName0(java.base@9-internal/InetAddress.java:1474)
        at java.net.InetAddress.getAllByName(java.base@9-internal/InetAddress.java:1333)
        at java.net.InetAddress.getAllByName(java.base@9-internal/InetAddress.java:1267)
        at java.net.InetAddress.getByName(java.base@9-internal/InetAddress.java:1217)
        at com.github.segator.proxylive.tasks.StreamProcessorsSession.manage(StreamProcessorsSession.java:128)
        at com.github.segator.proxylive.controller.StreamController.dispatchHLS(StreamController.java:370)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(java.base@9-internal/Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(java.base@9-internal/NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(java.base@9-internal/DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(java.base@9-internal/Method.java:531)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117)
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@9-internal/ThreadPoolExecutor.java:1158)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@9-internal/ThreadPoolExecutor.java:632)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(java.base@9-internal/Thread.java:804)

Where XXX.XXX.XXX.XXX is my IP

Here's my application.yaml:
source:
    reconnectTimeout: 10
    tvheadendURL: http://user:[email protected]:9981
    epg:
        url: http://user:[email protected]:9981/xmltv/channels
        refresh: 600 #10 minutes
    channels:
        type: tvheadend
        refresh: 60 #In seconds
userAgent: "Proxylive"
streamTimeout: 60
geoIP:
    enabled: false
ffmpeg:
    path: '/usr/bin/ffmpeg'
    profiles:
        -
            alias: "aac"
            parameters: "-i {input} {channelParameters} -sn -ac 2 -c:a aac -b:a 320k -c:v copy"
        -
            alias: "240p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 64k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 300k  -preset veryslow -vf scale=-1:244,yadif=0"
        -
            alias: "360p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 96k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 700k  -preset veryslow -vf scale=-1:360,yadif=0"
        -
            alias: "480p"
            parameters: "-i {input} {channelParameters} -sn -c:a:0 aac -ac 2 -b:a 196k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 1500k  -preset slow -vf scale=-1:484,yadif=0"
        -
            alias: "720p"
            parameters: "-i {input} {channelParameters} -sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 10 -vprofile high -level 4.0 -crf 18 -movflags +faststart -bufsize 15000k -maxrate 3000k  -preset fast -vf scale=-1:720,yadif=0"
        -
            alias: "1080p"
            parameters:  "-i {input} {channelParameters} -sn  -c:a:0 aac -ac 2 -b:a 320k -c:v libx264 -tune zerolatency -g 300 -vprofile high -level 4.0 -movflags +faststart -bufsize 15000k -maxrate 5000k  -preset faster -vf yadif=0"
    mpegTS:
        parameters: "-threads 0 -f mpegts -mpegts_m2ts_mode 1 -mpegts_copyts 1 -mpegts_flags +resend_headers  "
    hls:
        enabled: true
        tempPath: "/tmp"
        parameters: "-flags -global_header  -avoid_negative_ts disabled -map_metadata -1 -start_at_zero -copyts -flags -global_header -vsync cfr -y -nostats -f hls  -hls_time 2 -hls_list_size 10 -hls_wrap 20 -hls_allow_cache 0  -hls_flags +append_list -hls_flags +discont_start -hls_flags +delete_segments"
        timeout: 30
buffers:
    chunkSize: 1048576
    broadcastBufferSize: 52428800

I built it using latest git and openjdk-9, then tried again with openjdk-14 and same error as well.

MPEGTS with MPTS transcode.

Hi,

wanted to transcode the MPTS stream of MP4 to MP2 stream, how can i use this in windows and let me know way to install .

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.