Llink:sources: Difference between revisions

From Lundman Wiki
No edit summary
No edit summary
 
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.
== Compiling Instructions ==


When compiling llink you need to chose if you want to use '''OpenSSL''', '''libdvdread''' and '''libdvdcss'''. Generally we have no reason to use SSL with '''link''' so I will skip this compile time step.


[[Image:llink.screen2.jpg|right|thumb|100px|llink-2.2.0 aqua skin]]
[[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]]


=== Unix, OsX and other native compiles ===


=== llink overview ===
The default should work.


# ./configure --without-openssl
# make
# file src/llink


* [[Llink:compatible_players|List of compatible players]]
The '''file''' command is not necessary, but it shows you where we expect the binary to end up.
==== Features ====


* Parses various video containers: vob, avi, ts, mkv, tp, mov, m2ts, evo.
  # ./configure --without-openssl
* Streams any file type the NMT player can handle: mp3, flac, jpeg, png etc.
# make
* Can play straight '''from rar files''': no more need to unrar your media. (Comes with special unrar-3.7.8-seek.)
* [[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>
If you want to build libdvdcss in statically (so there is just one binary, no shared library dependencies)


# cd libdvdcss-1.2.10
# ./configure --enable-static
# make
# cd ../
# cd llink-2.2.0
# ./configure --without-openssl --with-dvdcss-tree=`pwd`/../libdvdcss-1.2.10/
# make


=== Todo ===
=== Windows ===


In no particular order:
Download Visual Devstudio C++ 2010 from [http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx Microsoft] and install.  
* 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 ===
Download the OpenSSL for Windows '''dev''' package. [http://www.slproweb.com/products/Win32OpenSSL.html] Install it, usually at C:/OpenSSL but you can pick any place.


Feel free to contribute to the wiki documentation:
Setup a new Environment Variable, usually done in "My Computer / Properties / Advanced / Environment Variables". Create a new variable called '''SSL''', and set it to the location of your OpenSSL install. Ie, '''C:/OpenSSL/'''.


* [[Llink:user_guide|User guide]] for functions.
Download source package, and load the '''llink.vcproj''' inside "win32/" directory. Change the default project from '''libdirlist''' to '''llink''' and hit compile.
* [[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 ===
All file paths '''should''' be relative, but sometimes they are not :(


Note: if you are in luck, devices not listed here may share platform and architecture.
=== Cross Compile ===
Please report your success/failure.


* [[llink:windows|Windows]] 2.3.0 binaries for Windows OS
For example when compiling for the PCH A-100, you download the toolchain that applies to your arch. In this case, it installs into '''/usr/local/mips/''' with a '''gcc''' binary named as '''/usr/local/mips/bin/mipsel-linux-gcc'''.
* [[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)''
First make sure your PATH is updated so that it can find the executable.


=== Sources ===
# export PATH=$PATH:/usr/local/mips/bin/
# which mipsel-linux-gcc
/usr/local/mips/bin/mipsel-linux-gcc


* [[llink:sources|Sources]] Build your own for your platform. Includes autoconf for Unix and project files for Windows Visual Studio.
Great. If you want to have '''libdvdcss''' we need to compile that first. If you do not, you can skip this step.
* 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 ===
# cd src/libdvdcss-1.2.10/
# ./configure --host=mipsel-linux-uclibc --enable-static
# make
# file src/.libs/libdvdcss.*
src/.libs/libdvdcss.a:        current ar archive
src/.libs/libdvdcss.so.2.0.8: ELF 32-bit LSB shared object, MIPS, version 1 (SYSV), not stripped
(a few other files, but at least one shows its compiled as MIPS)


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 ===
Note that we have to use the full path '''/home/lundman/src/''' to get to the '''libdvdcss-1.2.10/src''' includes.


The [[llink:changelog|llink changelog]] contains the basic release notes history.
'''Compiling llink'''. Now it is time to compile '''llink''' itself. The version number might change of course.


# cd src/llink-2.2.0/
# ./configure --host=mipsel-linux --enable-static --without-openssl  --with-dvdcss-tree=/home/lundman/src/libdvdcss-1.2.10/
# make
# file src/llink
src/llink: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), statically linked, not stripped


=== Transcoding ===
Naturally, if you do not want '''libdvdcss''' go with the shorter line:


* [[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.
# ./configure --host=mipsel-linux --enable-static --without-openssl
# make
 
=== Known Compiling Issues ===
 
The main binary is linked against '''libdvdcss''' if requested, even though it need not be. You can omit "-ldvdcss" on the linking line of llink if it affects you.
 
On C200, if you compile -static, it will product the error:
 
../sysdeps/unix/sysv/linux/ia64/getpagesize.c:35: __getpagesize: Assertion `_rtld_global_ro._dl_pagesize != 0' failed.
 
So don't compile statically on C200.
 
Some systems get:
: undefined reference to `pthread_mutex_init'
 
and similar errors, change directory into the '''undvd''' directory, and copy'paste the final linking line and add "-lpthread" to it. This will be fixed in future.
 
On ReadyNAS, it will appear to hang after:
[root] listing '/c/media/' with flags 11
 
This is actually the 2nd process libdirlist core-dumping, in the call to getpwnam(). If llink is compiled statically. Please drop the -static.

Latest revision as of 06:30, 12 July 2012

Compiling Instructions

When compiling llink you need to chose if you want to use OpenSSL, libdvdread and libdvdcss. Generally we have no reason to use SSL with link so I will skip this compile time step.


Unix, OsX and other native compiles

The default should work.

# ./configure --without-openssl
# make
# file src/llink

The file command is not necessary, but it shows you where we expect the binary to end up.

# ./configure --without-openssl 
# make

If you want to build libdvdcss in statically (so there is just one binary, no shared library dependencies)

# cd libdvdcss-1.2.10
# ./configure --enable-static
# make
# cd ../
# cd llink-2.2.0
# ./configure --without-openssl --with-dvdcss-tree=`pwd`/../libdvdcss-1.2.10/
# make

Windows

Download Visual Devstudio C++ 2010 from Microsoft and install.

Download the OpenSSL for Windows dev package. [1] Install it, usually at C:/OpenSSL but you can pick any place.

Setup a new Environment Variable, usually done in "My Computer / Properties / Advanced / Environment Variables". Create a new variable called SSL, and set it to the location of your OpenSSL install. Ie, C:/OpenSSL/.

Download source package, and load the llink.vcproj inside "win32/" directory. Change the default project from libdirlist to llink and hit compile.

All file paths should be relative, but sometimes they are not :(

Cross Compile

For example when compiling for the PCH A-100, you download the toolchain that applies to your arch. In this case, it installs into /usr/local/mips/ with a gcc binary named as /usr/local/mips/bin/mipsel-linux-gcc.

First make sure your PATH is updated so that it can find the executable.

# export PATH=$PATH:/usr/local/mips/bin/
# which mipsel-linux-gcc
/usr/local/mips/bin/mipsel-linux-gcc

Great. If you want to have libdvdcss we need to compile that first. If you do not, you can skip this step.

# cd src/libdvdcss-1.2.10/
# ./configure --host=mipsel-linux-uclibc --enable-static
# make
# file src/.libs/libdvdcss.*
src/.libs/libdvdcss.a:        current ar archive
src/.libs/libdvdcss.so.2.0.8: ELF 32-bit LSB shared object, MIPS, version 1 (SYSV), not stripped
(a few other files, but at least one shows its compiled as MIPS)


Note that we have to use the full path /home/lundman/src/ to get to the libdvdcss-1.2.10/src includes.

Compiling llink. Now it is time to compile llink itself. The version number might change of course.

# cd src/llink-2.2.0/
# ./configure --host=mipsel-linux --enable-static --without-openssl  --with-dvdcss-tree=/home/lundman/src/libdvdcss-1.2.10/
# make
# file src/llink
src/llink: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), statically linked, not stripped

Naturally, if you do not want libdvdcss go with the shorter line:

# ./configure --host=mipsel-linux --enable-static --without-openssl
# make

Known Compiling Issues

The main binary is linked against libdvdcss if requested, even though it need not be. You can omit "-ldvdcss" on the linking line of llink if it affects you.

On C200, if you compile -static, it will product the error:

../sysdeps/unix/sysv/linux/ia64/getpagesize.c:35: __getpagesize: Assertion `_rtld_global_ro._dl_pagesize != 0' failed.

So don't compile statically on C200.

Some systems get:

: undefined reference to `pthread_mutex_init'

and similar errors, change directory into the undvd directory, and copy'paste the final linking line and add "-lpthread" to it. This will be fixed in future.

On ReadyNAS, it will appear to hang after:

[root] listing '/c/media/' with flags 11

This is actually the 2nd process libdirlist core-dumping, in the call to getpwnam(). If llink is compiled statically. Please drop the -static.