initial commit
This commit is contained in:
commit
494822935b
8
default.nix
Normal file
8
default.nix
Normal file
@ -0,0 +1,8 @@
|
||||
{ pkgs ? import <nixpkgs> { }, self ? ./. }:
|
||||
|
||||
pkgs.python3Packages.buildPythonApplication {
|
||||
pname = "radio";
|
||||
src = self;
|
||||
version = "0.1";
|
||||
propagatedBuildInputs = with pkgs.python3Packages; [ pip ffmpeg-python youtube-dl ];
|
||||
}
|
56
downloader.py
Normal file
56
downloader.py
Normal file
@ -0,0 +1,56 @@
|
||||
#
|
||||
# Downloads the video/audio as a stream from a provided link using youtube-dl
|
||||
# does not save the file, only the most recent fragment is held. Thus, this is
|
||||
# ideal for devices with little memory
|
||||
# TODO gather video metadata before download
|
||||
#
|
||||
|
||||
# dirpath = tempfile.mkdtemp()
|
||||
# sys.path.append(dirpath)
|
||||
# def import_from_pip(package):
|
||||
# pip.main(['install', '--target=' + dirpath, '--upgrade', package])
|
||||
# return __import__(package)
|
||||
# youtube_dl = import_from_pip('youtube_dl')
|
||||
|
||||
import tempfile
|
||||
import pip
|
||||
import sys
|
||||
import youtube_dl
|
||||
import subprocess
|
||||
|
||||
dirpath = tempfile.mkdtemp()
|
||||
sys.path.append(dirpath)
|
||||
|
||||
BUFFER_SIZE = 1024
|
||||
|
||||
def execute(cmd):
|
||||
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
||||
# monitor the stdout
|
||||
for chunk in iter(lambda: popen.stdout.read(BUFFER_SIZE), b''):
|
||||
yield chunk
|
||||
popen.stdout.close()
|
||||
popen.wait()
|
||||
|
||||
def updateYoutubeDL():
|
||||
pip.main(['install', '--target=' + dirpath, '--upgrade', package])
|
||||
|
||||
def download(url):
|
||||
# update youtube-dl
|
||||
# TODO: do this only every once in a while
|
||||
#updateYoutubeDL()
|
||||
|
||||
# start downloader so that it's stdout (with fragments) may be captured
|
||||
for s in execute(["python3","downloader.py",url]):
|
||||
print(s)
|
||||
|
||||
def runYoutubeDL(url):
|
||||
ydl_opts = {
|
||||
'logtostderr': True,
|
||||
'outtmpl': '-',
|
||||
}
|
||||
|
||||
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
||||
ydl.download([url])
|
||||
|
||||
if __name__ == "__main__":
|
||||
runYoutubeDL(sys.argv[1])
|
41
flake.lock
generated
Normal file
41
flake.lock
generated
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1620759905,
|
||||
"narHash": "sha256-WiyWawrgmyN0EdmiHyG2V+fqReiVi8bM9cRdMaKQOFg=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b543720b25df6ffdfcf9227afafc5b8c1fabfae8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1621784194,
|
||||
"narHash": "sha256-CQWN/QvVHG8qCn7UhGGwoT3jAPvnJHQUvzBlIt48FGs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c5265c01a944b1cecfcfab392d5204d73d65d4ec",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
18
flake.nix
Normal file
18
flake.nix
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
description = "An internet radio service";
|
||||
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let pkgs = nixpkgs.legacyPackages.${system}; in
|
||||
rec {
|
||||
packages = flake-utils.lib.flattenTree {
|
||||
radio = import ./default.nix { inherit pkgs; inherit self; };
|
||||
};
|
||||
defaultPackage = packages.radio;
|
||||
apps.radio = flake-utils.lib.mkApp { drv = packages.radio; };
|
||||
defaultApp = apps.radio;
|
||||
}
|
||||
);
|
||||
}
|
8
radio.py
Normal file
8
radio.py
Normal file
@ -0,0 +1,8 @@
|
||||
import downloader
|
||||
|
||||
def run():
|
||||
downloader.download('https://www.youtube.com/watch?v=BaW_jenozKc')
|
||||
downloader.download('https://www.youtube.com/watch?v=kgBcg4uBd9Q')
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
Loading…
x
Reference in New Issue
Block a user