Giter Club home page Giter Club logo

fhdhr's Introduction

fHDHR Logo

Welcome to the world of streaming content as a DVR device! We use some fancy python here to achieve a system of:

fun Home Distribution Hiatus Recreation

Please Check the Docs for Installation information.

fHDHR is labeled as beta until we reach v1.0.0

Join us in #fHDHR <irc://irc.freenode.net/#fHDHR>_ on Freenode.

If you enjoy the code, consider buying me a Coke!

PayPal this

Docker Support

I am not a docker user, but I am fairly certain that after you assemble the plugins you want in the plugins folder, and run the Dockerfile, it should still work.

fhdhr's People

Contributors

arrmo avatar berserkir-wolf avatar crackers8199 avatar ctrlcctrlv avatar danaustingh avatar dcd avatar deathbybandaid avatar jgbmichalski 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fhdhr's Issues

No config example included

There is no example configuration file included. I can generate one based on the fhdhrconfig init file, but others might not look for that

Docker build errors on arm

Hey,

I'm trying to build fHDHR_PlutoTV and it's failing with this error:

ERROR: Service 'plutotv' failed to build: The command '/bin/sh -c pip3 install -r requirements.txt' returned a non-zero code: 1

System: Orange Pi One
Kernel: 5.10.4-sunxi armv7l
OS: Armbian 20.11.6 Bionic (Ubuntu 18.04.5 LTS)
Software: docker-compose version 1.17.1 Docker version 20.10.2
Notes: No other containers are running.
All packages are up to date. Builds OK on Orange Pi One Plus with Armbian 20.11.6 Buster arm64.


Full error:

Building plutotv
Step 1/6 : FROM python:3.8-slim
 ---> 434b31677947
Step 2/6 : RUN apt-get -qq update &&     apt-get -qq -y install ffmpeg gcc &&     apt-get autoclean &&     rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> a7d0c2e727b9
Step 3/6 : COPY ./ /app/
 ---> Using cache
 ---> 212bb6f29be4
Step 4/6 : WORKDIR /app
 ---> Using cache
 ---> 2bde0461450c
Step 5/6 : RUN pip3 install -r requirements.txt
 ---> Running in 940d3203e934
Collecting flask
  Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)
Collecting click>=5.1
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting itsdangerous>=0.24
  Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting Jinja2>=2.10.1
  Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)
Collecting MarkupSafe>=0.23
  Downloading MarkupSafe-1.1.1.tar.gz (19 kB)
