IPTV simple proxy for HTTP(S)/HLS(S)(AES128)/UDP/RTP + VOD, MPTS demux
Clone or download
Latest commit 9941804 Jan 11, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
AvProxy-aarch64 v2.19 Oct 7, 2018
AvProxy-armhf v2.19 Oct 7, 2018
AvProxy-mipsel32 update mipsel32 mipsel32r2sf v2.19 Jan 11, 2019
AvProxy-mipsel32r2sf update mipsel32 mipsel32r2sf v2.19 Jan 11, 2019
AvProxy-x64 (mipsel build & update x64) v2.19 Jan 11, 2019
changelog v2.21 nobuild Jan 3, 2019
readme update Oct 9, 2018
todo update todo Jan 4, 2019


Simple IPTV proxy, small, faster, compact

Available protocols are HTTP(S)/HLS(S)(AES-128)/UDP/RTP for input and output
Basic/Digest Auth for ingress url
MPTS demux for all of are input protocols

Available options are:
-Trace			verbose debug
-Daemon			became as daemon
-Log somedir		name of log directory in Log/somedir
-VodDir somedir		default /cache/
-HttpPort number	default 80
-ConfigUrl http[s]://[[user]:[pass]@]host[:port]/[path/]file.xml

-ssl_port number		default 0, http is disabled if ssl is enabled
-ssl_cert file.crt		certificate
-ssl_cert_key file.key		certificate key
-ssl_cert_key_pass file.pw	the file with a password if passphrase is required

For config is use xml
as simple tag
<line option="val"/>
or full tag
<line option="val">

It can usage local or remote config
Local config use from same dir and have name AvProxy.xml
Remote config setup from startup options -ConfigUrl

Local config is not update, only restart AvProxy reload it
Remote config is update some time

All input and output will reconfigure when remote config changed
For update config just change (increase) ver number in xml config Ver="1"

example config

<?xml version="1.0"?>
<AvProxy Ver="1">
<Input Url="http://login:@fromsite2.com:8080/url">
	<Output Name="12" Desc="desc12" AES128=1/>
<Input Url="udp://;Source=;IFace=">
	<Output Name="udp1" Desc="udp n1" Pnr=1/>
	<Output Name="udp2" Desc="udp second" Pnr=2/>
	<Output Name="udpaes" AES128=1 Pnr=20>
	        <TsPush Url="rtp://"/>
	        <TsPush Url="udp://"/>
<Input Url="http://fromsite3.any.com/url/any">
	<Output Name="http3"/>
<Input Url="https://user:pass@fromsite4.com" />
	<Output Name="http4">
	        <TsPush Url="rtp://"/>
	        <TsPush Url="udp://"/>
	        <TsPush Url="rtp://"/>
<Input Bandwidth=3000 Url="m3u8://fromsite5.com/url/test.m3u8">
	<Output Name="somename"/>

The Url for inputs are unique and must present
The Name for outputs are unique and must present
They will ignore a double Input Url in config 

And the Name of Output use for access to stream through url http[s]://

http streaming outputs available through 

http live streaming (hls) outputs available by extension .m3u8

Pnr uses to take stream program
Will take first program from a stream if no Pnr define

There are input schemes:
http -  http:// and https:// for ssl
hls - m3u8:// and m3u8s:// for ssl
rtp - rtp://
udp - udp://

"Desc" uses for description info in playlist.m3u8, will use as Name if no define 
"Bandwidth" uses for HLS variant to choose default bandwidth, value in kbps
AES128=1 enable AES-128 for HLS output

All of the outputs are available through http[s]://hostname/live/playlist.m3u8 as playlist

For configure simple VOD
#mkdir some_root_dir
#copy /mnt/file_in_some_root_dir.mp4 some_root_dir
#AvProxy -VodDir some_root_dir

All of a files in some_root_dir available through http[s]://hostname/vod/playlist.m3u8 as playlist
or direct access http[s]://hostname/vod/file_in_some_root_dir.mp4

This is basic file access, no zero copy or else like remux, will improve in future

To access the users page follow http[s]://hostname/users

All inputs are active after start