Hallo Genu29,
I've the same TV as you. In parallel I've a Panasonic HDD Recorder. This Recorder is much better for DLNA support regarding the diffrent formats. This TV is here a little bit Horror
. Nevertheless I tried to find a way to increase the support for the different video Containers (My wife is the usage of the Panasonic for this functionallity to complex...). Now, after some fitghing I got the breakthrough (I'm a beginner for Linux).
The Approach was to get video films working with "äöü...", blanks in the filenames and files with a framerate of 50FPS (not supported by the TV)
My Serviio installation is no a a DS716+, Serviio 1.8.
First I put the DS716 to UTF-8 to work with the Umlauts (Google was here my friend). This was very helpful:
(
http://www.synology-forum.de/showthread ... -auf-UTF-8)
I tried everything with the "Philips Profil 2009". Some files were working directly. But most of them with transcoding.
Then, additionally I found out that the files with the blanks were not running with FFMPEG for transcoding and therefore not entered into the libary of Serviio. After a couple of hours and checking this forum and the Internet the following idea was born.
Build of a "own wrapper script + adapted profil". And finally, Yes this works fine for me.
Profil Information:
- Code:
<!-- ########################################################################################################################### -->
<Profile id="20Syn" name="Philips 46PFL8605K02 Synology" extendsProfileId="1">
<!-- <Profile id="20Syn" name="Philips 46PFL8605K02 Synology" extendsProfileId="plps2010"> -->
<Detection>
<HttpHeaders>
<X-AV-Client-Info>.*Philips TV*</X-AV-Client-Info>
</HttpHeaders>
</Detection>
<Transcoding>
<Video targetContainer="mpegts" targetVCodec="mpeg2video" maxVBitrate="99999" targetACodec="ac3" aBitrate="999" forceInheritance="true">
<!-- Matches Panasonic G70 -->
<Matches container="mp4" vCodec="h264" profile="high" />
<!-- Matches .mov from Canon-Camera -->
<Matches container="mp4" vCodec="h264" profile="c_baseline" />
<!-- others 264 -->
<Matches container="mp4" vCodec="h264" profile="baseline" />
<Matches container="mp4" vCodec="h264" profile="main" />
<Matches container="mp4" vFourCC="avc1" />
<!-- Catch any remaining unsupported video codecs -->
<Matches container="avi" vFourCC="div3,div4,div5,divx,dm4v,dx50,xvid,avc1" />
</Video>
<Video targetContainer="mpeg" targetACodec="ac3" targetVCodec="mpeg2video">
<Matches container="ogg" />
</Video>
<!-- if audio is DTS, audio must be transcoded -->
<Video targetContainer="mpegts" targetACodec="ac3">
<Matches container="*" aCodec="dca" />
<Matches container="*" aCodec="dts-hd" />
</Video>
<Video targetContainer="mpeg" targetACodec="ac3" targetVCodec="mpeg2video" DAR="16:9">
<Matches container="matroska" />
<Matches container="mpegts" />
<Matches container="mpegvideo" />
<Matches container="asf" />
<Matches container="ogg" />
<Matches container="flv" />
<Matches container="rm" />
<!-- if audio different to ac3, must be transcoded -->
<Matches container="mpeg" aCodec="aac" />
<Matches container="mpeg" aCodec="mp3" />
<Matches container="mpeg" aCodec="dca" />
<Matches container="mpeg" aCodec="dts-hd" />
</Video>
</Transcoding>
<AudioTrackRemux>
<Video targetContainer="mpeg" targetVCodec="mpeg2video" targetACodec="ac3" DAR="16:9">
<Matches container="*" vCodec="h264" />
<Matches container="*" vCodec="mpeg2video" />
<Matches container="*" vCodec="mpeg1video" />
<Matches container="*" vCodec="mpeg4" />
<Matches container="*" vCodec="msmpeg4" />
<Matches container="*" vCodec="vc1" />
</Video>
</AudioTrackRemux>
</Profile>
<!-- ########################################################################################################################### -->
In the profil I use: maxVBitrate="99999" aBitrate="999" as special indikator to react on. As example FPS correction.
My own wrapper-script then changes the parameters for the FFMPEG call in the command-line given by Serviio. One point is the adaptation of the input filename. The filename is put into " ' " that "blanks" are ok, the FPS rate is adapted if it is 50fps and the bitrate for the video transcoding is set to a value which makes the transcoding on the DS716II+ possible to view on the TV without nearly any jiggle (just at the beginning).
- Code:
#!/bin/sh
blank=" ."
FFMPEG_BIN="ffmpeg"
FOLDER="`dirname $0`"
COMMANDLINE=$@
NEW_COMMANDLINE=$@
#NEW_COMMANDLINE="-i /volume1/video/TeastÄ 2016-04-03 11-35.mp4"
datum=`date +%Y-%m-%d-%H-%M`
LogFile='/volume1/@appstore/Serviio/bin/ffmpegWrapper.log'
LogEcho=$datum
#-----------------------------------------------------------------
# Identifier for video files (array with 'endmarker' as last item!!)
# Attention: Extension with 1 blank afterwards is required !!!!
#-----------------------------------------------------------------
Filenamen=(".mov " ".mp4 " ".flv " ".wmv " ".gp3" ".mpg " ".mpeg "
".mkv " ".avi " ".ogg " ".mp3 " ".rm " ".asf "
".jpg " ".raw " ".mpc " ".ape " ".flac " ".wav " ".dsf "
".lpcm " ".xvid " ".vob "
"endmarker")
#-----------------------------------------------------------------
# Identifier out of the Profile for the TV"
# maxVBitrate="99999" + targetACodec="ac3" aBitrate="999"
#-----------------------------------------------------------------
SuchString1="-b:v 99999k -maxrate:v 99999k -bufsize:v 99999k"
# for the same bitrate as input file
#Ersetzen1="-qscale:v 1"
#set special bitrate : this one works with ds716+
Ersetzen1="-b:v 15000k -maxrate:v 15000k -bufsize:v 15000k"
#Bitrate for Audio
SuchString2="-b:a:0 999k"
Ersetzen2="-b:a:0 388k"
#Framerate adaptation
SuchString3="-r 50"
#If the tv does not support a fps of 50
Ersetzen3="-r 49"
# Adaptation for filenames with 'blanks"
SuchString4="-i /"
Ersetzen4="-i '/"
# Check Log-File size
#----------------------------------------------
typeset -i maxKB
typeset -i FileGroesse
maxKB=200*1024
if [ ! -f "$LogFile" ]; then
dummy="Dummyanwesiung"
else
echo Hallo $FileGroesse
FileGroesse=$(stat -c %s "$LogFile")
if [ $FileGroesse -gt $maxKB ]; then
LogFile2=${LogFile/".log"/"1.log"}
cp -f "$LogFile" "$LogFile2"
rm -f "$LogFile"
fi
fi
#echo $FileGroesse $maxKB
#exit
# Codec values adaptation
#--------------------------------------------------------
if [[ $NEW_COMMANDLINE =~ $SuchString1 ]]; then
LogEcho="${LogEcho}String 1 gefunden:$SuchString1"
#echo {String 1 gefunden !! \n$SuchString1} >> $LogFile
if [[ $NEW_COMMANDLINE =~ $SuchString2 ]]; then
LogEcho="${LogEcho}-String 2 gefunden:$SuchString2"
#echo {String 2 gefunden !! \n$SuchString2} >> $LogFile
# Setzen der Standardwerte für die Video-Bitrate und Audio-Bitrate
#---------------------------------------------------------------------
NEW_COMMANDLINE=${NEW_COMMANDLINE/"$SuchString1"/"$Ersetzen1"}
NEW_COMMANDLINE=${NEW_COMMANDLINE/"$SuchString2"/"$Ersetzen2"}
# Bildwiederholfrequenz anpassen auf XX fps
#---------------------------------------------------------------------
if [[ $NEW_COMMANDLINE =~ $SuchString3 ]]; then
NEW_COMMANDLINE=${NEW_COMMANDLINE/"$SuchString3"/"$Ersetzen3"}
LogEcho="${LogEcho}-FPS angepasst:$Ersetzen3"
fi
fi
fi
echo $LogEcho >> $LogFile
#---------------------------------------------------------------------
# Input filename quotes-start
#---------------------------------------------------------------------
if [[ $NEW_COMMANDLINE =~ $SuchString4 ]]; then
LogEcho="FileInput -i: found"
#echo {String 4 gefunden !! \n$SuchString4} >> $LogFile
#norming to lower case, for case detection of Array
#---------------------------------------------------
tmpString=$NEW_COMMANDLINE
declare -l tmpString
tmpString=$tmpString$blank
# need for using the array values including blanks
IFS=""
for value in ${Filenamen[*]}
do
if [[ $tmpString =~ $value ]]; then
laenge="${#value}"
# gets the position of the found file extension
#------------------------------------------------
x="${tmpString%%$value*}"
[[ "$x" = "$1" ]] && pos=0 || pos="${#x}"
# extracts the origin file-extension from the command-line (kind of mid$)
#------------------------------------------------
suchstring_org="${NEW_COMMANDLINE:$pos:$laenge-1}"
# end-quote implementation
#------------------------------------------------
NEW_COMMANDLINE=${NEW_COMMANDLINE/"$suchstring_org"/"$suchstring_org"\'}
# start-quote implementation
#------------------------------------------------
NEW_COMMANDLINE=${NEW_COMMANDLINE/"$SuchString4"/"$Ersetzen4"}
break
fi
done
fi
LogEcho="${LogEcho}-Fileanalyse done: $value Position: $pos Laenge: $laenge OrgString: $suchstring_org"
if [[ "endmarker" =~ $value ]]; then
echo $datum Fehlerhafte Datei >> $LogFile
fi
echo "$LogEcho" >> $LogFile
echo AlteVersion: {"$COMMANDLINE"} >> $LogFile
echo NeueVersion: {"$NEW_COMMANDLINE"} >> $LogFile
# echo NeueVersion: $NEW_COMMANDLINE
# exit 0
#-----------------------------------------------------------------
#need to use eval here otherwise the quotes aren't handled properly
#http://fvue.nl/wiki/Bash:_Why_use_eval_with_variable_expansion%3F
# closing old transcoding Threads
killall ffmpeg64
# start transcoding
eval ${FOLDER}/${FFMPEG_BIN} $NEW_COMMANDLINE
#return FFmpeg status
exit $?
This wrapper, I put into the folder of the ffmpeg file (/...program-path/bin) and I set the execution flag.
In the serviio.sh script I adapted the Java-calling with the following: -Dffmpeg.location=$SERVIIO_HOME/bin/'own wrapper name' -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8"
Now it's really nice running and my wife is totally pleased with the solution
I hope this could help you for your TV (if you've still this open question)..
Known BUG:
* Still no identification of the Philips TV in the Status Screen "NMR" --> Looks like the response of the DLNA-Request
* Only one Video could be played at the same time, wrapper-script is killing all running ffmpeg processes during call
I like the Server very much
. I tried before "Twonky" and it was (for me) not possible to get the transcoding running and UMS was not running fine on the DS716II+. Personal the Serviio adaptation was more understandable and logic for me (Kind of old school basic programming).
Please, if there are hints for optimisation post them to me
Do you have any idea if it is possible to view video and pictures on one folder at the same time (like a vacation folder including pictures and videos as presentation for "visitors") ?
Cheers
OS
( I hope this post is understandable, I'm from Germany and I think it's a little typical GermanEnglish
)