Collecting Werkzeug>=0.15
  Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Collecting gevent
  Downloading gevent-21.1.2.tar.gz (5.9 MB)
  Installing build dependencies: started
  Installing build dependencies: still running...
  Installing build dependencies: finished with status 'error'
  ERROR: Command errored out with exit status 1:
   command: /usr/local/bin/python /usr/local/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-wkv1icie/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools >= 40.8.0' wheel 'Cython >= 3.0a6' 'cffi >= 1.12.3 ; platform_python_implementation == '"'"'CPython'"'"'' 'greenlet >= 0.4.17, < 2.0 ; platform_python_implementation == '"'"'CPython'"'"''
       cwd: None
  Complete output (239 lines):
  Collecting cffi>=1.12.3
    Downloading cffi-1.14.4.tar.gz (471 kB)
  Collecting Cython>=3.0a6
    Downloading Cython-3.0a6-py2.py3-none-any.whl (1.0 MB)
  Collecting greenlet<2.0,>=0.4.17
    Downloading greenlet-1.0.0.tar.gz (84 kB)
  Collecting wheel
    Downloading wheel-0.36.2-py2.py3-none-any.whl (35 kB)
  Collecting pycparser
    Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB)
  Collecting setuptools>=40.8.0
    Downloading setuptools-51.3.3-py3-none-any.whl (786 kB)
  Building wheels for collected packages: cffi, greenlet
    Building wheel for cffi (setup.py): started
    Building wheel for cffi (setup.py): finished with status 'error'
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-u8inmnph/cffi_db78cf5f4fbf4874a597a2091560a4b9/setup.py'"'"'; __file__='"'"'/tmp/pip-install-u8inmnph/cffi_db78cf5f4fbf4874a597a2091560a4b9/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-kb6irr3q
         cwd: /tmp/pip-install-u8inmnph/cffi_db78cf5f4fbf4874a597a2091560a4b9/
    Complete output (36 lines):
    running bdist_wheel
    running build
    running build_py
    creating build
    creating build/lib.linux-armv7l-3.8
    creating build/lib.linux-armv7l-3.8/cffi
    copying cffi/setuptools_ext.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/lock.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/api.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/vengine_gen.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/ffiplatform.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/cffi_opcode.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/vengine_cpy.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/pkgconfig.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/commontypes.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/error.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/backend_ctypes.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/recompiler.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/cparser.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/model.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/verifier.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/__init__.py -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/_cffi_include.h -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/parse_c_type.h -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/_embedding.h -> build/lib.linux-armv7l-3.8/cffi
    copying cffi/_cffi_errors.h -> build/lib.linux-armv7l-3.8/cffi
    running build_ext
    building '_cffi_backend' extension
    creating build/temp.linux-armv7l-3.8
    creating build/temp.linux-armv7l-3.8/c
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/usr/include/ffi -I/usr/include/libffi -I/usr/local/include/python3.8 -c c/_cffi_backend.c -o build/temp.linux-armv7l-3.8/c/_cffi_backend.o
    c/_cffi_backend.c:15:10: fatal error: ffi.h: No such file or directory
     #include <ffi.h>
              ^~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
    ERROR: Failed building wheel for cffi
    Running setup.py clean for cffi
    Building wheel for greenlet (setup.py): started
    Building wheel for greenlet (setup.py): finished with status 'error'
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-u8inmnph/greenlet_ecb48ae599824f1b8f4056b5dfeafe34/setup.py'"'"'; __file__='"'"'/tmp/pip-install-u8inmnph/greenlet_ecb48ae599824f1b8f4056b5dfeafe34/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-_2vph6l8
         cwd: /tmp/pip-install-u8inmnph/greenlet_ecb48ae599824f1b8f4056b5dfeafe34/
    Complete output (81 lines):
    running bdist_wheel
    running build
    running build_py
    creating build
    creating build/lib.linux-armv7l-3.8
    creating build/lib.linux-armv7l-3.8/greenlet
    copying src/greenlet/__init__.py -> build/lib.linux-armv7l-3.8/greenlet
    creating build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_generator_nested.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_version.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_gc.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_extension_interface.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_cpp.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_greenlet.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_contextvars.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_generator.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_weakref.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_stack_saved.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_tracing.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_leaks.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/test_throw.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/__init__.py -> build/lib.linux-armv7l-3.8/greenlet/tests
    running egg_info
    writing src/greenlet.egg-info/PKG-INFO
    writing dependency_links to src/greenlet.egg-info/dependency_links.txt
    writing requirements to src/greenlet.egg-info/requires.txt
    writing top-level names to src/greenlet.egg-info/top_level.txt
    reading manifest file 'src/greenlet.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    no previously-included directories found matching 'docs/_build'
    warning: no files found matching '*.py' under directory 'appveyor'
    warning: no previously-included files matching '*.pyc' found anywhere in distribution
    warning: no previously-included files matching '*.pyd' found anywhere in distribution
    warning: no previously-included files matching '*.so' found anywhere in distribution
    warning: no previously-included files matching '.coverage' found anywhere in distribution
    writing manifest file 'src/greenlet.egg-info/SOURCES.txt'
    copying src/greenlet/greenlet.c -> build/lib.linux-armv7l-3.8/greenlet
    copying src/greenlet/greenlet.h -> build/lib.linux-armv7l-3.8/greenlet
    copying src/greenlet/slp_platformselect.h -> build/lib.linux-armv7l-3.8/greenlet
    creating build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/setup_switch_x64_masm.cmd -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_aarch64_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_alpha_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_amd64_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_arm32_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_arm32_ios.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_csky_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_m68k_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_mips_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_ppc64_aix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_ppc64_linux.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_ppc_aix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_ppc_linux.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_ppc_macosx.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_ppc_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_riscv_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_s390_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_sparc_sun_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_x32_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_x64_masm.asm -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_x64_masm.obj -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_x64_msvc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_x86_msvc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/platform/switch_x86_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
    copying src/greenlet/tests/_test_extension.c -> build/lib.linux-armv7l-3.8/greenlet/tests
    copying src/greenlet/tests/_test_extension_cpp.cpp -> build/lib.linux-armv7l-3.8/greenlet/tests
    running build_ext
    building 'greenlet._greenlet' extension
    creating build/temp.linux-armv7l-3.8
    creating build/temp.linux-armv7l-3.8/src
    creating build/temp.linux-armv7l-3.8/src/greenlet
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include/python3.8 -c src/greenlet/greenlet.c -o build/temp.linux-armv7l-3.8/src/greenlet/greenlet.o
    gcc -pthread -shared -Wl,--strip-all build/temp.linux-armv7l-3.8/src/greenlet/greenlet.o -L/usr/local/lib -o build/lib.linux-armv7l-3.8/greenlet/_greenlet.cpython-38-arm-linux-gnueabihf.so
    building 'greenlet.tests._test_extension' extension
    creating build/temp.linux-armv7l-3.8/src/greenlet/tests
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -Isrc/greenlet/ -I/usr/local/include/python3.8 -c src/greenlet/tests/_test_extension.c -o build/temp.linux-armv7l-3.8/src/greenlet/tests/_test_extension.o
    gcc -pthread -shared -Wl,--strip-all build/temp.linux-armv7l-3.8/src/greenlet/tests/_test_extension.o -L/usr/local/lib -o build/lib.linux-armv7l-3.8/greenlet/tests/_test_extension.cpython-38-arm-linux-gnueabihf.so
    building 'greenlet.tests._test_extension_cpp' extension
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -Isrc/greenlet/ -I/usr/local/include/python3.8 -c src/greenlet/tests/_test_extension_cpp.cpp -o build/temp.linux-armv7l-3.8/src/greenlet/tests/_test_extension_cpp.o
    gcc: error trying to exec 'cc1plus': execvp: No such file or directory
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
    ERROR: Failed building wheel for greenlet
    Running setup.py clean for greenlet
  Failed to build cffi greenlet
  Installing collected packages: pycparser, wheel, setuptools, greenlet, Cython, cffi
      Running setup.py install for greenlet: started
      Running setup.py install for greenlet: finished with status 'error'
      ERROR: Command errored out with exit status 1:
       command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-u8inmnph/greenlet_ecb48ae599824f1b8f4056b5dfeafe34/setup.py'"'"'; __file__='"'"'/tmp/pip-install-u8inmnph/greenlet_ecb48ae599824f1b8f4056b5dfeafe34/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-lv3jsjlc/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-wkv1icie/overlay --compile --install-headers /tmp/pip-build-env-wkv1icie/overlay/include/python3.8/greenlet
           cwd: /tmp/pip-install-u8inmnph/greenlet_ecb48ae599824f1b8f4056b5dfeafe34/
      Complete output (81 lines):
      running install
      running build
      running build_py
      creating build
      creating build/lib.linux-armv7l-3.8
      creating build/lib.linux-armv7l-3.8/greenlet
      copying src/greenlet/__init__.py -> build/lib.linux-armv7l-3.8/greenlet
      creating build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_generator_nested.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_version.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_gc.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_extension_interface.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_cpp.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_greenlet.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_contextvars.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_generator.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_weakref.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_stack_saved.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_tracing.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_leaks.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/test_throw.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/__init__.py -> build/lib.linux-armv7l-3.8/greenlet/tests
      running egg_info
      writing src/greenlet.egg-info/PKG-INFO
      writing dependency_links to src/greenlet.egg-info/dependency_links.txt
      writing requirements to src/greenlet.egg-info/requires.txt
      writing top-level names to src/greenlet.egg-info/top_level.txt
      reading manifest file 'src/greenlet.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      no previously-included directories found matching 'docs/_build'
      warning: no files found matching '*.py' under directory 'appveyor'
      warning: no previously-included files matching '*.pyc' found anywhere in distribution
      warning: no previously-included files matching '*.pyd' found anywhere in distribution
      warning: no previously-included files matching '*.so' found anywhere in distribution
      warning: no previously-included files matching '.coverage' found anywhere in distribution
      writing manifest file 'src/greenlet.egg-info/SOURCES.txt'
      copying src/greenlet/greenlet.c -> build/lib.linux-armv7l-3.8/greenlet
      copying src/greenlet/greenlet.h -> build/lib.linux-armv7l-3.8/greenlet
      copying src/greenlet/slp_platformselect.h -> build/lib.linux-armv7l-3.8/greenlet
      creating build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/setup_switch_x64_masm.cmd -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_aarch64_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_alpha_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_amd64_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_arm32_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_arm32_ios.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_csky_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_m68k_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_mips_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_ppc64_aix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_ppc64_linux.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_ppc_aix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_ppc_linux.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_ppc_macosx.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_ppc_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_riscv_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_s390_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_sparc_sun_gcc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_x32_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_x64_masm.asm -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_x64_masm.obj -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_x64_msvc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_x86_msvc.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/platform/switch_x86_unix.h -> build/lib.linux-armv7l-3.8/greenlet/platform
      copying src/greenlet/tests/_test_extension.c -> build/lib.linux-armv7l-3.8/greenlet/tests
      copying src/greenlet/tests/_test_extension_cpp.cpp -> build/lib.linux-armv7l-3.8/greenlet/tests
      running build_ext
      building 'greenlet._greenlet' extension
      creating build/temp.linux-armv7l-3.8
      creating build/temp.linux-armv7l-3.8/src
      creating build/temp.linux-armv7l-3.8/src/greenlet
      gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include/python3.8 -c src/greenlet/greenlet.c -o build/temp.linux-armv7l-3.8/src/greenlet/greenlet.o
      gcc -pthread -shared -Wl,--strip-all build/temp.linux-armv7l-3.8/src/greenlet/greenlet.o -L/usr/local/lib -o build/lib.linux-armv7l-3.8/greenlet/_greenlet.cpython-38-arm-linux-gnueabihf.so
      building 'greenlet.tests._test_extension' extension
      creating build/temp.linux-armv7l-3.8/src/greenlet/tests
      gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -Isrc/greenlet/ -I/usr/local/include/python3.8 -c src/greenlet/tests/_test_extension.c -o build/temp.linux-armv7l-3.8/src/greenlet/tests/_test_extension.o
      gcc -pthread -shared -Wl,--strip-all build/temp.linux-armv7l-3.8/src/greenlet/tests/_test_extension.o -L/usr/local/lib -o build/lib.linux-armv7l-3.8/greenlet/tests/_test_extension.cpython-38-arm-linux-gnueabihf.so
      building 'greenlet.tests._test_extension_cpp' extension
      gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -Isrc/greenlet/ -I/usr/local/include/python3.8 -c src/greenlet/tests/_test_extension_cpp.cpp -o build/temp.linux-armv7l-3.8/src/greenlet/tests/_test_extension_cpp.o
      gcc: error trying to exec 'cc1plus': execvp: No such file or directory
      error: command 'gcc' failed with exit status 1
      ----------------------------------------
  ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-u8inmnph/greenlet_ecb48ae599824f1b8f4056b5dfeafe34/setup.py'"'"'; __file__='"'"'/tmp/pip-install-u8inmnph/greenlet_ecb48ae599824f1b8f4056b5dfeafe34/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-lv3jsjlc/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-wkv1icie/overlay --compile --install-headers /tmp/pip-build-env-wkv1icie/overlay/include/python3.8/greenlet Check the logs for full command output.
  ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python /usr/local/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-wkv1icie/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools >= 40.8.0' wheel 'Cython >= 3.0a6' 'cffi >= 1.12.3 ; platform_python_implementation == '"'"'CPython'"'"'' 'greenlet >= 0.4.17, < 2.0 ; platform_python_implementation == '"'"'CPython'"'"'' Check the logs for full command output.
