Synology DS214Play - Hardware transcoding test: help needed
Posted: Sun Jun 01, 2014 11:44 am
After a frankly ridiculous amount of effort I think I have managed to build the heavily modified FFmpeg 2.0.2 from Synology's source code with hardware transcoding support via the Intel Streaming Media Driver for Evansport CPUs, with the additional stuff we need for Serviio (librtmp, libass, DTS support etc.). It has been so difficult because the dependency chain is vast, the modifications are hacky, and unfortunately many of the libraries are older versions that are very difficult to successfully compile. This difficulty is probably the reason it hasn't been implemented before, and also that the FFmpeg developers apparently have no interest in integrating support for something that's not really open source. The API and the headers are open source but the code remains proprietary, hidden away inside some binaries (libffmpeg_plugin.so, libismd_core.so, libismd_viddec.so, etc.). It's a shame, because QuickSync transcoding is in the same sorry state, even though it could be used to save a lot of power on any post-Sandy Bridge Intel CPU.
As well as providing full HD H.264 encoding in hardware this FFmpeg build should also manage simultaneous hardware decoding of VC-1, H.264, MPEG-4, MPEG-2 and AAC. It looks like the processor can also encode and decode most variants of AC3 and DTS but Synology have not hacked that into their sources.
However, since I don't own one of these products I need your help...
I will need an SSH connection to a DS214Play please to carry out some basic checks. On the Serviio side I believe no changes will be required. I will just use an ffmpeg wrapper to substitute commands (so '-c:v libx64' becomes '-c:v libh264smd' etc.). Send me a pm if you want to help!
And for the skeptics, here is my proof (it's running on a Ubuntu VM with all the libraries built locally, including the ones that are included with DSM). Note the message at the top about the platform_config driver - I guess that's how it activates the hardware:
If it works, it will be phenomenal. ~15% CPU load on an Intel Atom CE while doing 1080p transcode from VC-1 to H.264 apparently:
http://www.anandtech.com/show/8020/syno ... ne-right/9
As well as providing full HD H.264 encoding in hardware this FFmpeg build should also manage simultaneous hardware decoding of VC-1, H.264, MPEG-4, MPEG-2 and AAC. It looks like the processor can also encode and decode most variants of AC3 and DTS but Synology have not hacked that into their sources.
However, since I don't own one of these products I need your help...
I will need an SSH connection to a DS214Play please to carry out some basic checks. On the Serviio side I believe no changes will be required. I will just use an ffmpeg wrapper to substitute commands (so '-c:v libx64' becomes '-c:v libh264smd' etc.). Send me a pm if you want to help!
And for the skeptics, here is my proof (it's running on a Ubuntu VM with all the libraries built locally, including the ones that are included with DSM). Note the message at the top about the platform_config driver - I guess that's how it activates the hardware:
- Code:
patters@ubuntu14:~/Downloads/i686/syno/ffmpeg-2.0.2-ismd$ ./ffmpeg
Error opening /proc/platform_config
Please ensure that:
-The platform_config driver is properly loaded
ffmpeg version 2.0.2-SMD_enabled_with_DTS_remux_fix-compiled_by_patters_for_Serviio Copyright (c) 2000-2013 the FFmpeg developers
built on Jun 1 2014 11:51:05 with gcc 4.6.3 (crosstool-NG 1.17.0)
configuration: --arch=x86 --cpu=atom --enable-cross-compile --cross-prefix=/usr/local/i686-pc-linux-gnu/bin/i686-pc-linux-gnu- --target-os=linux --prefix=/usr/local/i686-pc-linux-gnu --enable-shared --disable-static --enable-pic --disable-ffplay --disable-ffserver --disable-debug --enable-pthreads --enable-libmp3lame --enable-librtmp --enable-libass --enable-libx264 --enable-libh264_smd --enable-smd --enable-gpl --enable-gnutls --pkg-config=pkg-config --extra-version=SMD_enabled_with_DTS_remux_fix-compiled_by_patters_for_Serviio
libavutil 52. 38.100 / 52. 38.100
libavcodec 55. 18.102 / 55. 18.102
libavformat 55. 12.100 / 55. 12.100
libavdevice 55. 3.100 / 55. 3.100
libavfilter 3. 79.101 / 3. 79.101
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
If it works, it will be phenomenal. ~15% CPU load on an Intel Atom CE while doing 1080p transcode from VC-1 to H.264 apparently:
http://www.anandtech.com/show/8020/syno ... ne-right/9