Skip to content
This repository has been archived by the owner on Feb 9, 2021. It is now read-only.

Настройка ТВ архива на Wowza Media Server (устарело)

azhurb edited this page Mar 29, 2012 · 3 revisions

Так как Wowza получила полноценную поддержку мультикаста - в версиях, начиная с 4.8.30 необходимо использовать решение с dumpstream

Настройка Wowza Media Server (WMS)

Установка модулей

Модуль infomir-tvarchive.jar необходимо поместить в папку lib в директории, где установлен Wowza Media Server, обычно это /usr/local/WowzaMediaServer.

Создание и настройка application-a

  1. В каталоге applications корневого каталога WMS создаем папку archive.
  2. В корневом каталоге WMS создаем папку archive_tasks.
  3. В каталоге conf создаем папку archive, внутри которой создаем файл Application.xml с содержимым:
<Root>
        <Application>
                <!-- Uncomment to set application level timeout values
                <ApplicationTimeout>60000</ApplicationTimeout>
                <PingTimeout>12000</PingTimeout>
                <ValidationFrequency>8000</ValidationFrequency>
                <MaximumPendingWriteBytes>0</MaximumPendingWriteBytes>
                <MaximumSetBufferTime>60000</MaximumSetBufferTime>
                <MaximumStorageDirDepth>25</MaximumStorageDirDepth>
                -->
                <Connections>
                        <AutoAccept>true</AutoAccept>
                        <AllowDomains></AllowDomains>
                </Connections>
                <!--
                        StorageDir path variables

                        ${com.wowza.wms.AppHome} - Application home directory
                        ${com.wowza.wms.ConfigHome} - Configuration home directory
                        ${com.wowza.wms.context.VHost} - Virtual host name
                        ${com.wowza.wms.context.VHostConfigHome} - Virtual host config directory
                        ${com.wowza.wms.context.Application} - Application name
                        ${com.wowza.wms.context.ApplicationInstance} - Application instance name

                -->
                <Streams>
                        <StreamType>live</StreamType>
                        <StorageDir>${com.wowza.wms.context.VHostConfigHome}/archive_tasks</StorageDir>
                        <KeyDir>${com.wowza.wms.context.VHostConfigHome}/keys</KeyDir>
                        <!-- LiveStreamPacketizers (separate with commas): cupertinostreamingpacketizer, smoothstreamingpacketizer, sanjosestreamingpacketizer, cupertinostreamingrepeater, smoothstreamingrepeater-->
                        <LiveStreamPacketizers></LiveStreamPacketizers>
                        <!-- Properties defined here will override any properties defined in conf/Streams.xml for any streams types loaded by this application -->
                        <Properties>
                        </Properties>
                </Streams>
                <Transcoder>
                        <!-- To turn on transcoder set to: transcoder -->
                        <LiveStreamTranscoder></LiveStreamTranscoder>
                        <!-- [templatename].xml or ${SourceStreamName}.xml -->
                        <Templates>${SourceStreamName}.xml,transrate.xml</Templates>
                        <ProfileDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/profiles</ProfileDir>
                        <TemplateDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/templates</TemplateDir>
                        <Properties>
                        </Properties>
                </Transcoder>
                <DVR>
                        <!-- As a single server or as an origin, use dvrstreamingpacketizer in LiveStreamPacketizers above -->
                        <!-- Or, in an origin-edge configuration, edges use dvrstreamingrepeater in LiveStreamPacketizers above -->
                        <!-- As an origin, also add dvrchunkstreaming to HTTPStreamers below -->

                        <!-- To turn on DVR recording set Recorders to dvrrecorder.  This works with dvrstreamingpacketizer  -->
                        <Recorders></Recorders>

                        <!-- As a single server or as an origin, set the Store to dvrfilestorage-->
                        <!-- edges should have this empty -->
                        <Store></Store>

                        <!--  Window Duration is length of live DVR window in seconds.  0 means the window is never trimmed. -->
                        <WindowDuration>0</WindowDuration>

                        <!-- Storage Directory is top level location where dvr is stored.  e.g. c:/temp/dvr -->
                        <StorageDir>${com.wowza.wms.context.VHostConfigHome}/dvr</StorageDir>

                        <!-- valid ArchiveStrategy values are append, version, delete -->
                        <ArchiveStrategy>append</ArchiveStrategy>

                        <!-- If this is a dvrstreamingrepeater, define ChunkOriginURL to point back to origin -->
                        <!-- And define Application/Repeater/OriginURL to point back to the origin -->
                        <Repeater>
                                <ChunkOriginURL></ChunkOriginURL>
                        </Repeater>

                        <!-- Properties for DVR -->
                        <Properties>
                        </Properties>
                </DVR>

                <!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming, sanjosestreaming, dvrchunkstreaming -->
                <HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming</HTTPStreamers>
                <SharedObjects>
                        <StorageDir></StorageDir>
                </SharedObjects>
                <Client>
                        <IdleFrequency>-1</IdleFrequency>
                        <Access>
                                <StreamReadAccess>*</StreamReadAccess>
                                <StreamWriteAccess>*</StreamWriteAccess>
                                <StreamAudioSampleAccess></StreamAudioSampleAccess>
                                <StreamVideoSampleAccess></StreamVideoSampleAccess>
                                <SharedObjectReadAccess>*</SharedObjectReadAccess>
                                <SharedObjectWriteAccess>*</SharedObjectWriteAccess>
                        </Access>
                </Client>
                <RTP>
                        <!-- RTP/Authentication/[type]Methods defined in Authentication.xml. Default setup includes; none, basic, digest -->
                        <Authentication>
                                <PublishMethod>digest</PublishMethod>
                                <PlayMethod>none</PlayMethod>
                        </Authentication>
                        <!-- RTP/AVSyncMethod. Valid values are: senderreport, systemclock, rtptimecode -->
                        <AVSyncMethod>senderreport</AVSyncMethod>
                        <MaxRTCPWaitTime>12000</MaxRTCPWaitTime>
                        <IdleFrequency>75</IdleFrequency>
                        <RTSPSessionTimeout>90000</RTSPSessionTimeout>
                        <RTSPMaximumPendingWriteBytes>0</RTSPMaximumPendingWriteBytes>
                        <RTSPBindIpAddress></RTSPBindIpAddress>
                        <RTSPConnectionIpAddress>0.0.0.0</RTSPConnectionIpAddress>
                        <RTSPOriginIpAddress>127.0.0.1</RTSPOriginIpAddress>
                        <IncomingDatagramPortRanges>*</IncomingDatagramPortRanges>
                        <!-- Properties defined here will override any properties defined in conf/RTP.xml for any depacketizers loaded by this application -->
                        <Properties>
                        </Properties>
                </RTP>
                <MediaCaster>
                        <!-- Properties defined here will override any properties defined in conf/MediaCasters.xml for any MediaCasters loaded by this applications -->
                        <Properties>
                        </Properties>
                </MediaCaster>
                <MediaReader>
                        <!-- Properties defined here will override any properties defined in conf/MediaReaders.xml for any MediaReaders loaded by this applications -->
                        <Properties>
                        </Properties>
                </MediaReader>
                <MediaWriter>
                        <!-- Properties defined here will override any properties defined in conf/MediaWriter.xml for any MediaWriter loaded by this applications -->
                        <Properties>
                        </Properties>
                </MediaWriter>
                <LiveStreamPacketizer>
                        <!-- Properties defined here will override any properties defined in conf/LiveStreamPacketizers.xml for any LiveStreamPacketizers loaded by this applications -->
                        <Properties>
                        </Properties>
                </LiveStreamPacketizer>
                <HTTPStreamer>
                        <!-- Properties defined here will override any properties defined in conf/HTTPStreamers.xml for any HTTPStreamer loaded by this applications -->
                        <Properties>
                        </Properties>
                </HTTPStreamer>
                <Repeater>
                        <OriginURL></OriginURL>
                        <QueryString><![CDATA[]]></QueryString>
                </Repeater>
                <Modules>
                        <Module>
                                <Name>base</Name>
                                <Description>Base</Description>
                                <Class>com.wowza.wms.module.ModuleCore</Class>
                        </Module>
                        <Module>
                                <Name>properties</Name>
                                <Description>Properties</Description>
                                <Class>com.wowza.wms.module.ModuleProperties</Class>
                        </Module>
                        <Module>
                                <Name>logging</Name>
                                <Description>Client Logging</Description>
                                <Class>com.wowza.wms.module.ModuleClientLogging</Class>
                        </Module>
                        <Module>
                                <Name>flvplayback</Name>
                                <Description>FLVPlayback</Description>
                                <Class>com.wowza.wms.module.ModuleFLVPlayback</Class>
                        </Module>
                        <Module>
                                <Name>Recorder</Name>
                                <Description>TV archive recorder</Description>
                                <Class>com.infomir.wms.module.ModuleRecorder</Class>
                        </Module>
                </Modules>
                <!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
                <Properties>
                        <Property>
                                <Name>startupStreamsMonitorMediaCasterType</Name>
                                <Value>liverepeater</Value>
                        </Property>
                        <Property>
                            <Name>startupStreamsMonitorExtensionFilter</Name>
                            <Value>.stream</Value>
                        </Property>
                        <Property>
                            <Name>saveDir</Name>
                            <Value>/media/raid1/wowza_archive</Value>
                        </Property>
                        <Property>
                            <Name>partsNumber</Name>
                            <Value>168</Value>
                        </Property>

                </Properties>
        </Application>