ERROR: Service 'plutotv' failed to build: The command '/bin/sh -c pip3 install -r requirements.txt' returned a non-zero code: 1

Can't Run NewsOn

Not sure what's happened. I have Locast running (slightly older version) fine, but I can't get NewsOn to run. In the browser I get the error: "Internal Server Error" when accessing the site. On the server, I get a lot of errors but seems to indicate the templates are a problem. Any ideas?

Move Streaming settings

combine direct,vlc,ffmpeg

make force_best a streaming setting, and allow get_stream to report that we want to force_best

duplicate the beststream code to tuning

stream method setting should move too

chunksize should be a single setting

Somethings wrong with eqpaisley's python/ubuntu environment!!

First install and run, getting this output when I run the main.py. (Ubuntu 18 command line)

Traceback (most recent call last): File "main.py", line 5, in <module> monkey.patch_all() File "/usr/local/lib/python3.6/dist-packages/gevent/monkey.py", line 1214, in patch_all _notify_patch(events.GeventWillPatchAllEvent(modules_to_patch, kwargs), _war nings) File "/usr/local/lib/python3.6/dist-packages/gevent/monkey.py", line 185, in _ notify_patch notify_and_call_entry_points(event) File "/usr/local/lib/python3.6/dist-packages/gevent/events.py", line 104, in n otify_and_call_entry_points subscriber = plugin.load() File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2323, in load self.require(*args, **kwargs) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2346, in require items = working_set.resolve(reqs, env, installer, extras=self.extras) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 778, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'psutil>=5.7.0; sys_platform != "win32" or platform_python_implementation == "CPython" and extra == "test"' distribution was not found and is required by the application

