แอปพลิเคชั่นนี้อนุญาตให้คุณแปลงรหัสและออกอากาศตามความต้องการจาก http mpeg ts ไปเป็น mpegts/hls ที่แปลงรหัสแล้ว
application.yaml
source :
tvheadendURL : http://user:[email protected]:9981
channels :
type : tvheadend
refresh : 60 # In seconds
JSON ที่กำหนดเองสามารถอ่านได้จาก:
application.yaml
source :
channels :
type : json
refresh : 60 # In seconds
url : file:///my/disk/channels.json or http://my.server.com/channels.json
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
ช่อง.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 สามารถอ่านได้จาก URL หรือไฟล์ (logoFile หรือ logoURL) logoURL จะถูกแคชบน proxylive ดังนั้นไคลเอนต์จะขอ picons ไปที่ proxylive แทนที่จะส่งไปยัง URL ที่กำหนดโดยตรง ในกรณีของการใช้แบ็กเอนด์ git รูปคอนจะต้องอยู่ในรูทของที่เก็บ git
คุณต้องเขียนไฟล์ application.yml ในไดเร็กทอรีเดียวกับที่ jar กำลังทำงานอยู่ (ในกรณีของนักเทียบท่าบน /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
คุณสามารถใช้การรับรองความถูกต้องของเพล็กซ์ ldap หรือไม่ก็ได้ (ค่าเริ่มต้น) เพิ่มสิ่งนี้ใน application.yaml เพื่อนเพล็กซ์ทั้งหมดของคุณที่มีตัวเลือก "อนุญาตช่อง" จะสามารถเข้าถึงสตรีมจาก 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/ช่อง/รายการ/[รูปแบบ]/[โปรไฟล์]
ในกรณีที่เปิดใช้งานการรับรองความถูกต้อง
http://[เซิร์ฟเวอร์]:8080/channel/list/[format]/[profile]?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