Custom MPEG-TS Input » History » Version 20
Jaroslav Kysela, 2014-11-20 08:28
1 | 1 | Jaroslav Kysela | h1. Custom MPEG-TS Input |
---|---|---|---|
2 | |||
3 | h2. Requirement |
||
4 | |||
5 | 2 | Jaroslav Kysela | The TVHeadend 3.9.2100 and up for the pipe:// URL support. Note that TVHeadend expects the input in the raw MPEG-TS format with correct PAT/PMT tables. |
6 | 1 | Jaroslav Kysela | |
7 | h2. IPTV URLs |
||
8 | |||
9 | 18 | Jaroslav Kysela | **Note: Always try the command without pipe:// prefix on standard command line, if it works with a stdout redirection to a file!!** |
10 | 5 | Jaroslav Kysela | |
11 | 11 | Jaroslav Kysela | h3. Streaming from a file |
12 | |||
13 | 15 | Jaroslav Kysela | Use option -re for the input specification to stream the file at native frame rate. |
14 | 11 | Jaroslav Kysela | |
15 | <pre> |
||
16 | -re (input) |
||
17 | |||
18 | Read input at native frame rate. Mainly used to simulate a grab |
||
19 | device. or live input stream (e.g. when reading from a file). |
||
20 | Should not be used with actual grab devices or live input streams |
||
21 | (where it can cause packet loss). By default ffmpeg attempts to |
||
22 | read the input(s) as fast as possible. This option will slow down |
||
23 | the reading of the input(s) to the native frame rate of the |
||
24 | input(s). It is useful for real-time output (e.g. live streaming). |
||
25 | </pre> |
||
26 | |||
27 | 10 | Nicolas C | h3. Internet Radios |
28 | 1 | Jaroslav Kysela | |
29 | 10 | Nicolas C | Unfortunately ffmpeg can't set the right header for Radios, so they'll show up as TV Channels :(. So while its not ideal, you can show a static image (the Radio Logo maybe?) |
30 | |||
31 | 1 | Jaroslav Kysela | <pre> |
32 | 11 | Jaroslav Kysela | pipe:///usr/bin/ffmpeg -loglevel fatal -loop 1 -y -i /path/to/image.png -re -i INPUTLINK |
33 | -vcodec libx264 -acodec copy -mbd rd -copyinkf -flags +ilme+ildct -fflags +genpts |
||
34 | -metadata service_provider=RADIOPROVIDER -metadata service_name=RADIONAME -tune zerolatency -f mpegts pipe:1 |
||
35 | 1 | Jaroslav Kysela | </pre> |
36 | 10 | Nicolas C | |
37 | 20 | Jaroslav Kysela | An alternative is to patch ffmpeg to allow the service type modification in the SDT table (radio is 2) - https://trac.ffmpeg.org/ticket/4118 . |
38 | 19 | Jaroslav Kysela | |
39 | 11 | Jaroslav Kysela | h3. Transcoding |
40 | 10 | Nicolas C | |
41 | 1 | Jaroslav Kysela | YMMV with different ffmpeg/libav versions. In Red Hat's (Fedora/Centos) build of ffmpeg, aac transcoding is experimental, so you have to enable -strict -2 |
42 | |||
43 | 10 | Nicolas C | <pre> |
44 | 13 | Jaroslav Kysela | pipe:///usr/bin/ffmpeg -loglevel fatal -i INPUTLINK -vcodec libx264 -acodec aac -strict -2 -mbd rd -copyinkf -flags +ilme+ildct -fflags +genpts |
45 | 11 | Jaroslav Kysela | -metadata service_provider=STRING -metadata service_name=STRING -f mpegts -tune zerolatency pipe:1 |
46 | 10 | Nicolas C | </pre> |
47 | |||
48 | Try to transcode as little as possible, since it will impact your cpu usage. And if you're using tvheadend to re-transcode... well.. |
||
49 | |||
50 | So if your channel already has aac audio, maybe you only need to transcode the video stream. |
||
51 | |||
52 | <pre> |
||
53 | 13 | Jaroslav Kysela | pipe:///usr/bin/ffmpeg -loglevel fatal -i INPUTLINK -vcodec libx264 -acodec copy -mbd rd -copyinkf -flags +ilme+ildct -fflags +genpts |
54 | 6 | Jaroslav Kysela | -metadata service_provider=STRING -metadata service_name=STRING -f mpegts -tune zerolatency pipe:1 |
55 | 7 | Jaroslav Kysela | </pre> |
56 | 6 | Jaroslav Kysela | |
57 | 14 | Jaroslav Kysela | h3. Direct copy (container only change) |
58 | 8 | Jaroslav Kysela | |
59 | 6 | Jaroslav Kysela | <pre> |
60 | 1 | Jaroslav Kysela | pipe:///usr/bin/ffmpeg -loglevel fatal -i INPUTLINK -vcodec copy -acodec copy -metadata service_provider=STRING |
61 | -metadata service_name=STRING -f mpegts -tune zerolatency pipe:1 |
||
62 | </pre> |
||
63 | |||
64 | 16 | Nicolas C | h3. Cookie-protected HLS Streams |
65 | ffmpeg is not the smartest cookie in the jar handling cookies (pun intended). So while you can insert cookies using the -cookie option, and alternative option is using Squid with request_add_header option |
||
66 | |||
67 | <pre> |
||
68 | request_header_add Cookie 'YOUR COOKIE CONTENT' all |
||
69 | </pre> |
||
70 | |||
71 | The trailing all refers to the ACL it applies to. Please read the full documentation on how to implement this on the Squid Website (http://www.squid-cache.org/Doc/config/request_header_add/) |
||
72 | 17 | Nicolas C | |
73 | 1 | Jaroslav Kysela | h2. Other solutions (HTTP proxy) |
74 | |||
75 | 10 | Nicolas C | |
76 | 11 | Jaroslav Kysela | "A simple ffmpeg HTTP proxy using nodejs":https://github.com/Jalle19/node-ffmpeg-mpegts-proxy |