Missing comma in M3#

Issue seen with build 1-7-2021 of fHDHR where ChannelsDVR is not automatically mapping PlutoTV channels due to a missing a comma after the group-title.
Currently: group-title="fHDHR-PlutoTV"WatchFree Movie Binge
Should be: group-title="fHDHR-PlutoTV",WatchFree Movie Binge

Thanks again for all the effort put in on this project.

DNS Spamming with uuid

Any idea why the system is spamming the configured UUID from config.ini:uuid in the form of ..com, which is obviously failing.

What config option can I use to disable this. It's hitting my internal DNS servers dozens of times per second.

New config.ini

I created the config.ini in the root folder using your example. The config.ini file is not being found when run.
Any thoughts?

Opening and Verifying Configuration File.
Config file missing, Exiting...
Press any key to continue . . .

YouTube Version BUG

Seems there are issues with the YouTube one. Once I put in my YouTube API I started getting errors about
"AttributeError: 'OriginChannels' object has no attribute 'config'"

I did add youtube-dl to the docker since it complained about that as well. It won't launch because of this error.

Channel Number order

@deathbybandaid
Would it be possible to order the channels by Channel Number in fHDHR_PlutoTV?
http://127.0.0.1:5009/channels

I forced channel update but the new Showtime Select and HSN channels are not showing? Any theories? I just checked the channels.json file and the new channels aren't there yet. Hmmm.

Thanks,
Tom

Missing double quote in M3U playlist causes each channel to be read as its own group in xTeVe

I added the fHDHR playlist to xTeVe and was unable to create a playlist group filter for locast channels. The issue appears to be a missing double quote in the playlist group-title attribute after the group name and before the comma.

Example playlist item:

#EXTM3U url-tvg="http://<ip>:5004/api/xmltv" x-tvg-url="http://10.164.1.238:5004/api/xmltv"
#EXTINF:0 channelID="1059" tvg-chno="1.0" tvg-name="KTTWDT" tvg-id="1.0" tvg-logo="http://<ip>:5004/api/images?method=get&type=channel&id=1059" group-title="fHDHR-Locast,KTTWDT
http://<ip>:5004/auto/v1.0

Tested working playlist item:

#EXTM3U url-tvg="http://<ip>:5004/api/xmltv" x-tvg-url="http://<ip>:5004/api/xmltv"
#EXTINF:0 channelID="1059" tvg-chno="1.0" tvg-name="KTTWDT" tvg-id="1.0" tvg-logo="http://<ip>:5004/api/images?method=get&type=channel&id=1059" group-title="fHDHR-Locast",KTTWDT
http://<ip>:5004/auto/v1.0

0.4.0 error in SSDP data on startup M-SEARCH

Loading fHDHR v0.4.0-beta
Loading Configuration File: /app/config/config.ini
HTTP Server Starting
SSDP Server Starting
EPG Update Starting
Process Process-2:
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/local/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/app/fHDHR/device/ssdp.py", line 190, in run
    self.on_recv(data, address)
  File "/app/fHDHR/device/ssdp.py", line 111, in on_recv
    header, payload = data.decode().split('\r\n\r\n')[:2]
ValueError: not enough values to unpack (expected 2, got 1)

module 'fHDHR' has no attribute 'originservice' on launch

Using c0df08a commit:

root@honeybee:/home/dev/scripts/fHDHR_Locast# python3 main.py --config_file=config.ini
Traceback (most recent call last): File "main.py", line 11, in <module> from fHDHR.cli import run File "/home/dev/scripts/fHDHR_Locast/fHDHR/cli/run.py", line 7, in <module> from fHDHR import fHDHR_VERSION, config, originservice, ssdpserver, epghandler, fHDHRerrors, fHDHRweb File "/home/dev/scripts/fHDHR_Locast/fHDHR/originservice/__init__.py", line 3, in <module> import fHDHR.originservice.locast as serviceorigin AttributeError: module 'fHDHR' has no attribute 'originservice'

EPG Update Connection Error

I am getting this error quite often in the programs. This is from the Xumo version.

Process Process-2:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 416, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.8/http/client.py", line 1347, in getresponse
    response.begin()
  File "/usr/lib/python3.8/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.8/http/client.py", line 276, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 719, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 400, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3/dist-packages/six.py", line 702, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 416, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.8/http/client.py", line 1347, in getresponse
    response.begin()
  File "/usr/lib/python3.8/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.8/http/client.py", line 276, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/app/fHDHR/device/epg/__init__.py", line 295, in run
    self.fhdhr.web.session.get(self.epg_update_url)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 546, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

The docker crashes and I have to restart it,

Requirements.txt install issues with "image" and "m3u8"

When installing the requirements from requirements.txt, everything appears to have gone OK, but there were issues with 'image' and 'm3u8'. The installation continued without a problem though... Not sure if this is going to cause me problems in the long run...

Collecting flask
  Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 94 kB 709 kB/s
