mediatomb PhilipsTV (DLNA) транск...

Igor
2011-02-05
2013-05-30
  • Igor
    Igor
    2011-02-05

    3-тий день ищу ответы на свои вопросы, но так и не разобрался.
    По порядку:
    Система на базе Intel Core 2 Duo E6750 2,66 (lga 775) 4Gb RAM/HDD 1Tb WD Green, Lan Gigabit eth.
    Ubuntu server 10.10
    app: Webmin, Samba, vsFtpd, rTorrent+ruTorrent, Mediatomb

    Имеется телевизор Philips 42PFL8684H 42" Full HD 1080p (DLNA) у него интерфейс 100Мб/с
    Телек с сервером соединен через гигабитный коммутатор.
    Для информации: Со своего компа на сервер закачивал (по samba) видеофайлы с максимальной скоростью до 100 Мбайт/с. Это практически потолок гигабитной сетки.

    mediatomb установил достаточно просто и большая часть "фильмотеки", лежащей на сервере (ext4) нормально воспроизводится телеком. Но не все форматы он умеет воспроизводить. Решил разобраться с возможностями транскодирования. Установил на сервер дополнительно ffmpeg, почитал http://mediatomb.cc/dokuwiki/transcoding:transcoding, подправил конфиг и создал скрипт.
    mediatomb запускается от пользователя mediatomb

    <?xml version="1.0" encoding="UTF-8"?>
    <config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/2 http://mediatomb.cc/config/2.xsd"><!-
         Read /usr/share/doc/mediatomb-common/README.gz section 6 for more
         information on creating and using config.xml configration files.
        ->
      <server>
        <ui enabled="yes" show-tooltips="yes">
          <accounts enabled="no" session-timeout="30">
            <account user="mediatomb" password="mediatomb"/>
          </accounts>
        </ui>
        <port>49152</port>
        <name>MediaTomb</name>
        <interface>eth0</interface>
        <udn>uuid:095d93f8-343a-4627-bf86-c44db2818bc7</udn>
        <home>/var/lib/mediatomb</home>
        <webroot>/usr/share/mediatomb/web</webroot>
        <storage caching="yes">
          <sqlite3 enabled="yes">
            <database-file>mediatomb.db</database-file>
          </sqlite3>
          <mysql enabled="no">
            <host>localhost</host>
            <username>mediatomb</username>
            <database>mediatomb</database>
          </mysql>
        </storage>
        <protocolInfo extend="yes"/><!- For PS3 support change to "yes" -><!-
           Uncomment the lines below to get rid of jerky avi playback on the
           DSM320 or to enable subtitles support on the DSM units
        ->
        <custom-http-headers>
          <add header="X-User-Agent: redsonic"/>
          <add header="transferMode.dlna.org: Streaming"/>
          <add header="contentFeatures.dlna.org: DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000"/>
        </custom-http-headers>
        <!-
        <manufacturerURL>redsonic.com</manufacturerURL>
        <modelNumber>105</modelNumber>
        -><!- Uncomment the line below if you have a Telegent TG100 -><!-
           <upnp-string-limit>101</upnp-string-limit>
        ->
        <extended-runtime-options>
          <ffmpegthumbnailer enabled="yes">
            <thumbnail-size>128</thumbnail-size>
            <seek-percentage>5</seek-percentage>
            <filmstrip-overlay>yes</filmstrip-overlay>
            <workaround-bugs>no</workaround-bugs>
          </ffmpegthumbnailer>
          <mark-played-items enabled="no" suppress-cds-updates="yes">
            <string mode="prepend">*</string>
          </mark-played-items>
        </extended-runtime-options>
      </server>
      <filesystem-charset>UTF-8</filesystem-charset>
      <metadata-charset>UTF-8</metadata-charset>
      <playlist-charset>UTF-8</playlist-charset>
      <import hidden-files="no">
        <scripting script-charset="UTF-8">
          <common-script>/usr/share/mediatomb/js/common.js</common-script>
          <playlist-script>/usr/share/mediatomb/js/playlists.js</playlist-script>
          <virtual-layout type="builtin">
            <import-script>/usr/share/mediatomb/js/import.js</import-script>
            <dvd-script>/usr/share/mediatomb/js/import-dvd.js</dvd-script>
          </virtual-layout>
        </scripting>
        <mappings>
          <extension-mimetype ignore-unknown="no">
            <map from="mp3" to="audio/mpeg"/>
            <map from="ogg" to="application/ogg"/>
            <map from="asf" to="video/x-ms-asf"/>
            <map from="asx" to="video/x-ms-asf"/>
            <map from="wma" to="audio/x-ms-wma"/>
            <map from="wax" to="audio/x-ms-wax"/>
            <map from="wmv" to="video/x-ms-wmv"/>
            <map from="wvx" to="video/x-ms-wvx"/>
            <map from="wm" to="video/x-ms-wm"/>
            <map from="wmx" to="video/x-ms-wmx"/>
            <map from="m3u" to="audio/x-mpegurl"/>
            <map from="pls" to="audio/x-scpls"/>
            <map from="flv" to="video/x-flv"/>
           <map from="ts" to="video/mpeg"/>
            <map from="m2ts" to="video/mpeg"/>
            <map from="vob" to="video/mpeg"/>
            <map from="wav" to="audio/wav"/>
            <map from="mpg" to="video/mpeg"/>
            <map from="aac" to="audio/x-aac"/>
            <map from="m4a" to="audio/mp4"/>
            <map from="mov" to="video/x-quicktime"/>
            <map from="divx" to="video/divx"/>
            <map from="avi" to="video/x-msvideo"/>
           <map from="mkv" to="video/x-matroska"/>
            <map from="mka" to="audio/x-matroska"/><!- Uncomment the line below for PS3 divx support -><!- <map from="avi" to="video/divx"/> -><!- Uncomment the line below for D-Link DSM / ZyXEL DMA-1000 -><!- <map from="avi" to="video/avi"/> ->
          </extension-mimetype>
          <mimetype-upnpclass>
            <map from="audio/*" to="object.item.audioItem.musicTrack"/>
            <map from="video/*" to="object.item.videoItem"/>
            <map from="image/*" to="object.item.imageItem"/>
            <map from="application/ogg" to="object.item.audioItem.musicTrack"/>
          </mimetype-upnpclass>
          <mimetype-contenttype>
            <treat mimetype="audio/mpeg" as="mp3"/>
            <treat mimetype="application/ogg" as="ogg"/>
            <treat mimetype="audio/x-flac" as="flac"/>
            <treat mimetype="image/jpeg" as="jpg"/>
            <treat mimetype="audio/x-mpegurl" as="playlist"/>
            <treat mimetype="audio/x-scpls" as="playlist"/>
            <treat mimetype="audio/x-wav" as="pcm"/>
            <treat mimetype="audio/L16" as="pcm"/>
            <treat mimetype="video/x-msvideo" as="avi"/>
            <treat mimetype="video/mp4" as="mp4"/>
            <treat mimetype="audio/mp4" as="mp4"/>
            <treat mimetype="application/x-iso9660" as="dvd"/>
            <treat mimetype="application/x-iso9660-image" as="dvd"/>
            <treat mimetype="video/x-matroska" as="mkv"/>
            <treat mimetype="audio/x-matroska" as="mka"/>
          </mimetype-contenttype>
        </mappings>
        <online-content><!- Make sure to setup a transcoding profile for flv ->
          <YouTube enabled="no" refresh="28800" update-at-start="no" purge-after="604800" racy-content="exclude" format="flv" hd="no">
            <favorites user="mediatomb"/>
            <standardfeed feed="most_viewed" time-range="today"/>
            <playlists user="mediatomb"/>
            <uploads user="mediatomb"/>
            <standardfeed feed="recently_featured" time-range="today"/>
          </YouTube>
          <Weborama enabled="no" refresh="28800" update-at-start="no">
            <playlist name="Active" type="playlist" mood="active"/>
            <playlist name="Metal" type="playlist">
              <filter>
                <genres>metal</genres>
              </filter>
            </playlist>
          </Weborama>
          <AppleTrailers enabled="no" refresh="43200" update-at-start="no" resolution="640"/>
        </online-content>
      </import>

    <transcoding enabled="yes">
         <mimetype-profile-mappings>
           <transcode mimetype="video/x-flv" using="video-common"/>
           <transcode mimetype="application/ogg" using="audio-common"/>
           <transcode mimetype="audio/x-flac" using="audio-common"/>
           <transcode mimetype="video/divx" using="video-common"/>
          <transcode mimetype="video/mpeg" using="video-common"/>         <!- добавляем ts ->
           <transcode mimetype="video/x-matroska" using="transcode-matroska"/>
         </mimetype-profile-mappings>
           <profiles>
            <profile name="video-common" enabled="yes" type="external">
                <mimetype>video/mpeg</mimetype>
                <accept-url>yes</accept-url>
                <first-resource>yes</first-resource>
                <accept-ogg-theora>yes</accept-ogg-theora>
                <agent command="mediatomb-transcode" arguments="-i %in -o %out -video-common"/>
                <buffer size="14400000" chunk-size="512000" fill-size="120000"/>
            </profile>
            <profile name="audio-common" enabled="yes" type="external">
                <mimetype>audio/wav</mimetype>
                <accept-url>no</accept-url>
                <first-resource>yes</first-resource>
                <accept-ogg-theora>no</accept-ogg-theora>
                <agent command="mediatomb-transcode" arguments="-i %in -o %out -audio-common"/>
                <buffer size="1048576" chunk-size="131072" fill-size="262144"/>
            </profile>
            <profile name="transcode-matroska" enabled="yes" type="external">
                <mimetype>video/mpeg</mimetype>
                <accept-url>yes</accept-url>
                <first-resource>yes</first-resource>
                <accept-ogg-theora>yes</accept-ogg-theora>
                <agent command="mediatomb-transcode" arguments="-i %in -o %out -transcode-matroska"/>
                <buffer size="14400000" chunk-size="512000" fill-size="120000"/>
            </profile>
          </profiles>
    </transcoding>
    </config>

    скрипт: mediatomb-transcode положил в каталог /etc/mediatomb и создал его ссылку в /usr/bin (скрипту установил права на чтение исполнение)

    #!/bin/sh
    # This script is used by MediaTomb for transcoding support.
    # Basic function that will transcode any input file into the target type
    # 'dvd' ffmpeg supports
    video_common() {
         local input="$1"
         local output="$2"
    #     ffmpeg -i "$input" -target dvd -y "$output"
         ffmpeg -i "$input" -target svcd -y "$output"
    }

    # Basic function that will transcode any input file into the wav format
    audio_common() {
        local input="$1"
        local output="$2"
        ffmpeg -i "$input" -f wav -y "$output"
    }

    # Function to transcode matroska files to dvd compatible format
    transcode_matroska() {
        local input="$1"
        local output="$2"
        local alang="$3"
        local slang="$4"

        # Default to english if languages are not set
         || alang="rus"
         || slang="rus"

        # Use mencoder if available, else fall back to using ffmpeg.
        # Transcoding using ffmpeg will not include subtitles.
        if which mencoder >/dev/null 2>&1; then
           mencoder "$input" -oac lavc -ovc lavc -of mpeg -mc 0 -noskip \
              -lavcopts vcodec=mpeg2video:vbitrate=6000:acodec=ac3:abitrate=448 \
              -vf harddup -alang "$alang" \
              -slang "$slang" -font 'Bitstream Vera Sans' \
              -o "$output"
        else
              ffmpeg -alang "$alang" -slang "$slang" -i "$input" -target dvd \
              -y "$output"
        fi
    }

    # Our "main" function below.

    USAGE="
    This script is used by MediaTomb for transcoding support. It can also serve as
    a script to transcode various files in a format suitable for streaming directly.

    Synopsis:
      mediatomb-transcode 

    Generic Options:
      -h, -help                 Display this help message.
      -i, -input                Input file that is meant to be transcoded.
      -o, -output               Output file that will be read back by MediaTomb.
      -audio-lang               Specify ISO 639 language code to use for audio.
      -subtitle-lang            Specify ISO 639 language code to use for subtitles.

    Transcode Function Options (one is required):
      -video-common             Perform generic video transcoding.
      -audio-common             Perform generic audio transcoding.
      -transcode-matroska       Used in transcoding matroska files.
    "
    while
    do
         case "$1" in
             -i|-input)
                 INPUT="$2"
                 shift; shift;
                 ;;
             -o|-output)
                 OUTPUT="$2"
                 shift; shift;
                 ;;
             -video-common)
                 USE_VIDEO_COMMON=1
                 shift
                 ;;
             -audio-common)
                 USE_AUDIO_COMMON=1
                 shift
                 ;;
             -transcode-matroska)
                 USE_TRANSCODE_MATROSKA=1
                 shift
                 ;;
             -audio-lang)
                 ALANG="$2"
                 shift; shift;
                 ;;
             -subtitle-lang)
                 SLANG="$2"
                 shift; shift;
                 ;;
             -h|-help|*)
                 echo "${USAGE}"
                 exit 1
                 ;;
         esac
    done

    # Perform specified function
    if ; then
        video_common "$INPUT" "$OUTPUT"
    elif ; then
        audio_common "$INPUT" "$OUTPUT"
    elif ; then
        transcode_matroska "$INPUT" "$OUTPUT" "$ALANG" "$SLANG"
    else
        # Must specify one transcoding function
        echo "${USAGE}"
        exit 1
    fi

    Зашел с телека на сервер и выбрал фильм с расширением *.ts  1080i
    Mediainfo файла:

    Общее
    Идентификатор                    : 1 (0x1)
    Полное имя                       : P:\media\films\1\V1.ts
    Формат                           : MPEG-TS
    Размер файла                     : 4,01 Гбайт
    Продолжительность                : 41 м.
    Общий поток                      : 13,7 Мбит/сек
    Максимальный общий битрейт       : 35,5 Мбит/сек

    Видео
    Идентификатор                    : 4113 (0x1011)
    Идентификатор меню               : 1 (0x1)
    Формат                           : MPEG Video
    Версия формата                   : Version 2
    Профиль формата                  : Main@High
    Параметр BVOP формата            : Да
    Параметр матрицы формата         : По умолчанию
    Идентификатор кодека             : 2
    Продолжительность                : 41 м.
    Вид битрейта                     : Переменный
    Битрейт                          : 11,7 Мбит/сек
    Номинальный битрейт              : 65,0 Мбит/сек
    Ширина                           : 1920 пикс.
    Высота                           : 1080 пикс.
    Соотношение сторон               : 16:9
    Частота кадров                   : 29,970 кадр/сек
    Цветовое пространство            : YUV
    Подвыборка цветности             : 4:2:0
    Битовая глубина                  : 8 бит
    Тип развёртки                    : Чересстрочная
    Порядок развёртки                : Верхнее поле первое
    Метод сжатия                     : С потерями
    Бит/(Пиксели*Кадры)              : 0.188
    Размер потока                    : 3,43 Гбайт (86%)

    Аудио #1
    Идентификатор                    : 4352 (0x1100)
    Идентификатор меню               : 1 (0x1)
    Формат                           : AC-3
    Формат/Информация                : Audio Coding 3
    Расширение режима                : CM (complete main)
    Идентификатор кодека             : 129
    Продолжительность                : 41 м.
    Вид битрейта                     : Постоянный
    Битрейт                          : 448 Кбит/сек
    Канал(ы)                         : 6 канала(ов)
    Расположение каналов             : Front: L C R, Side: L R, LFE
    Частота                          : 48,0 КГц
    Битовая глубина                  : 16 бит
    Метод сжатия                     : С потерями
    Размер потока                    : 134 Мбайт (3%)
    Язык                             : Russian

    Аудио #2
    Идентификатор                    : 4353 (0x1101)
    Идентификатор меню               : 1 (0x1)
    Формат                           : AC-3
    Формат/Информация                : Audio Coding 3
    Расширение режима                : CM (complete main)
    Идентификатор кодека             : 129
    Продолжительность                : 41 м.
    Вид битрейта                     : Постоянный
    Битрейт                          : 384 Кбит/сек
    Канал(ы)                         : 2 канала(ов)
    Расположение каналов             : Front: L R
    Частота                          : 48,0 КГц
    Битовая глубина                  : 16 бит
    Метод сжатия                     : С потерями
    Размер потока                    : 115 Мбайт (3%)
    Язык                             : Russian

    Аудио #3
    Идентификатор                    : 4354 (0x1102)
    Идентификатор меню               : 1 (0x1)
    Формат                           : AC-3
    Формат/Информация                : Audio Coding 3
    Расширение режима                : CM (complete main)
    Идентификатор кодека             : 129
    Продолжительность                : 41 м.
    Вид битрейта                     : Постоянный
    Битрейт                          : 448 Кбит/сек
    Канал(ы)                         : 6 канала(ов)
    Расположение каналов             : Front: L C R, Side: L R, LFE
    Частота                          : 48,0 КГц
    Битовая глубина                  : 16 бит
    Метод сжатия                     : С потерями
    Размер потока                    : 134 Мбайт (3%)
    Язык                             : English

    Текст #1
    Идентификатор                    : 4113 (0x1011)608-1
    Идентификатор меню               : 1 (0x1)
    Формат                           : EIA-608
    Режим смешивания                 : A/53 / DTVCC Transport
    Режим смешивания, доп. информаци : Muxed in Video #1
    Продолжительность                : 41 м.
    Размер потока                    : 0,00 байт (0%)

    Текст #2
    Идентификатор                    : 4113 (0x1011)1
    Идентификатор меню               : 1 (0x1)
    Формат                           : EIA-708
    Режим смешивания                 : A/53 / DTVCC Transport
    Режим смешивания, доп. информаци : Muxed in Video #1
    Продолжительность                : 41 м.
    Размер потока                    : 0,00 байт (0%)

    В системе вижу появляется несколько процессов ffmpeg, один из них показывает использование CPU 99% (иногда использование 120%. Как это может быть?)
    Фильм на телеке частенько притормаживает и воспроизводится как-то рывками. Минут через 10 совсем обрывается и показ прекращается.
    Хотелось бы мне понять…. в принципе возможна ли организация просмотра подобных фильмов? Может 1080i медиатомб на моей платформе не может справиться с этой задачей? Нужна система побыстрее? Или это ограничение интерфейса телека (у телека интерфейс 100 Мбит/с)?

    Кроме этого столкнулся еще с рядом проблем.
    Есть еще файлы *.mkv
    При просмотре их на телеке не получается выбрать русскую озвучку (на компе этот файл нормально с русским переводом). Телек 16:9 и при просмотре некоторых *.mkv икажаются геометрические размеры. Я так понимаю, что тут нужно точно тюнить ffmpeg, а данные о файле брать при помощи mediainfo (эту тоже установил)
    Но поскольку опыта в линуксах и программировании ноль…. разобраться конечно очень трудно

    Надеюсь кто-то уже сталкивался с подобной задачей. Подскажите пожалуйста ответы на эти вопросы.

     
  • Igor
    Igor
    2011-02-06

    Сегодня обратил внимание, что mediatomb занимает в памяти почти 3Гб оперативки и это в режиме ожидания!
    После рестарта сервиса сократился до 130 Мбайт.
    Система: Ubuntu server 10.10
    С чем это может быть связано и как с этим бороться? Ну не дергать же сервис постоянно :(