Add preview mode (only for Desktop)
This commit is contained in:
parent
97aa9f89cc
commit
edc81f471f
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,4 +3,4 @@ server.py
|
|||||||
**wip
|
**wip
|
||||||
**temp
|
**temp
|
||||||
**playlists
|
**playlists
|
||||||
*.log
|
*.log*
|
||||||
|
@ -102,7 +102,7 @@ map_extension =
|
|||||||
|
|
||||||
# buffer_cli: the prefert buffer tool, needs to be installed on your system
|
# buffer_cli: the prefert buffer tool, needs to be installed on your system
|
||||||
# buffer_cmd: need to end with the buffer size command, full command would look:
|
# buffer_cmd: need to end with the buffer size command, full command would look:
|
||||||
# /usr/bin/pv -q -B 72600k
|
# /usr/bin/pv -q -B or: /usr/bin/mbuffer -q -c -m
|
||||||
[BUFFER]
|
[BUFFER]
|
||||||
buffer_length = 5
|
buffer_length = 5
|
||||||
buffer_tolerance = 2.5
|
buffer_tolerance = 2.5
|
||||||
@ -114,7 +114,9 @@ buffer_cmd = ["-q", "-c", "-m"]
|
|||||||
# set the settings to your needs
|
# set the settings to your needs
|
||||||
# logo is only used if the path exist
|
# logo is only used if the path exist
|
||||||
# with logo_o = overlay=W-w-2:0 you can modify the logo position
|
# with logo_o = overlay=W-w-2:0 you can modify the logo position
|
||||||
|
# preview works only on a desktop system with ffplay!! Set it to True, if you need it
|
||||||
[OUT]
|
[OUT]
|
||||||
|
preview = False
|
||||||
service_name = Live Stream
|
service_name = Live Stream
|
||||||
service_provider = example.org
|
service_provider = example.org
|
||||||
logo = /usr/local/share/logo.png
|
logo = /usr/local/share/logo.png
|
||||||
|
68
ffplayout.py
68
ffplayout.py
@ -94,6 +94,7 @@ _buffer = SimpleNamespace(
|
|||||||
)
|
)
|
||||||
|
|
||||||
_playout = SimpleNamespace(
|
_playout = SimpleNamespace(
|
||||||
|
preview=cfg.getboolean('OUT', 'preview'),
|
||||||
name=cfg.get('OUT', 'service_name'),
|
name=cfg.get('OUT', 'service_name'),
|
||||||
provider=cfg.get('OUT', 'service_provider'),
|
provider=cfg.get('OUT', 'service_provider'),
|
||||||
out_addr=cfg.get('OUT', 'out_addr'),
|
out_addr=cfg.get('OUT', 'out_addr'),
|
||||||
@ -666,6 +667,7 @@ def main():
|
|||||||
# open a buffer for the streaming pipeline
|
# open a buffer for the streaming pipeline
|
||||||
# stdin get the files loop
|
# stdin get the files loop
|
||||||
# stdout pipes to ffmpeg rtmp streaming
|
# stdout pipes to ffmpeg rtmp streaming
|
||||||
|
# TODO: replace with Queue or BytesIO?
|
||||||
mbuffer = Popen(
|
mbuffer = Popen(
|
||||||
[_buffer.cli] + list(_buffer.cmd)
|
[_buffer.cli] + list(_buffer.cmd)
|
||||||
+ [str(calc_buffer_size()) + 'k'],
|
+ [str(calc_buffer_size()) + 'k'],
|
||||||
@ -674,34 +676,48 @@ def main():
|
|||||||
bufsize=0
|
bufsize=0
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
# playout to rtmp
|
if _playout.preview:
|
||||||
if _pre_comp.copy:
|
# preview playout to player
|
||||||
playout_pre = [
|
try:
|
||||||
'ffmpeg', '-v', 'info', '-hide_banner', '-nostats', '-re',
|
playout = Popen(
|
||||||
'-i', 'pipe:0', '-c', 'copy'
|
['ffplay', '-i', 'pipe:0'],
|
||||||
] + _playout.post_comp_copy
|
stdin=mbuffer.stdout,
|
||||||
|
bufsize=0
|
||||||
|
)
|
||||||
|
except OSError as e:
|
||||||
|
logger.error(e)
|
||||||
|
mbuffer.terminate()
|
||||||
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
playout_pre = [
|
# playout to rtmp
|
||||||
'ffmpeg', '-v', 'info', '-hide_banner', '-nostats', '-re',
|
if _pre_comp.copy:
|
||||||
'-thread_queue_size', '256', '-fflags', '+igndts',
|
playout_pre = [
|
||||||
'-i', 'pipe:0', '-fflags', '+genpts'
|
'ffmpeg', '-v', 'info', '-hide_banner', '-nostats',
|
||||||
] + _playout.logo + _playout.filter + \
|
'-re', '-i', 'pipe:0', '-c', 'copy'
|
||||||
_playout.post_comp_video + \
|
] + _playout.post_comp_copy
|
||||||
_playout.post_comp_audio
|
else:
|
||||||
|
playout_pre = [
|
||||||
|
'ffmpeg', '-v', 'info', '-hide_banner', '-nostats',
|
||||||
|
'-re', '-thread_queue_size', '256',
|
||||||
|
'-fflags', '+igndts', '-i', 'pipe:0',
|
||||||
|
'-fflags', '+genpts'
|
||||||
|
] + _playout.logo + _playout.filter + \
|
||||||
|
_playout.post_comp_video + \
|
||||||
|
_playout.post_comp_audio
|
||||||
|
|
||||||
playout = Popen(
|
playout = Popen(
|
||||||
list(playout_pre)
|
list(playout_pre)
|
||||||
+ [
|
+ [
|
||||||
'-metadata', 'service_name=' + _playout.name,
|
'-metadata', 'service_name=' + _playout.name,
|
||||||
'-metadata', 'service_provider=' + _playout.provider,
|
'-metadata', 'service_provider=' + _playout.provider,
|
||||||
'-metadata', 'year=' + year
|
'-metadata', 'year=' + year
|
||||||
] + list(_playout.post_comp_extra)
|
] + list(_playout.post_comp_extra)
|
||||||
+ [
|
+ [
|
||||||
_playout.out_addr
|
_playout.out_addr
|
||||||
],
|
],
|
||||||
stdin=mbuffer.stdout,
|
stdin=mbuffer.stdout,
|
||||||
bufsize=0
|
bufsize=0
|
||||||
)
|
)
|
||||||
|
|
||||||
play_thread = Thread(
|
play_thread = Thread(
|
||||||
name='play_clips', target=play_clips, args=(
|
name='play_clips', target=play_clips, args=(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user