Update README according to implementation
This commit is contained in:
parent
e23cd73664
commit
6b24b15f57
47
README.md
47
README.md
|
@ -74,7 +74,8 @@ Options:
|
|||
--name-sep=<sep> field separator [default: - ]
|
||||
--name-seq-pfx=<pfx> sequence counter prefix [default: - ]
|
||||
--name-seq-no-pad disable sequence zero-padding
|
||||
--name-add-resolution add resolution tag
|
||||
--name-add-rendition add rendition code
|
||||
--name-add-variant add variant code
|
||||
```
|
||||
|
||||
🔧 How it works
|
||||
|
@ -82,33 +83,15 @@ Options:
|
|||
|
||||
## 🏗️ The streaming infrastructure
|
||||
|
||||
Every video program have a _program identifier_ visible in their web page URL:
|
||||
|
||||
```
|
||||
https://www.arte.tv/es/videos/110139-000-A/fromental-halevy-la-tempesta/
|
||||
https://www.arte.tv/fr/videos/100204-001-A/esprit-d-hiver-1-3/
|
||||
https://www.arte.tv/en/videos/104001-000-A/clint-eastwood/
|
||||
```
|
||||
|
||||
That _program identifier_ enables us to query an API for the program's information.
|
||||
We support both _single program pages_ and _program collection pages_. Every page is shipped with some embedded JSON data, example of such data can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/www/). From that we extract metadata for each programs. In particular, we extract a _site language_ and a _program ID_. These enables us to query the config API
|
||||
|
||||
### The _config_ API
|
||||
|
||||
For the last example the API call is as such:
|
||||
|
||||
```
|
||||
https://api.arte.tv/api/player/v2/config/en/104001-000-A
|
||||
```
|
||||
|
||||
The response is a JSON object, a sample of which can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/api/config-105612-000-A.json):
|
||||
|
||||
Information about the program is detailed in `$.data.attributes.metadata` and a list of available audio/subtitles combinations in `$.data.attributes.streams`. In our code such a combination is referred to as a _rendition_ (or _version_ in the CLI).
|
||||
|
||||
Every such _rendition_ has a reference to a _program index_ file in `.streams[i].url`
|
||||
This API returns a `ConfigPlayer` JSON object, a sample of which can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/api/). A list of available audio/subtitles combinations in `$.data.attributes.streams`. In our code such a combination is referred to as a _rendition_. Every such _rendition_ has a reference to a _program index_ file in `.streams[i].url`
|
||||
|
||||
### The _program index_ file
|
||||
|
||||
As defined in [HTTP Live Streaming](https://www.rfc-editor.org/rfc/rfc8216) (sample file can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/hls/program-105612-000-A_VOF-STMF_XQ.m3u8) or [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/hls/program-105612-000-A_VA-STA_XQ.m3u8)). This file show the a list of video _variants_ URIs (one per video resolution). Each of them has
|
||||
As defined in [HTTP Live Streaming](https://www.rfc-editor.org/rfc/rfc8216) (sample files can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/hls/)). This file show the a list of video _variants_ URIs (one per video resolution). Each of them has
|
||||
- exactly one video _track index_ reference
|
||||
- exactly one audio _track index_ reference
|
||||
- at most one subtitles _track index_ reference
|
||||
|
@ -120,23 +103,21 @@ Audio and subtitles tracks reference also include:
|
|||
|
||||
### The video and audio _track index_ file
|
||||
|
||||
As defined in [HTTP Live Streaming](https://www.rfc-editor.org/rfc/rfc8216) (a sample file can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/hls/audio-105612-000-A_aud_VA.m3u8) or [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/hls/video-105612-000-A_v1080.m3u8)). This file is basically a list of _segments_ (http ranges) the client is supposed to download in sequence.
|
||||
As defined in [HTTP Live Streaming](https://www.rfc-editor.org/rfc/rfc8216) (sample files can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/hls/). This file is basically a list of _segments_ (http ranges) the client is supposed to download in sequence.
|
||||
|
||||
### The subtitles _track index_ file
|
||||
|
||||
As defined in [HTTP Live Streaming](https://www.rfc-editor.org/rfc/rfc8216) (a sample file can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/hls/subtitles-105612-000-A_st_VA-ALL.m3u8)). This file references the actual file containing the subtitles [VTT](https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API) data.
|
||||
As defined in [HTTP Live Streaming](https://www.rfc-editor.org/rfc/rfc8216) (sample files can be found [here](https://git.afpy.org/fcode/delarte/src/branch/stable/samples/hls/)). This file references the actual file containing the subtitles [VTT](https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API) data.
|
||||
|
||||
## ⚙️The process
|
||||
|
||||
1. Figure out available _sources_ by:
|
||||
- fetching the _config_ API object for the _program identifier_
|
||||
- fetching all referenced _program index_.
|
||||
2. Select the desired _target_ based on _renditions_ and _variants_ codes.
|
||||
|
||||
3. Download video, audio and subtitles tracks content.
|
||||
- convert `VTT` subtitles to styled `SRT`
|
||||
|
||||
4. Feed the all the tracks to `ffmpeg` for multiplexing (or _muxing_)
|
||||
1. Fetch _program sources_ form the page pointed by the given URL
|
||||
2. Fetch _rendition sources_ from _config API_
|
||||
3. Filter _renditions_
|
||||
4. Fetch _variant sources_ from _HLS_ _program index_ files.
|
||||
5. Filter _variants_
|
||||
6. Fetch final target information and figure out output naming
|
||||
7. Download data streams (convert VTT subtitles to formatted SRT subtitles) and mux them with FFMPEG
|
||||
|
||||
## 📽️ FFMPEG
|
||||
|
||||
|
|
Loading…
Reference in New Issue