Merge branch 'release-1.2.3'

This commit is contained in:
Pierre Rudloff 2018-11-13 10:47:57 +01:00
commit c24006376b
7 changed files with 77 additions and 67 deletions

View file

@ -23,7 +23,7 @@
"phpunit/phpunit": "~6.5.2", "phpunit/phpunit": "~6.5.2",
"doctrine/instantiator": "~1.0.0", "doctrine/instantiator": "~1.0.0",
"ffmpeg/ffmpeg": "4.0.2", "ffmpeg/ffmpeg": "4.0.2",
"rg3/youtube-dl": "2018.09.10", "rg3/youtube-dl": "2018.11.07",
"heroku/heroku-buildpack-php": "*", "heroku/heroku-buildpack-php": "*",
"anam/phantomjs-linux-x86-binary": "~2.1.1" "anam/phantomjs-linux-x86-binary": "~2.1.1"
}, },
@ -39,10 +39,10 @@
"type": "package", "type": "package",
"package": { "package": {
"name": "rg3/youtube-dl", "name": "rg3/youtube-dl",
"version": "2018.09.10", "version": "2018.11.07",
"dist": { "dist": {
"type": "zip", "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"
} }
} }
}, },

86
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "c4f6a7bd1b31e8a6cf1cec103821a820", "content-hash": "9290c3e6ef15fb65892664adfd8f24c2",
"packages": [ "packages": [
{ {
"name": "aura/session", "name": "aura/session",
@ -420,16 +420,16 @@
}, },
{ {
"name": "mockery/mockery", "name": "mockery/mockery",
"version": "1.1.0", "version": "1.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mockery/mockery.git", "url": "https://github.com/mockery/mockery.git",
"reference": "99e29d3596b16dabe4982548527d5ddf90232e99" "reference": "100633629bf76d57430b86b7098cd6beb996a35a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mockery/mockery/zipball/99e29d3596b16dabe4982548527d5ddf90232e99", "url": "https://api.github.com/repos/mockery/mockery/zipball/100633629bf76d57430b86b7098cd6beb996a35a",
"reference": "99e29d3596b16dabe4982548527d5ddf90232e99", "reference": "100633629bf76d57430b86b7098cd6beb996a35a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -438,8 +438,7 @@
"php": ">=5.6.0" "php": ">=5.6.0"
}, },
"require-dev": { "require-dev": {
"phpdocumentor/phpdocumentor": "^2.9", "phpunit/phpunit": "~5.7.10|~6.5|~7.0"
"phpunit/phpunit": "~5.7.10|~6.5"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@ -482,7 +481,7 @@
"test double", "test double",
"testing" "testing"
], ],
"time": "2018-05-08T08:54:48+00:00" "time": "2018-10-02T21:52:37+00:00"
}, },
{ {
"name": "nikic/fast-route", "name": "nikic/fast-route",
@ -894,12 +893,12 @@
"version": "v3.1.0", "version": "v3.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/rinvex/country.git", "url": "https://github.com/rinvex/renamed-country.git",
"reference": "e32228ef43f26d3b02296be9454f842c52d492f3" "reference": "e32228ef43f26d3b02296be9454f842c52d492f3"
}, },
"dist": { "dist": {
"type": "zip", "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", "reference": "e32228ef43f26d3b02296be9454f842c52d492f3",
"shasum": "" "shasum": ""
}, },
@ -961,6 +960,7 @@
"rinvex", "rinvex",
"svg" "svg"
], ],
"abandoned": "rinvex/countries",
"time": "2017-03-07T18:40:20+00:00" "time": "2017-03-07T18:40:20+00:00"
}, },
{ {
@ -1090,16 +1090,16 @@
}, },
{ {
"name": "smarty/smarty", "name": "smarty/smarty",
"version": "v3.1.32", "version": "v3.1.33",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/smarty-php/smarty.git", "url": "https://github.com/smarty-php/smarty.git",
"reference": "ac9d4b587e5bf53381e21881820a9830765cb459" "reference": "dd55b23121e55a3b4f1af90a707a6c4e5969530f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/smarty-php/smarty/zipball/ac9d4b587e5bf53381e21881820a9830765cb459", "url": "https://api.github.com/repos/smarty-php/smarty/zipball/dd55b23121e55a3b4f1af90a707a6c4e5969530f",
"reference": "ac9d4b587e5bf53381e21881820a9830765cb459", "reference": "dd55b23121e55a3b4f1af90a707a6c4e5969530f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1139,11 +1139,11 @@
"keywords": [ "keywords": [
"templating" "templating"
], ],
"time": "2018-04-24T14:53:33+00:00" "time": "2018-09-12T20:54:16+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
"version": "v1.9.0", "version": "v1.10.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git", "url": "https://github.com/symfony/polyfill-ctype.git",
@ -1201,16 +1201,16 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v3.4.15", "version": "v3.4.18",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "4d6b125d5293cbceedc2aa10f2c71617e76262e7" "reference": "35c2914a9f50519bd207164c353ae4d59182c2cb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/4d6b125d5293cbceedc2aa10f2c71617e76262e7", "url": "https://api.github.com/repos/symfony/process/zipball/35c2914a9f50519bd207164c353ae4d59182c2cb",
"reference": "4d6b125d5293cbceedc2aa10f2c71617e76262e7", "reference": "35c2914a9f50519bd207164c353ae4d59182c2cb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1246,20 +1246,20 @@
], ],
"description": "Symfony Process Component", "description": "Symfony Process Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-08-03T10:42:44+00:00" "time": "2018-10-14T17:33:21+00:00"
}, },
{ {
"name": "symfony/yaml", "name": "symfony/yaml",
"version": "v3.4.15", "version": "v3.4.18",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/yaml.git", "url": "https://github.com/symfony/yaml.git",
"reference": "c2f4812ead9f847cb69e90917ca7502e6892d6b8" "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/c2f4812ead9f847cb69e90917ca7502e6892d6b8", "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f",
"reference": "c2f4812ead9f847cb69e90917ca7502e6892d6b8", "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1305,7 +1305,7 @@
], ],
"description": "Symfony Yaml Component", "description": "Symfony Yaml Component",
"homepage": "https://symfony.com", "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", "name": "zonuexe/http-accept-language",
@ -1462,16 +1462,16 @@
}, },
{ {
"name": "heroku/heroku-buildpack-php", "name": "heroku/heroku-buildpack-php",
"version": "v143", "version": "v146",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/heroku/heroku-buildpack-php.git", "url": "https://github.com/heroku/heroku-buildpack-php.git",
"reference": "1cdd477661d3da7434efe5fedcb42d7b42503b8d" "reference": "a380d44126a056cc5b7daaa0714714e3c888689f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/1cdd477661d3da7434efe5fedcb42d7b42503b8d", "url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/a380d44126a056cc5b7daaa0714714e3c888689f",
"reference": "1cdd477661d3da7434efe5fedcb42d7b42503b8d", "reference": "a380d44126a056cc5b7daaa0714714e3c888689f",
"shasum": "" "shasum": ""
}, },
"bin": [ "bin": [
@ -1502,7 +1502,7 @@
"nginx", "nginx",
"php" "php"
], ],
"time": "2018-08-17T16:27:37+00:00" "time": "2018-11-08T19:23:29+00:00"
}, },
{ {
"name": "myclabs/deep-copy", "name": "myclabs/deep-copy",
@ -2219,10 +2219,10 @@
}, },
{ {
"name": "rg3/youtube-dl", "name": "rg3/youtube-dl",
"version": "2018.09.10", "version": "2018.11.07",
"dist": { "dist": {
"type": "zip", "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, "reference": null,
"shasum": null "shasum": null
}, },
@ -2840,16 +2840,16 @@
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.9.0", "version": "v1.10.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git", "url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
"reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2895,20 +2895,20 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2018-08-06T14:22:27+00:00" "time": "2018-09-21T13:07:52+00:00"
}, },
{ {
"name": "symfony/var-dumper", "name": "symfony/var-dumper",
"version": "v3.4.15", "version": "v3.4.18",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/var-dumper.git", "url": "https://github.com/symfony/var-dumper.git",
"reference": "f62a394bd3de96f2f5e8f4c7d685035897fb3cb3" "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/f62a394bd3de96f2f5e8f4c7d685035897fb3cb3", "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ff8ac19e97e5c7c3979236b584719a1190f84181",
"reference": "f62a394bd3de96f2f5e8f4c7d685035897fb3cb3", "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2964,7 +2964,7 @@
"debug", "debug",
"dump" "dump"
], ],
"time": "2018-07-26T11:19:56+00:00" "time": "2018-10-02T16:33:53+00:00"
}, },
{ {
"name": "theseer/tokenizer", "name": "theseer/tokenizer",

View file

@ -422,9 +422,21 @@ class FrontController
$body = new Stream($stream); $body = new Stream($stream);
} else { } else {
$client = new Client(); $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-Type', $stream->getHeader('Content-Type'));
$response = $response->withHeader('Content-Length', $stream->getHeader('Content-Length')); $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(); $body = $stream->getBody();
} }
if ($request->isGet()) { if ($request->isGet()) {

View file

@ -1,7 +1,7 @@
{ {
"name": "alltube", "name": "alltube",
"description": "HTML GUI for youtube-dl", "description": "HTML GUI for youtube-dl",
"version": "1.2.2", "version": "1.2.3",
"author": "Pierre Rudloff", "author": "Pierre Rudloff",
"bugs": "https://github.com/Rudloff/alltube/issues", "bugs": "https://github.com/Rudloff/alltube/issues",
"dependencies": { "dependencies": {

View file

@ -1,14 +1,12 @@
# Frequently asked questions # Frequently asked questions
<!-- markdownlint-disable MD026 --> ## My browser plays the video instead of downloading it
## My browser plays the video. How do I download it?
Most recent browsers automatically play a video Most recent browsers automatically play a video
if it is a format they know how to play. 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) [alltubedownload.net](https://alltubedownload.net) is hosted on a free [Heroku server](https://www.heroku.com/pricing)
so it has low RAM and CPU. so it has low RAM and CPU.
@ -22,14 +20,14 @@ and you are encouraged to host it yourself.
See above. 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. You need to create a YAML file called `config.yml` in the `config/` folder.
See [`config.example.yml`](../config/config.example.yml) See [`config.example.yml`](../config/config.example.yml)
for a list of parameters you can set and their default value. 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: 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 sudo apt-get install libav-tools
``` ```
## How do I deploy AllTube on Heroku? ## Deploy AllTube on Heroku
Create a dyno with the following buildpacks: 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. 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. Some websites generate an unique video URL for each IP address.
When using AllTube, the URL is generated for our server's 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 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: 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. 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). 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). 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, If the video is available in the server's country,
you can download it if you enable streaming (see above). you can download it if you enable streaming (see above).
## How do I run the Docker image? ## Run the Docker image
```bash ```bash
docker run -p 8080:80 rudloff/alltube 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: 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 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. 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. 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 You can also enable the experimental remux mode
that will merge the best video and the best audio format on the fly. 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, By default the `convert` option only allows converting to MP3,
in order to keep things simple and ressources usage low. in order to keep things simple and ressources usage low.

View file

@ -25,8 +25,8 @@
{t}Audio only (MP3){/t} {t}Audio only (MP3){/t}
</label> </label>
<div class="seekOptions"> <div class="seekOptions">
{t}From{/t} <input type="text" placeholder="00:00:00" value="" name="from" /> {t}From{/t} <input type="text" pattern="(\d+:)?(\d+:)?\d+(\.\d+)?" placeholder="HH:MM:SS" value="" name="from"/>
{t}to{/t} <input type="text" placeholder="00:22:30" value="" name="to" /> {t}to{/t} <input type="text" pattern="(\d+:)?(\d+:)?\d+(\.\d+)?" placeholder="HH:MM:SS" value="" name="to"/>
</div> </div>
</div> </div>
</div> </div>

View file

@ -173,7 +173,7 @@ class VideoDownloadTest extends TestCase
'googlevideo.com', 'googlevideo.com',
], ],
[ [
'https://www.youtube.com/watch?v=RJJ6FCAXvKg', 22, 'https://www.youtube.com/watch?v=RJJ6FCAXvKg', 18,
'Heart_Attack_-_Demi_Lovato_'. 'Heart_Attack_-_Demi_Lovato_'.
'Sam_Tsui_Against_The_Current-RJJ6FCAXvKg', 'Sam_Tsui_Against_The_Current-RJJ6FCAXvKg',
'mp4', 'mp4',