diff --git a/composer.json b/composer.json index ca68ceb..f3eafcd 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "phpunit/phpunit": "~6.5.2", "doctrine/instantiator": "~1.0.0", "ffmpeg/ffmpeg": "4.0.2", - "rg3/youtube-dl": "2018.09.10", + "rg3/youtube-dl": "2018.11.07", "heroku/heroku-buildpack-php": "*", "anam/phantomjs-linux-x86-binary": "~2.1.1" }, @@ -39,10 +39,10 @@ "type": "package", "package": { "name": "rg3/youtube-dl", - "version": "2018.09.10", + "version": "2018.11.07", "dist": { "type": "zip", - "url": "https://github.com/rg3/youtube-dl/archive/2018.09.10.zip" + "url": "https://github.com/rg3/youtube-dl/archive/2018.11.07.zip" } } }, diff --git a/composer.lock b/composer.lock index 5a3c3ee..21587c2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c4f6a7bd1b31e8a6cf1cec103821a820", + "content-hash": "9290c3e6ef15fb65892664adfd8f24c2", "packages": [ { "name": "aura/session", @@ -420,16 +420,16 @@ }, { "name": "mockery/mockery", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "99e29d3596b16dabe4982548527d5ddf90232e99" + "reference": "100633629bf76d57430b86b7098cd6beb996a35a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/99e29d3596b16dabe4982548527d5ddf90232e99", - "reference": "99e29d3596b16dabe4982548527d5ddf90232e99", + "url": "https://api.github.com/repos/mockery/mockery/zipball/100633629bf76d57430b86b7098cd6beb996a35a", + "reference": "100633629bf76d57430b86b7098cd6beb996a35a", "shasum": "" }, "require": { @@ -438,8 +438,7 @@ "php": ">=5.6.0" }, "require-dev": { - "phpdocumentor/phpdocumentor": "^2.9", - "phpunit/phpunit": "~5.7.10|~6.5" + "phpunit/phpunit": "~5.7.10|~6.5|~7.0" }, "type": "library", "extra": { @@ -482,7 +481,7 @@ "test double", "testing" ], - "time": "2018-05-08T08:54:48+00:00" + "time": "2018-10-02T21:52:37+00:00" }, { "name": "nikic/fast-route", @@ -894,12 +893,12 @@ "version": "v3.1.0", "source": { "type": "git", - "url": "https://github.com/rinvex/country.git", + "url": "https://github.com/rinvex/renamed-country.git", "reference": "e32228ef43f26d3b02296be9454f842c52d492f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rinvex/country/zipball/e32228ef43f26d3b02296be9454f842c52d492f3", + "url": "https://api.github.com/repos/rinvex/renamed-country/zipball/e32228ef43f26d3b02296be9454f842c52d492f3", "reference": "e32228ef43f26d3b02296be9454f842c52d492f3", "shasum": "" }, @@ -961,6 +960,7 @@ "rinvex", "svg" ], + "abandoned": "rinvex/countries", "time": "2017-03-07T18:40:20+00:00" }, { @@ -1090,16 +1090,16 @@ }, { "name": "smarty/smarty", - "version": "v3.1.32", + "version": "v3.1.33", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "ac9d4b587e5bf53381e21881820a9830765cb459" + "reference": "dd55b23121e55a3b4f1af90a707a6c4e5969530f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/ac9d4b587e5bf53381e21881820a9830765cb459", - "reference": "ac9d4b587e5bf53381e21881820a9830765cb459", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/dd55b23121e55a3b4f1af90a707a6c4e5969530f", + "reference": "dd55b23121e55a3b4f1af90a707a6c4e5969530f", "shasum": "" }, "require": { @@ -1139,11 +1139,11 @@ "keywords": [ "templating" ], - "time": "2018-04-24T14:53:33+00:00" + "time": "2018-09-12T20:54:16+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -1201,16 +1201,16 @@ }, { "name": "symfony/process", - "version": "v3.4.15", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "4d6b125d5293cbceedc2aa10f2c71617e76262e7" + "reference": "35c2914a9f50519bd207164c353ae4d59182c2cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/4d6b125d5293cbceedc2aa10f2c71617e76262e7", - "reference": "4d6b125d5293cbceedc2aa10f2c71617e76262e7", + "url": "https://api.github.com/repos/symfony/process/zipball/35c2914a9f50519bd207164c353ae4d59182c2cb", + "reference": "35c2914a9f50519bd207164c353ae4d59182c2cb", "shasum": "" }, "require": { @@ -1246,20 +1246,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-08-03T10:42:44+00:00" + "time": "2018-10-14T17:33:21+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.15", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "c2f4812ead9f847cb69e90917ca7502e6892d6b8" + "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c2f4812ead9f847cb69e90917ca7502e6892d6b8", - "reference": "c2f4812ead9f847cb69e90917ca7502e6892d6b8", + "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f", + "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f", "shasum": "" }, "require": { @@ -1305,7 +1305,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-08-10T07:34:36+00:00" + "time": "2018-10-02T16:33:53+00:00" }, { "name": "zonuexe/http-accept-language", @@ -1462,16 +1462,16 @@ }, { "name": "heroku/heroku-buildpack-php", - "version": "v143", + "version": "v146", "source": { "type": "git", "url": "https://github.com/heroku/heroku-buildpack-php.git", - "reference": "1cdd477661d3da7434efe5fedcb42d7b42503b8d" + "reference": "a380d44126a056cc5b7daaa0714714e3c888689f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/1cdd477661d3da7434efe5fedcb42d7b42503b8d", - "reference": "1cdd477661d3da7434efe5fedcb42d7b42503b8d", + "url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/a380d44126a056cc5b7daaa0714714e3c888689f", + "reference": "a380d44126a056cc5b7daaa0714714e3c888689f", "shasum": "" }, "bin": [ @@ -1502,7 +1502,7 @@ "nginx", "php" ], - "time": "2018-08-17T16:27:37+00:00" + "time": "2018-11-08T19:23:29+00:00" }, { "name": "myclabs/deep-copy", @@ -2219,10 +2219,10 @@ }, { "name": "rg3/youtube-dl", - "version": "2018.09.10", + "version": "2018.11.07", "dist": { "type": "zip", - "url": "https://github.com/rg3/youtube-dl/archive/2018.09.10.zip", + "url": "https://github.com/rg3/youtube-dl/archive/2018.11.07.zip", "reference": null, "shasum": null }, @@ -2840,16 +2840,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", - "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", "shasum": "" }, "require": { @@ -2895,20 +2895,20 @@ "portable", "shim" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2018-09-21T13:07:52+00:00" }, { "name": "symfony/var-dumper", - "version": "v3.4.15", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f62a394bd3de96f2f5e8f4c7d685035897fb3cb3" + "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f62a394bd3de96f2f5e8f4c7d685035897fb3cb3", - "reference": "f62a394bd3de96f2f5e8f4c7d685035897fb3cb3", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ff8ac19e97e5c7c3979236b584719a1190f84181", + "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181", "shasum": "" }, "require": { @@ -2964,7 +2964,7 @@ "debug", "dump" ], - "time": "2018-07-26T11:19:56+00:00" + "time": "2018-10-02T16:33:53+00:00" }, { "name": "theseer/tokenizer", diff --git a/controllers/FrontController.php b/controllers/FrontController.php index b34ed28..370d4d8 100644 --- a/controllers/FrontController.php +++ b/controllers/FrontController.php @@ -422,9 +422,21 @@ class FrontController $body = new Stream($stream); } else { $client = new Client(); - $stream = $client->request('GET', $video->url, ['stream' => true]); + $stream = $client->request( + 'GET', + $video->url, + [ + 'stream' => true, + 'headers' => ['Range' => $request->getHeader('Range')], + ] + ); $response = $response->withHeader('Content-Type', $stream->getHeader('Content-Type')); $response = $response->withHeader('Content-Length', $stream->getHeader('Content-Length')); + $response = $response->withHeader('Accept-Ranges', $stream->getHeader('Accept-Ranges')); + $response = $response->withHeader('Content-Range', $stream->getHeader('Content-Range')); + if ($stream->getStatusCode() == 206) { + $response = $response->withStatus(206); + } $body = $stream->getBody(); } if ($request->isGet()) { diff --git a/package.json b/package.json index 6af0dfd..1b1c5e1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "alltube", "description": "HTML GUI for youtube-dl", - "version": "1.2.2", + "version": "1.2.3", "author": "Pierre Rudloff", "bugs": "https://github.com/Rudloff/alltube/issues", "dependencies": { diff --git a/resources/FAQ.md b/resources/FAQ.md index ed4153d..b42f103 100644 --- a/resources/FAQ.md +++ b/resources/FAQ.md @@ -1,14 +1,12 @@ # Frequently asked questions - - -## My browser plays the video. How do I download it? +## My browser plays the video instead of downloading it Most recent browsers automatically play a video if it is a format they know how to play. -You can ususally download the video by doing *File > Save to* or *ctrl + S*. +You can usually download the video by doing *File > Save to* or *ctrl + S*. -## Why is [alltubedownload.net](https://alltubedownload.net) so slow? +## [alltubedownload.net](https://alltubedownload.net) is too slow [alltubedownload.net](https://alltubedownload.net) is hosted on a free [Heroku server](https://www.heroku.com/pricing) so it has low RAM and CPU. @@ -22,14 +20,14 @@ and you are encouraged to host it yourself. See above. -## How do I change config parameters? +## Change config parameters You need to create a YAML file called `config.yml` in the `config/` folder. See [`config.example.yml`](../config/config.example.yml) for a list of parameters you can set and their default value. -## How do I enable audio conversion? +## Enable audio conversion In order to enable audio conversion, you need to add this to your `config.yml` file: @@ -44,7 +42,7 @@ You will also need to install `avconv` on your server: sudo apt-get install libav-tools ``` -## How do I deploy AllTube on Heroku? +## Deploy AllTube on Heroku Create a dyno with the following buildpacks: @@ -61,7 +59,7 @@ PYTHON=/app/.heroku/python/bin/python Then push the code to Heroku and it should work out of the box. -## Why can't I download videos from some websites (e.g. Dailymotion) +## I can't download videos from some websites (e.g. Dailymotion) Some websites generate an unique video URL for each IP address. When using AllTube, the URL is generated for our server's IP address @@ -93,7 +91,7 @@ You can work around this by adding this to your `config.yml` file: uglyUrls: true ``` -## How do I enable streaming videos through the server? +## Enable streaming videos through the server You need to add this to your `config.yml` file: @@ -103,7 +101,7 @@ stream: true Note that this can use a lot of ressources on your server. -## I want to download M3U videos +## Download M3U videos You need to enable streaming (see above). @@ -111,18 +109,18 @@ You need to enable streaming (see above). AllTube can rename videos automatically if you enable streaming (see above). -## I want to download a video that isn't available in my country +## Download a video that isn't available in my country If the video is available in the server's country, you can download it if you enable streaming (see above). -## How do I run the Docker image? +## Run the Docker image ```bash docker run -p 8080:80 rudloff/alltube ``` -## How do I run Heroku locally? +## Run Heroku locally You should be able to use `heroku local` like this: @@ -146,7 +144,7 @@ after `heroku local` has finished launching `php-fpm`: chmod 0667 /tmp/heroku.fcgi.5000.sock ``` -## How can I download 1080p videos from Youtube? +## Download 1080p videos from Youtube Youtube distributes HD content in two separate video and audio files. So AllTube will offer you video-only and audio-only formats in the format list. @@ -156,7 +154,7 @@ You then need to merge them together with a tool like ffmpeg. You can also enable the experimental remux mode that will merge the best video and the best audio format on the fly. -## I want to convert videos to something other than MP3 +## Convert videos to something other than MP3 By default the `convert` option only allows converting to MP3, in order to keep things simple and ressources usage low. diff --git a/templates/index.tpl b/templates/index.tpl index 9796394..99a0c44 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -25,8 +25,8 @@ {t}Audio only (MP3){/t}
- {t}From{/t} - {t}to{/t} + {t}From{/t} + {t}to{/t}
diff --git a/tests/VideoDownloadTest.php b/tests/VideoDownloadTest.php index 3621ae1..dbbf1e6 100644 --- a/tests/VideoDownloadTest.php +++ b/tests/VideoDownloadTest.php @@ -173,7 +173,7 @@ class VideoDownloadTest extends TestCase 'googlevideo.com', ], [ - 'https://www.youtube.com/watch?v=RJJ6FCAXvKg', 22, + 'https://www.youtube.com/watch?v=RJJ6FCAXvKg', 18, 'Heart_Attack_-_Demi_Lovato_'. 'Sam_Tsui_Against_The_Current-RJJ6FCAXvKg', 'mp4',