Custom MPEG-TS Input » History » Version 10
Nicolas C, 2014-11-18 11:40
| 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 | 5 | 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 | |||
| 11 | 10 | Nicolas C | h3. Internet Radios |
| 12 | 1 | Jaroslav Kysela | |
| 13 | 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?) |
| 14 | |||
| 15 | 1 | Jaroslav Kysela | <pre> |
| 16 | 10 | Nicolas C | pipe:///usr/bin/ffmpeg -loglevel fatal -nostdin -loop 1 -y -i /path/to/image.png -re -i INPUTLINK -vcodec libx264 -acodec copy -mbd rd -copyinkf -flags +ilme+ildct -fflags +genpts -metadata service_provider=RADIOPROVIDER -metadata service_name=RADIONAME -tune zerolatency -f mpegts pipe:! |
| 17 | </pre> |
||
| 18 | |||
| 19 | h3. Transcoding. |
||
| 20 | |||
| 21 | 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 |
||
| 22 | |||
| 23 | <pre> |
||
| 24 | pipe:///usr/bin/ffmpeg -loglevel fatal -nostdin -i INPUTLINK -vcodec libx264 -acodec aac -strict -2 -copyinkf -flags +ilme+ildct -fflags +genpts -metadata service_provider=STRING -metadata service_name=STRING -f mpegts -tune zerolatency pipe:1 |
||
| 25 | </pre> |
||
| 26 | |||
| 27 | Try to transcode as little as possible, since it will impact your cpu usage. And if you're using tvheadend to re-transcode... well.. |
||
| 28 | |||
| 29 | So if your channel already has aac audio, maybe you only need to transcode the video stream. |
||
| 30 | |||
| 31 | <pre> |
||
| 32 | pipe:///usr/bin/ffmpeg -loglevel fatal -nostdin -i INPUTLINK -vcodec libx264 -acodec copy -copyinkf -flags +ilme+ildct -fflags +genpts |
||
| 33 | 6 | Jaroslav Kysela | -metadata service_provider=STRING -metadata service_name=STRING -f mpegts -tune zerolatency pipe:1 |
| 34 | </pre> |
||
| 35 | 7 | Jaroslav Kysela | |
| 36 | 6 | Jaroslav Kysela | h3. Direct copy |
| 37 | |||
| 38 | 8 | Jaroslav Kysela | <pre> |
| 39 | 6 | Jaroslav Kysela | pipe:///usr/bin/ffmpeg -loglevel fatal -i INPUTLINK -vcodec copy -acodec copy -metadata service_provider=STRING |
| 40 | 1 | Jaroslav Kysela | -metadata service_name=STRING -f mpegts -tune zerolatency pipe:1 |
| 41 | </pre> |
||
| 42 | |||
| 43 | h2. Other solutions (HTTP proxy) |
||
| 44 | |||
| 45 | 10 | Nicolas C | |
| 46 | "A simple ffmpeg HTTP proxy using nodejs": https://github.com/Jalle19/node-ffmpeg-mpegts-proxy |