该应用程序允许您将 http mpeg ts 转码并按需广播为转码后的 mpegts/hls
应用程序.yaml
source :
tvheadendURL : http://user:[email protected]:9981
channels :
type : tvheadend
refresh : 60 # In seconds
可以从以下位置读取自定义 JSON:
应用程序.yaml
source :
channels :
type : json
refresh : 60 # In seconds
url : file:///my/disk/channels.json or http://my.server.com/channels.json
应用程序.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
频道.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
}
]
}
]
可以从 URL 或文件(logoFile 或 logoURL)读取图片,logoURL 将缓存在 proxylive 上,因此客户端将向 proxylive 请求图片,而不是直接向定义的 URL 请求。如果使用 git 后端,picons 应该位于 git 存储库的根目录中。
您需要在运行jar的同一目录中编写application.yml文件(如果docker位于/app/application.yaml)
应用程序.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
您可以使用 plex 身份验证 ldap 或不(默认)将其添加到 application.yaml 中,所有具有“允许通道”选项的 plex 朋友都可以访问 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 "
客户端用户将连接附加到 URL ?user=user&pass=pass 或 ?token=xxx
http://localhost:8080/channel/list/mpeg/1080p?user=myplexuser&pass=myplexpass
如果使用令牌可以通过恢复
TOKEN=$(curl --location --request POST 'localhost:8080/login'
--header 'Content-Type: application/x-www-form-urlencoded'
--data-urlencode 'username=xxxxxxx'
--data-urlencode 'password=xxxxxx')
您可以从 http://{server}:8080/view/{profile}/{channelID} 获取广播流
http://[服务器]:8080/channel/list/[格式]/[配置文件]
如果启用了身份验证
http://[服务器]:8080/channel/list/[格式]/[配置文件]?token=xxx
http://[服务器]:8080/epg
运行应用程序的主机的 IP 或域
这是yaml配置中定义的配置文件,是ffmpeg视频编码配置的别名。默认情况下,我们有 1080p、720p、raw、aac 配置文件,您可以根据需要添加或修改。
源流识别。此 ID 用于识别频道,如果您使用 tvheadend 后端,则 channelID 等于 StreamID,例如 tvheadend http://tvheadend:9981/stream/channel/{id}
服务器将传输实时流的格式。
如果您不知道选择什么,请使用 mpeg
要构建,您需要安装 JDK > 1.9 和 maven 3.5.2。
然后...
git clone https://github.com/segator/proxylive
cd proxylive
mvn clean install
# you will have a file called dist/proxylive.jar
docker run --name=proxylive -p 8080:8080 --restart=always -d -v /my/application.yml:/app/application.yml:ro segator/proxylive
要首先运行,您至少需要安装 java jre 1.9。
# #Remember to have the application.yml in the working directory before run the app
java -jar proxylive.jar