Collecting gevent
  Downloading gevent-20.9.0-cp38-cp38-manylinux2010_x86_64.whl (6.1 MB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 6.1 MB 8.8 MB/s
Collecting image
  Downloading image-1.5.33.tar.gz (15 kB)
Collecting m3u8
  Downloading m3u8-0.7.1.tar.gz (23 kB)
Collecting pycryptodome
  Downloading pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl (13.7 MB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 13.7 MB 25.8 MB/s
Collecting requests
  Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 61 kB 1.7 MB/s
Collecting sqlalchemy
  Downloading SQLAlchemy-1.3.22-cp38-cp38-manylinux2010_x86_64.whl (1.3 MB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 1.3 MB 18.9 MB/s
Collecting xmltodict
  Downloading xmltodict-0.12.0-py2.py3-none-any.whl (9.2 kB)
Collecting click>=5.1
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 82 kB 286 kB/s
Collecting Jinja2>=2.10.1
  Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 125 kB 26.9 MB/s
Collecting itsdangerous>=0.24
  Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting Werkzeug>=0.15
  Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 298 kB 26.6 MB/s
Collecting zope.event
  Downloading zope.event-4.5.0-py2.py3-none-any.whl (6.8 kB)
Requirement already satisfied: setuptools in /opt/fHDHR/lib/python3.8/site-packages (from gevent->-r requirements.txt (line 2)) (44.0.0)
Collecting zope.interface
  Downloading zope.interface-5.2.0-cp38-cp38-manylinux2010_x86_64.whl (244 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 244 kB 25.0 MB/s
Collecting greenlet>=0.4.17; platform_python_implementation == "CPython"
  Downloading greenlet-0.4.17-cp38-cp38-manylinux1_x86_64.whl (48 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 48 kB 1.5 MB/s
Collecting django
  Downloading Django-3.1.4-py3-none-any.whl (7.8 MB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 7.8 MB 9.2 MB/s
Collecting pillow
  Downloading Pillow-8.0.1-cp38-cp38-manylinux1_x86_64.whl (2.2 MB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 2.2 MB 9.1 MB/s
Collecting six
  Downloading six-1.15.0-py2.py3-none-any.whl (10 kB)
Collecting iso8601
  Downloading iso8601-0.1.13-py2.py3-none-any.whl (9.3 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2020.12.5-py2.py3-none-any.whl (147 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 147 kB 25.4 MB/s
Collecting idna<3,>=2.5
  Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 58 kB 2.1 MB/s
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.2-py2.py3-none-any.whl (136 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 136 kB 22.9 MB/s
Collecting chardet<5,>=3.0.2
  Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 178 kB 17.7 MB/s
Collecting MarkupSafe>=0.23
  Downloading MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl (32 kB)
Collecting pytz
  Downloading pytz-2020.4-py2.py3-none-any.whl (509 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 509 kB 22.1 MB/s
Collecting asgiref<4,>=3.2.10
  Downloading asgiref-3.3.1-py3-none-any.whl (19 kB)
Collecting sqlparse>=0.2.2
  Downloading sqlparse-0.4.1-py3-none-any.whl (42 kB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 42 kB 663 kB/s
Building wheels for collected packages: image, m3u8
  Building wheel for image (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /opt/fHDHR/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pz082cx6/image/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pz082cx6/image/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-c2a59t1v
       cwd: /tmp/pip-install-pz082cx6/image/
  Complete output (6 lines):
  usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
     or: setup.py --help [cmd1 cmd2 ...]
     or: setup.py --help-commands
     or: setup.py cmd --help

  error: invalid command 'bdist_wheel'
  ----------------------------------------
  ERROR: Failed building wheel for image
  Running setup.py clean for image
  Building wheel for m3u8 (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /opt/fHDHR/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pz082cx6/m3u8/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pz082cx6/m3u8/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-7eirxhff
       cwd: /tmp/pip-install-pz082cx6/m3u8/
  Complete output (6 lines):
  usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
     or: setup.py --help [cmd1 cmd2 ...]
     or: setup.py --help-commands
     or: setup.py cmd --help

  error: invalid command 'bdist_wheel'
  ----------------------------------------
  ERROR: Failed building wheel for m3u8
  Running setup.py clean for m3u8
Failed to build image m3u8
Installing collected packages: click, MarkupSafe, Jinja2, itsdangerous, Werkzeug, flask, zope.event, zope.interface, greenlet, gevent, pytz, asgiref, sqlparse, django, pillow, six, image, iso8601, m3u8, pycryptodome, certifi, idna, urllib3, chardet, requests, sqlalchemy, xmltodict
    Running setup.py install for image ... done
    Running setup.py install for m3u8 ... done
Successfully installed Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 asgiref-3.3.1 certifi-2020.12.5 chardet-4.0.0 click-7.1.2 django-3.1.4 flask-1.1.2 gevent-20.9.0 greenlet-0.4.17 idna-2.10 image-1.5.33 iso8601-0.1.13 itsdangerous-1.1.0 m3u8-0.7.1 pillow-8.0.1 pycryptodome-3.9.9 pytz-2020.4 requests-2.25.1 six-1.15.0 sqlalchemy-1.3.22 sqlparse-0.4.1 urllib3-1.26.2 xmltodict-0.12.0 zope.event-4.5.0 zope.interface-5.2.0

Just updated and can't access the website...

So I decided to do a git pull to get any chances, and after messing with the new configuration file variables, I got it to start.

I can't access the web interface any longer:

Traceback (most recent call last):
  File "/opt/fHDHR/lib/python3.8/site-packages/gevent/pywsgi.py", line 970, in handle_one_response
    self.run_application()
  File "/opt/fHDHR/lib/python3.8/site-packages/gevent/pywsgi.py", line 917, in run_application
    self.result = self.application(self.environ, self.start_response)
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/opt/fHDHR/fHDHR_git/fHDHR_web/pages/index_html.py", line 14, in __call__
    return self.get(*args)
  File "/opt/fHDHR/fHDHR_git/fHDHR_web/pages/index_html.py", line 27, in get
    return render_template('index.html', request=request, session=session, fhdhr=self.fhdhr, fhdhr_status_dict=fhdhr_status_dict, list=list)
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/templating.py", line 137, in render_template
    return _render(
  File "/opt/fHDHR/lib/python3.8/site-packages/flask/templating.py", line 120, in _render
    rv = template.render(context)
  File "/opt/fHDHR/lib/python3.8/site-packages/jinja2/environment.py", line 1090, in render
    self.environment.handle_exception()
  File "/opt/fHDHR/lib/python3.8/site-packages/jinja2/environment.py", line 832, in handle_exception
    reraise(*rewrite_traceback_stack(source=source))
  File "/opt/fHDHR/lib/python3.8/site-packages/jinja2/_compat.py", line 28, in reraise
    raise value.with_traceback(tb)
  File "/opt/fHDHR/fHDHR_git/fHDHR_web/templates/index.html", line 1, in top-level template code
    {% extends "base.html" %}
  File "/opt/fHDHR/fHDHR_git/fHDHR_web/templates/base.html", line 33, in top-level template code
    {% if session["route_list"]["pages"][page_dict]["name"] != "page_index_html" and fhdhr.config.dict["web_ui"]["access_level"] >= session["route_list"]["pages"][page_dict]["endpoint_access_level"] %}
TypeError: '>=' not supported between instances of 'NoneType' and 'int'
2021-02-01T00:42:43Z {'REMOTE_ADDR': '{{LAPTOP_IP}}', 'REMOTE_PORT': '11767', 'HTTP_HOST': '{{FHDHR_IP}}:5004', (hidden keys: 26)} failed with TypeError

[Enhancement] Manual quality selection

Basically need a way to force the highest bitrate stream available for a certain channel once the stream opens. i've been getting blocky streams sometimes. not sure if its ffmpeg error or not

Explanation of how this template works

Can you explain how this template works: what info it is looking for, and how should that info should be passed to the script? How is the end user selecting the desired stream, and what gets passed back to the user (the originating stream URL?)?

I'm trying to come up with a variant that connects to YouTube TV. So far I've successfully navigated authentication, scraped channel info and generated streams (m3u8's). I figure I can put all this together and pass it into your template, I'm just trying to figure out how.

At this time, I'm not concerned with EPG; that work is secondary to making the streams work. If you can pass along how to disable the EPG portion of the template, that would also help. Thanks!

File Not found error

I mapped 1 Pluto Channel to a known Locast spanish speaking channel, turned off the channel in the Locast version. I am getting these errors. If what I did is not possible let me know that too. I know Plex is looking for the same channel mappings on each tuner. I was hoping to just replace a Locast Channel with a Pluto TV channel.

Here is the info:

Loading fHDHR v0.2.0-beta
Validating CLI Argument
Loading Configuration File: c:\code\fhdhr_plutoTV\config.ini
Verifying Configuration settings.
No UUID found.  Generating one now...
UUID set to: inzkzrpq...
Cache set to C:\code\fhdhr_plutoTV\data\cache
Server is set to run on  127.0.0.1:5009
Logging into PlutoTV
No Username/Password set, will operate in Guest Mode.
fHDHR-PlutoTV is now running!
Starting EPG thread...
Updating plutotv EPG cache file.
Process Process-2:
SSDP server Started on port 1900 and broadcasting the availability of fHDHR-PlutoTV at http://127.0.0.1:5009
Traceback (most recent call last):
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\code\fhdhr_plutoTV\fHDHR\epghandler\__init__.py", line 26, in epgServerProcess
    epghandling.epgtypes.update()
  File "C:\code\fhdhr_plutoTV\fHDHR\epghandler\epgtypes\__init__.py", line 59, in update
    programguide = func_to_call()
  File "C:\code\fhdhr_plutoTV\fHDHR\originservice\__init__.py", line 90, in update_epg
    return self.serviceorigin.update_epg()
  File "C:\code\fhdhr_plutoTV\fHDHR\originservice\plutotv.py", line 139, in update_epg
    result = self.get_cached(str(url_start_time), 3, url)
  File "C:\code\fhdhr_plutoTV\fHDHR\originservice\plutotv.py", line 187, in get_cached
    if cache_path.is_file():
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\pathlib.py", line 1420, in is_file
    return S_ISREG(self.stat().st_mode)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\pathlib.py", line 1194, in stat
    return self._accessor.stat(self)
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'C:\\code\\fhdhr_plutoTV\\data\\cache\\origin\\web_cache\\2020-10-13T00:00:00'
Starting fHDHR Web Interface
127.0.0.1 - - [2020-10-13 15:50:02] "GET /device.xml HTTP/1.1" 200 577 0.000000
127.0.0.1 - - [2020-10-13 15:50:17] "GET / HTTP/1.1" 200 824 0.000000
127.0.0.1 - - [2020-10-13 15:50:17] "GET /favicon.ico HTTP/1.1" 200 15688 0.001001
127.0.0.1 - - [2020-10-13 15:50:22] "GET /xmltv.xml HTTP/1.1" 200 296 0.000999
127.0.0.1 - - [2020-10-13 15:50:25] "GET /device.xml HTTP/1.1" 200 577 0.000000
127.0.0.1 - - [2020-10-13 15:50:27] "GET /channels.m3u HTTP/1.1" 200 66224 0.186836
127.0.0.1 - - [2020-10-13 15:50:31] "GET /debug.json HTTP/1.1" 200 198 0.000000
127.0.0.1 - - [2020-10-13 15:52:41] "GET /device.xml HTTP/1.1" 200 577 0.000000
127.0.0.1 - - [2020-10-13 15:58:46] "GET /discover.json HTTP/1.0" 200 468 0.000000
127.0.0.1 - - [2020-10-13 15:58:46] "GET /lineup_status.json HTTP/1.0" 200 259 0.001008
127.0.0.1 - - [2020-10-13 15:58:49] "GET /discover.json HTTP/1.0" 200 468 0.000000
127.0.0.1 - - [2020-10-13 15:58:49] "GET /lineup_status.json HTTP/1.0" 200 259 0.000000
127.0.0.1 - - [2020-10-13 15:58:54] "GET /lineup.json HTTP/1.0" 200 32514 0.002000
127.0.0.1 - - [2020-10-13 15:59:13] "GET /lineup.json HTTP/1.0" 200 32514 0.000000
127.0.0.1 - - [2020-10-13 16:00:05] "GET /lineup.json HTTP/1.0" 200 32514 0.000000
127.0.0.1 - - [2020-10-13 16:04:08] "GET /lineup.json HTTP/1.0" 200 32514 0.000000
127.0.0.1 - - [2020-10-13 16:04:16] "GET /lineup.json HTTP/1.0" 200 32514 0.001000
127.0.0.1 - - [2020-10-13 16:10:15] "GET /lineup.json HTTP/1.0" 200 32514 0.001001
127.0.0.1 - - [2020-10-13 16:10:17] "GET /lineup.json HTTP/1.0" 200 32514 0.000000
127.0.0.1 - - [2020-10-13 16:12:31] "GET /discover.json HTTP/1.0" 200 468 0.001000
127.0.0.1 - - [2020-10-13 16:12:31] "GET /lineup.json HTTP/1.0" 200 32514 0.000000
127.0.0.1 - - [2020-10-13 16:12:31] "GET /lineup_status.json HTTP/1.0" 200 259 0.001000
Attempting a ffmpeg stream request for channel 206
[2020-10-13 16:12:32,033] ERROR in app: Exception on /auto/v206 [GET]
Traceback (most recent call last):
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\__init__.py", line 193, in auto
    return Response(stream_with_context(hdhr.get_stream(stream_args)), mimetype="video/mpeg")
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\__init__.py", line 78, in get_stream
    return self.watch.get_stream(stream_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\fHDHRdevice\watch.py", line 103, in get_stream
    return self.ffmpeg_stream(stream_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\fHDHRdevice\watch.py", line 59, in ffmpeg_stream
    ffmpeg_proc = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gevent\subprocess.py", line 773, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gevent\subprocess.py", line 1235, in _execute_child
    hp, ht, pid, tid = CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
127.0.0.1 - - [2020-10-13 16:12:32] "GET /auto/v206 HTTP/1.1" 500 426 0.378691
127.0.0.1 - - [2020-10-13 16:16:23] "GET /lineup.json HTTP/1.0" 200 32514 0.000000
127.0.0.1 - - [2020-10-13 16:16:23] "GET /discover.json HTTP/1.0" 200 468 0.000000
127.0.0.1 - - [2020-10-13 16:16:23] "GET /lineup_status.json HTTP/1.0" 200 259 0.001000
Attempting a ffmpeg stream request for channel 206
[2020-10-13 16:16:23,456] ERROR in app: Exception on /auto/v206 [GET]
Traceback (most recent call last):
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\__init__.py", line 193, in auto
    return Response(stream_with_context(hdhr.get_stream(stream_args)), mimetype="video/mpeg")
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\__init__.py", line 78, in get_stream
    return self.watch.get_stream(stream_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\fHDHRdevice\watch.py", line 103, in get_stream
    return self.ffmpeg_stream(stream_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\fHDHRdevice\watch.py", line 59, in ffmpeg_stream
    ffmpeg_proc = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gevent\subprocess.py", line 773, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gevent\subprocess.py", line 1235, in _execute_child
    hp, ht, pid, tid = CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
127.0.0.1 - - [2020-10-13 16:16:23] "GET /auto/v206 HTTP/1.1" 500 426 0.104027
127.0.0.1 - - [2020-10-13 16:17:40] "GET /discover.json HTTP/1.0" 200 468 0.000000
127.0.0.1 - - [2020-10-13 16:18:35] "GET /lineup.json HTTP/1.0" 200 130 0.000000
127.0.0.1 - - [2020-10-13 16:18:36] "GET /lineup_status.json HTTP/1.0" 200 128 0.001001
127.0.0.1 - - [2020-10-13 16:18:36] "GET /discover.json HTTP/1.0" 200 128 0.000000
127.0.0.1 - - [2020-10-13 16:19:34] "GET /discover.json HTTP/1.0" 200 468 0.000000
127.0.0.1 - - [2020-10-13 16:19:34] "GET /lineup.json HTTP/1.0" 200 32514 0.001001
127.0.0.1 - - [2020-10-13 16:19:34] "GET /lineup_status.json HTTP/1.0" 200 259 0.000000
Attempting a ffmpeg stream request for channel 206
[2020-10-13 16:19:36,133] ERROR in app: Exception on /auto/v206 [GET]
Traceback (most recent call last):
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\__init__.py", line 193, in auto
    return Response(stream_with_context(hdhr.get_stream(stream_args)), mimetype="video/mpeg")
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\__init__.py", line 78, in get_stream
    return self.watch.get_stream(stream_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\fHDHRdevice\watch.py", line 103, in get_stream
    return self.ffmpeg_stream(stream_args)
  File "C:\code\fhdhr_plutoTV\fHDHR\fHDHRweb\fHDHRdevice\watch.py", line 59, in ffmpeg_stream
    ffmpeg_proc = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE)
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gevent\subprocess.py", line 773, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gevent\subprocess.py", line 1235, in _execute_child
    hp, ht, pid, tid = CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
127.0.0.1 - - [2020-10-13 16:19:36] "GET /auto/v206 HTTP/1.1" 500 426 1.567271

EPG error on Windows

I setup a new build with the newest fHDHR system on Windows with the plugins. I am getting an invalid epg error. Am I missing a plugin? I have the origin locast plugin in the plugin folder. I also have the cluster and hdhr interface plugins. I have the following epg section in the config.ini. See the error below...
[epg]
images = pass
method = origin
update_frequency = 43200
reverse_days = -1
forward_days = 7
block_size = 1800
xmltv_offset = +0000

Loading fHDHR_web v0.8.1-beta
Found interface type plugin: HDHR v0.6.0-beta.
Found origin type plugin: Locast v0.6.0-beta.
Loading Configuration File: c:\code\fhdhr_locast_2\config.ini
Traceback (most recent call last):
File "C:\code\fhdhr_locast_2\main.py", line 16, in
sys.exit(run.main(SCRIPT_DIR, fHDHR_web))
File "C:\code\fhdhr_locast_2\fHDHR\cli\run.py", line 108, in main
returned_code = start(args, script_dir, fHDHR_web)
File "C:\code\fhdhr_locast_2\fHDHR\cli\run.py", line 94, in start
settings.config_verification_plugins()
File "C:\code\fhdhr_locast_2\fHDHR\config_init_.py", line 152, in config_verification_plugins
raise fHDHR.exceptions.ConfigurationError("Invalid EPG Method. Exiting...")
fHDHR.exceptions.ConfigurationError: ConfigurationError: Invalid EPG Method. Exiting...
Press any key to continue . . .

additional cmdline args

  • -setup will run through the basic items for configuration file, still have to provide the path via -c. This will also include the required items listed in origin_conf.json.

  • -advsetup same as above, but will prompt for EVERY item

  • -createconf create a basic example config file with defaults

  • -createadvconf same as previous but with EVERY item

  • -iliketobreakthings allow overriding the internal configs that don't normally allow config file overwrite.

Last 2 version not working in Windows.

I installed the requirements.txt to update but am getting Access Denied... see below.

Traceback (most recent call last):
File "C:\code\fhdhr_locast_2\main.py", line 16, in
sys.exit(run.main(SCRIPT_DIR, fHDHR_web))
File "C:\code\fhdhr_locast_2\fHDHR\cli\run.py", line 112, in main
returned_code = start(args, script_dir, fHDHR_web)
File "C:\code\fhdhr_locast_2\fHDHR\cli\run.py", line 93, in start
plugins.setup()
File "C:\code\fhdhr_locast_2\fHDHR\plugins_init_.py", line 163, in setup
self.plugins[plugin_name].setup()
File "C:\code\fhdhr_locast_2\fHDHR\plugins_init_.py", line 122, in setup
self.module.setup(self)
File "C:\code\fhdhr_locast_2\plugins\fHDHR_plugin_stream_vlc_init
.py", line 12, in setup
vlc_proc = subprocess.Popen(vlc_command, stdout=subprocess.PIPE)
File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gevent\subprocess.py", line 773, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\Valued Customer\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gevent\subprocess.py", line 1235, in _execute_child
hp, ht, pid, tid = CreateProcess(executable, args,
PermissionError: [WinError 5] Access is denied

Something to play with...

I plan to play with this next week during some time off. I will report back with any issues I encounter.

By chance... What ports does this software require to run? Ideally I'd like it to run on my Plex box, but I'm not sure if there will be a port conflict.

Thanks!

Process errors

Opening and Verifying Configuration File.
Loading Configuration File: config.ini
No UUID found.  Generating one now...
UUID set to: lqiqnkzw...
Server is set to run on  127.0.0.1:5004
Logging into Locast using username XXXXXXX
Validating User Info...
User Info obtained.
User didDonate: True
User donationExpire: 2020-10-20 11:50:42
Getting user location...
Getting location via IP Address.
Got external IP XXXXXXXX
Got location as XXXXXX
Starting EPG thread...
Starting fHDHR Interface
Starting SSDP server...
Process Process-1:
Traceback (most recent call last):
  File "/usr/local/Cellar/[email protected]/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/local/Cellar/[email protected]/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/XXXXXX/Desktop/bin/FakeHDHR_Locast/epghandler/__init__.py", line 130, in epgServerProcess
    sleeptime = int(config.config[config.config["fakehdhr"]["epg_method"]]["epg_update_frequency"])
KeyError: 'fakehdhr'
Process Process-2:
Traceback (most recent call last):
  File "/usr/local/Cellar/[email protected]/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/local/Cellar/[email protected]/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/XXXXXXX/Desktop/bin/FakeHDHR_Locast/fakehdhr/__init__.py", line 383, in interface_start
    hdhr.hubprep(config, serviceproxy, epghandling)
  File "/Users/XXXXXX/Desktop/bin/FakeHDHR_Locast/fakehdhr/__init__.py", line 43, in hubprep
    self.max_tuners = int(self.config["fakehdhr"]["tuner_count"])
KeyError: 'fakehdhr'

fails to run after SSDP server is started. running python 3.8.5 with requirements.txt installed.

Low resolution streaming

It's time to revisit the issue of fHDHR only streaming at low quality even when the configuration setting is set so force_best = true.
While debugging the code I can see that fHDHR is pulling a 1280*720 url from the PlutoTV api, but fHDHR is only streaming at 640x360. Unfortunately resolving this one could be above my pay grade, but I'm having fun trying to figure it out.
Lastly, I really appreciate your work on this project, and timely responses to issues.

Weird Terminations Leave ffmpeg running

Howdy... So since I've been using this exclusively for a while now, I've noticed that we can get into a situation where ffmpeg doesn't close, even after the tuner is released. Ideally, you probably need to add some type of ffmpeg management to the fHDHR framework, but in the meantime, I've crafted this script and set it to execute as a cron job every minute. It searches for any ffmpeg processes launched by the fHDHR user, and if the CPU usage is less than 1, kills it. So far it hasn't caused any issues.

#!/bin/bash

#ps -p$(pgrep -u fhdhr ffmpeg -d,) -o pid,%cpu

for processes in $(pgrep -u fhdhr ffmpeg)
do
        PROCESSINFO=(`echo $(ps -p$processes -o pid,%cpu) | cut -d ":"  --output-delimiter=" " -f 1-`)

        if (( $(echo "${PROCESSINFO[3]} < 1" |bc -l) )); then
                #echo Killing Process ID: ${PROCESSINFO[2]}
                `kill -9 ${PROCESSINFO[2]}`
        fi
done

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.