</Root>

При необходимости изменяем путь хранения записанных каналов в параметре saveDir в conf/archive/Application.xml.
4. Добавляем в conf/VHost.xml во вторую секцию <HostPort> (та, где <Port>8086</Port>) перед последней секцией <HTTPProvider> (та, где <RequestFilters>*</RequestFilters>) секцию:

<HTTPProvider>
    <BaseClass>com.infomir.wms.http.HTTPProviderRecorderTasks</BaseClass>
    <RequestFilters>stalker_portal*</RequestFilters>
    <AuthenticationMethod>admin-digest</AuthenticationMethod>
</HTTPProvider>
  1. В conf/Server.xml в секции <ServerListeners> добавляем:
<ServerListener>
    <BaseClass>com.wowza.wms.serverlistener.ServerListenerStartupStreamsMonitor</BaseClass>
</ServerListener>

В секцию <Properties>:

                <!-- Pipe (|) delimited list of application names for which to monitor: [vhostName]:[application]/[appInstance] -->
                <!-- This can be shorted to [application] assuming using _defaultVHost_ and _definst_ as the vhost and appInstance names -->
                <Property>
                        <Name>startupStreamsMonitorApplicationList</Name>
                        <Value>archive</Value>
                </Property>
                <!-- Stream prefix. Valid values are: flv and mp4 -->
                <Property>
                        <Name>startupStreamsMonitorStreamPrefix</Name>
                        <Value>mp4|mpg|flv</Value>
                </Property>
                <!-- MediaCaster type. Valid values are: rtp, rtp-record, shoutcast, shoutcast-record, liverepeater -->
                <Property>
                        <Name>startupStreamsMonitorMediaCasterType</Name>
                        <Value>rtp</Value>
                </Property>
                <!-- Pipe  (|) delimited list of file extensions for which to search -->
                <Property>
                        <Name>startupStreamsMonitorExtensionFilter</Name>
                        <Value>.stream</Value>
                </Property>

                <Property>
                        <Name>mgcdebug</Name>
                        <Value>true</Value>
                </Property>
  1. После всех настроек необходимо перезапустить WMS.
  2. Для проверки настройки можно открыть в браузере url http://{wowza-ip}:8086/stalker_portal. Должно отобразиться
    {"status":"ERROR","results":null,"error":"Resource not found"}

Настройка middleware

Создание хранилища

В админ интерфейсе в разделе Хранилища создать новое с заполненными полями Имя и IP и установленными опциями Запись ТВ и Wowza server.

Если записанные файлы будут проигрываться не с сервера, где установлена Wowza, то необходимо заполнить поле IP воспроизведения архива.

Настройка тв канала

В админ интерфейсе в разделе IPTV Каналы на необходимом канале необходимо установить опции Вести ТВ архив и Wowza DVR. При сохранении на хранилище сразу же начинают записываться файлы архива.