|
|
Line 1: |
Line 1: |
| '''llink is a media streamer''' that lets you play movies, view online trailers, browse images or play music over a network using the http protocol. It should work with most Syabas NMT hardware (NetworkedMediaTank middleware based players), such as the Popcorn Hour A- and B-series, HDX, iSTAR, Egreat a whole range of others, possibly even a couple of older ones like the LinkTheater. Some of the best reasons to run llink is that it can run on a great many platforms, including most popular NAS devices - even on the NMT player itself - and it can play media directly from RAR files. '''llink''' is also a '''UPNP MediaServer''', sometimes called DNLA/UPNP, and is able to talk to many UPNP devices.
| |
|
| |
|
| | == Transcoding == |
|
| |
|
| [[Image:llink.screen2.jpg|right|thumb|100px|llink-2.2.0 aqua skin]]
| | Transcoding with llink is a relatively new features (as of llink-2.3.2) which still needs a fair bit of work. Each device will need its own settings, and tweaks. |
| [[Image:llink.screen3.jpg|right|thumb|100px|llink-1.9.9 jukebox skin]]
| |
| [[Image:llink.screen4.jpg|right|thumb|100px|llink-2.2.0 clterm skin]]
| |
| [[Image:llink.screen5.jpg|right|thumb|100px|llink-2.2.0 nmt skin]]
| |
| [[Image:Kamaishi_skies.jpg|right|thumb|100px|llink-2.2.0 kamaishi_skies skin]]
| |
|
| |
|
| | As an example, Playstation 3 can not play ''.mkv'' files (as of 3.70 anyway). So we ask llink to change any file ending with ''.mkv'' into a different format. Since it is streaming (not writing the whole encoded file on disk before sending) what we send to the PS3 has to be a format capable of streaming. Like that of MPEG-TS. So we convert the file into a ''.mpg'' file, or rather, ''.mkv.mpg''. |
|
| |
|
| === llink overview ===
| | To detect that it is a PS3 that is talking to llink, and not a player that CAN handle ''.mkv'' files, we need to make some match rules. Usually, these operate on the ''User-Agent'' header in HTTP requests, or the ''SERVER:'' tag in UPNP's ''BrowseDirectChildren''. |
|
| |
|
| | To define where to find the transcode binary, I have been using ''ffmpeg'', but other programs could probably be used. In fact, one day one might be able to pass it to a "transcode -for ps3" program, wouldn't that be nice. |
|
| |
|
| * [[Llink:compatible_players|List of compatible players]]
| | TRANSCODE|FFMPEG=./ffmpeg |
| ==== Features ====
| |
|
| |
|
| * Parses various video containers: vob, avi, ts, mkv, tp, mov, m2ts, evo.
| | So, a '''TRANSCODE''' line might look something like: |
| * Streams any file type the NMT player can handle: mp3, flac, jpeg, png etc.
| |
| * Can play straight '''from rar files''': no more need to unrar your media. (Comes with special unrar-3.7.8-seek.)
| |
| * SSDP / UPnP discovery support (although minimal).
| |
| * [[Llink:skins|Skin support]]: make your own html templates or choose from pre-built.
| |
| * Simple iMDb querying to look up media information for Jukebox skins.
| |
| * Both HD and SD skins available.
| |
| * Light, tiny and clean code for Unix, OsX and Windows. Compiles to most platforms.
| |
| * Paginating: support to send listings in pages, with tags for Next/Prev.
| |
| * PlayAll cgi tag, and PlayAllFrom.
| |
| * External subtitles: subtitle files can be consolidated in one directory.
| |
| * libdvdnav support (and libdvdcss): provides basic playback of DVD .iso and .img files and from DVD drives.
| |
| * UDF 2.50 BD5-ISO support: provides basic playback of Bluray and HD-DVD.
| |
| * (External process support, like mencoder: incomplete).
| |
| * Can initiate custom shell scripts.
| |
| * Keep track of what you have already seen: small database for 'watched' media.
| |
| * UPNP MediaServer
| |
| * Transcoding Streaming support added to 2.3.2
| |
|
| |
|
| <paypal></paypal>
| | TRANSCODE|SERVER=*playstation*|ext=*.mkv|newext=.mpg|args=-threads 4 -vbsf h264_mp4toannexb -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -ac 2 -vcodec copy -async 2 |
|
| |
|
| | In this case, we detect a PS3 if the ''SERVER:'' tag contains "playstation" anywhere in it (case-insensitive). |
| | We only change files of ''.mkv'' type. |
| | We will produce new files of ''.mpg'' type. (MIME type is then based on ''.mpg'' and becomes ''video/mpeg''.) |
| | llink will execute '''./ffmpeg -d -i "http://localhost:8001/path/to/video.mkv" -threads 4 -vbsf h264_mp4toannexb -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -ac 2 -vcodec copy -async 2 -''' |
|
| |
|
| === Todo ===
| | As you can see, llink will add "-d -i $url" to the start, and " - " to the end, when it executes ''ffmpeg''. (FIXME, what if users want to run something other than ffmpeg?, let users use -i %s for input). |
|
| |
|
| In no particular order:
| | As far as transcoding goes, we do almost none. Video codec (h264) and audio of the ''.mkv'' file is copied without changing. We are just changing transport encapsulation from ''.mkv'' to ''mpeg-ts''. Very low CPU. |
| * Add a transparent FTP fs layer? this would be well nice if it worked with RAR. ''Be quite easy to do now as a 'unrar' replacement, 'unftp'.''
| |
| * Scraping/parsing of .NFO files (for media info).
| |
| * mms:// protocol support (libmms looks ok, but has own select() call, needs deeper inspection).
| |
| ** Implemented as unmms (unrar clone) but Stream support on PCH is lacking. Please bug Syabas about letting us set stream-mode
| |
| * Scrape/look for subtitles (ex. http://www.subtitlesource.org/title/tt0325710/).
| |
| * Proposed [[llink:menus|menus]]. Partly working since v2.2.0
| |
| * Configuration via web page.
| |
| * [http://www.teamavalaunch.com/ Avalaunch] style backgrounds. (Ex. fetch picture from [http://apod.nasa.gov/apod/archivepix.html NASA] every 30s and refresh) for mp3/playlists.
| |
| * Playing mp3s, and photos from RAR files don't appear to work.
| |
| * When playing music, allow to specify pictures to view.
| |
| * <s>Explore what more power we get from libdvdnav: choose audio tracks etc.</s> ALso, subtitle streams since C200 can display!
| |
| * Support [http://www.antp.be/software/moviecatalog ANT's Movie Database] .xml files.
| |
| ** Difficult. ANT did weird things like put entire DB in one giant XML, with no references to the disk path.
| |
| * Support [http://www.movienizer.com Movienizer's Movie Database] .xml files. Please provide sample .xml files for inspection.
| |
| * Remote skin support, e.g. invoke play from an iPhone or any other web enabled device.
| |
| * Apparently directories/files with "&" may not get a tick in the visited db. URL decoding?
| |
| * Make ticked directories become un-ticked when new files (unticked) files are added to the directory.
| |
| * Add NMJ sqlite DB support. Test MediaInfo source [http://www.lundman.net/ftp/test-mediainfo.c] is working.
| |
| * BUG: upnp missing filters/sortcriteria.
| |
|
| |
|
| === User guide and other documentation ===
| |
|
| |
|
| Feel free to contribute to the wiki documentation:
| | Below, insert any good transcoding options you might find. |
|
| |
|
| * [[Llink:user_guide|User guide]] for functions.
| | === Playstation 3 === |
| * [[Llink:Windows_installation|Installation guide]] for Windows.
| |
| * [[llink:Linux_installation|Installation guide]] for Linux.
| |
| * [[llink:macros|Macros]] supported by the HTML engine in llink.
| |
| * [[llink:Samples|Sample Files]] for configuring llink Jukebox xml.
| |
| * [[llink:Compiling|Compiling]] Guide for compiling, cross-compiling and compiling on Windows.
| |
|
| |
|
| === Download binaries === | | Change MKV to MPG, appears to work for Scene standard tv. |
| | TRANSCODE|SERVER=*playstation*|ext=*.mkv|newext=.mpg|args=-threads 4 -vbsf h264_mp4toannexb -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -ac 2 -vcodec copy -async 2 |
|
| |
|
| Note: if you are in luck, devices not listed here may share platform and architecture.
| |
| Please report your success/failure.
| |
|
| |
|
| * [[llink:windows|Windows]] 2.3.0 binaries for Windows OS
| | === XBox 360 === |
| * [[llink:osx|OsX]] 2.3.1 binaries for Apple Macintosh Os X. App Store submitted.
| |
| * [[llink:nmt|NMT]] 2.3.0 binaries for the Network Media Tank (Popcornhour A-100, C200 etc.) '''Please use CSI to install'''
| |
| * [[llink:linux|Linux]] 2.3.0 binaries for Linux OS, Intel (add more if you can)
| |
| * [[llink:opensolaris|OpenSolaris]] 2.2.5 binaries for OpenSolaris (Solaris 11) OS, Intel
| |
| * [[llink:readynas|ReadyNAS]] 2.2.2 binaries and instructions for Infrant/Netgear ReadyNAS
| |
| * [[llink:synology|Synology]] 2.2.4 binaries and older, instructions for Synology NAS (ppc and arm)
| |
| * [[llink:asus_wl-500gl|Asus WL-500GL]] binaries for Asus router running OpenWrt
| |
| * [[llink:Asus WL-500g Premium|Asus WL-500g Premium]] binaries for Asus router running Oleg's firmware
| |
| * [[llink:landisk|landisk]] binaries for IO-Data landisk uhdl-av, cpu-SH4
| |
| * "[[llink on a stick]]" let's you run llink from a USB stick or external USB drive (unmaintained)
| |
| * [[Llink:dlink_dns323|D-Link DNS-323]] binaries and instructions for D-Link NAS
| |
| * [http://forum.excito.net/viewtopic.php?p=6195 Bubba server] 2.2.0 Linux compile instructions (no binaries)
| |
| * [http://www.azboxworld.com/index.php?page=Thread&postID=66741#post66741 AzBox HD] 2.2.0 plugin binaries
| |
| * [[llink:buffalo|Buffalo]] 2.2.3 binaries and instructions for Buffalo Linkstation (arm)
| |
| * [[llink:Thecus|Thecus]] N5200-N0503 2.2.2 binaries (intel Atom)
| |
| * [[llink:qnap|QNAP]] 2.2.4 binaries for QNAP TS-109/209 series (arm)
| |
|
| |
|
| ''(Compilers, you can upload new versions directly in the wiki, see Synology page as example)''
| |
|
| |
|
| === Sources === | | === Apple ipad === |
|
| |
|
| * [[llink:sources|Sources]] Build your own for your platform. Includes autoconf for Unix and project files for Windows Visual Studio.
| |
| * libdvdcss sources are: [http://download.videolan.org/pub/libdvdcss/1.2.10/ libdvdcss-1.2.10.tar.gz]
| |
| * [[llink:mime|mime.types]] defining MIME types, generally not needed, only if you use it with a browser.
| |
| * <s>libdvdnav sources are: [http://www.mplayerhq.hu/MPlayer/releases/dvdnav/ libdvdnav-4.1.2]</s> ''libdvdnav sources now included.''
| |
| * <s>libdvdread with MSVC++ Project files: [http://www.lundman.net/ftp/llink/libdvdread-0.9.7-win32.tar.gz</s>
| |
| * <s>libdvdread sources for llink v2.0.8 to 2.1.1 only are: [http://www.dtek.chalmers.se/groups/dvd/downloads.shtml libdvdread-0.9.7.tar.bz]</s>
| |
|
| |
|
| === Known issues === | | === Apple ipad 2 === |
|
| |
|
| Although llink is capable of many things, there are limitations that should be known to users.
| |
| Please read here for details: [[Llink:Known_issues]]
| |
|
| |
|
| === Changelog === | | === Apple iphone === |
|
| |
|
| The [[llink:changelog|llink changelog]] contains the basic release notes history.
| |
|
| |
|
| | === Google Android === |
|
| |
|
| === Transcoding ===
| | Tested with ''Softmedia Player Trial'' and ''Mirage''. |
|
| |
|
| * [[llink:transcoding|Transcoding]] is a large subject, full of endless tweaks and hacks. I am hoping there are users willing to help find the correct settings that will work for most. | | TRANSCODE|USERAGENT=*android*|ext=*.avi|newext=.mpg|args=-acodec libmp3lame -ar 48000 -ab 128k -ac 2 -s 720x480 -vcodec libx264 -b 1200k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 1 -refs 3 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 1200k -maxrate 1200k -bufsize 1200k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 16:9 -r 30 -g 90 -async 2 -f mpegts |
| | Almost works, plays fine for a while, but drops to 5 fps or so at times. Appears not to recover. |
| | |
| | |
| | === More here === |
Transcoding
Transcoding with llink is a relatively new features (as of llink-2.3.2) which still needs a fair bit of work. Each device will need its own settings, and tweaks.
As an example, Playstation 3 can not play .mkv files (as of 3.70 anyway). So we ask llink to change any file ending with .mkv into a different format. Since it is streaming (not writing the whole encoded file on disk before sending) what we send to the PS3 has to be a format capable of streaming. Like that of MPEG-TS. So we convert the file into a .mpg file, or rather, .mkv.mpg.
To detect that it is a PS3 that is talking to llink, and not a player that CAN handle .mkv files, we need to make some match rules. Usually, these operate on the User-Agent header in HTTP requests, or the SERVER: tag in UPNP's BrowseDirectChildren.
To define where to find the transcode binary, I have been using ffmpeg, but other programs could probably be used. In fact, one day one might be able to pass it to a "transcode -for ps3" program, wouldn't that be nice.
TRANSCODE|FFMPEG=./ffmpeg
So, a TRANSCODE line might look something like:
TRANSCODE|SERVER=*playstation*|ext=*.mkv|newext=.mpg|args=-threads 4 -vbsf h264_mp4toannexb -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -ac 2 -vcodec copy -async 2
In this case, we detect a PS3 if the SERVER: tag contains "playstation" anywhere in it (case-insensitive).
We only change files of .mkv type.
We will produce new files of .mpg type. (MIME type is then based on .mpg and becomes video/mpeg.)
llink will execute ./ffmpeg -d -i "http://localhost:8001/path/to/video.mkv" -threads 4 -vbsf h264_mp4toannexb -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -ac 2 -vcodec copy -async 2 -
As you can see, llink will add "-d -i $url" to the start, and " - " to the end, when it executes ffmpeg. (FIXME, what if users want to run something other than ffmpeg?, let users use -i %s for input).
As far as transcoding goes, we do almost none. Video codec (h264) and audio of the .mkv file is copied without changing. We are just changing transport encapsulation from .mkv to mpeg-ts. Very low CPU.
Below, insert any good transcoding options you might find.
Playstation 3
Change MKV to MPG, appears to work for Scene standard tv.
TRANSCODE|SERVER=*playstation*|ext=*.mkv|newext=.mpg|args=-threads 4 -vbsf h264_mp4toannexb -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -ac 2 -vcodec copy -async 2
XBox 360
Apple ipad
Apple ipad 2
Apple iphone
Google Android
Tested with Softmedia Player Trial and Mirage.
TRANSCODE|USERAGENT=*android*|ext=*.avi|newext=.mpg|args=-acodec libmp3lame -ar 48000 -ab 128k -ac 2 -s 720x480 -vcodec libx264 -b 1200k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 1 -refs 3 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 1200k -maxrate 1200k -bufsize 1200k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 16:9 -r 30 -g 90 -async 2 -f mpegts
Almost works, plays fine for a while, but drops to 5 fps or so at times. Appears not to recover.
More here