WMS

From www.mosalov.com

Jump to: navigation, search

Contents

Rebuffers

Silverlight

Soft для обработки wmv

DirectShowSource("source.wmv", fps=25)

Windows Media Player

Windows Media Serices 2008

Как использовать сетевой ресурс в качестве источника файлов для трансляций?

Самое главное — отключить Authorization->WMS NTFS ACL Authorization плагин.

Windows Media Encoder не перекодирует файлы MPEG-2

Один или несколько кодеков, необходимых для открытия данного содержимого, не найдены.(0xC00D1B83)

Нужно поставить правильный MPEG-2 декодер. Например, скачать K-Lite MPEG Pack и выбрать

  • Video: MainConcept
  • Audio: MainConcept
  • Splitter: MainConcept

Как запустить Windows Media Encoder из командной строки?

  1. Необходимо установить Windows Media Encoder SDK.
  2. Настроить сессию для кодирования в графическом режиме, а затем сохранить её в файл, например, Session.wme.
  3. Запустить:
    C:\WMSDK\WMEncSDK9\samples\vb\wmcmd>cscript.exe Wmcmd.vbs -wme Session.wme
    Microsoft (R) Windows Script Host Version 5.6
    Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
    
    ....
    

Иногда эта сволочь падает с ошибкой:

.......Error occurred in transcoding: Error Code = 0x8000FFFF

C:\WMSDK\WMEncSDK9\samples\vb\wmcmd>

Для борьбы с этим можно использовать вот такой вот скрипт loop.bat:

:START
cscript.exe Wmcmd.vbs -wme sport.wme
GOTO START

Сборка plugin'а для x64

Чтобы плагин заработал в 64-х разрядной версии Windows 2003 Server, необходимо, чтобы dll-ка была 64-х разрядной. Я делаю это так:

  1. Устанавливаю Visual Studio 2005 Express Edition.
  2. Устанавливаю Platform SDK с включением всех фич для x64 и AMD64.
  3. Запускаю Start->Programs->Microsoft Platform SDK for Windows Server 2003 R2->Open Build Environment Window->Windows Server 2003 64-bit Build Environment->Set Win Svr 2003 x64 Build Env (Retail).
  4. Далее, выполняю следующие команды:
    Targeting Windows Server 2003 X64 RETAIL
    
    
    C:\Program Files\Microsoft Platform SDK>cd "..\Microsoft Visual Studio 8\Common7\Tools"
    
    C:\Program Files\Microsoft Visual Studio 8\Common7\Tools>vsvars32.bat
    Setting environment for using Microsoft Visual Studio 2005 x86 tools.
    
    C:\Program Files\Microsoft Visual Studio 8\Common7\Tools>cd ..\ide
    
    C:\Program Files\Microsoft Visual Studio 8\Common7\IDE>VCExpress /useenv
    

    Запускается Microsoft Visual Studio 2005 Express Edition.

  5. Открываю проект.
  6. Вношу в свойста проекта изменения, описанные в How to: Configure Visual C++ Projects to Target 64-Bit Platforms
  7. В Tools->Options...->Projects and solutions->VC++ Directories для всех категорий поднимаю пути из SDK вверх, а пути из VC опускаю вниз.
  8. Компилирую.

Все готово. dll-ку можно копировать на x64-сервер и устанавливать командой

regsvr32 plugin.dll

в окне cmd.exe. Перед установкой я останавливаю Windows Media Services, а после — запускаю.

Резервирование

Пример server-side playlist'а (failover.wsx) для точки публикации, получающей поток с двух кодировщиков:

<?wsx version="1.0"?>
<smil repeatCount="indefinite">
    <switch>
        <media src="http://192.168.155.2:10001/?WMReconnect=0"/>
        <media src="C:\WMPub\WMRoot\nosignal.wmv" dur="30"/>
    </switch>
    <switch>
        <media src="http://192.168.155.3:10001/?WMReconnect=0"/>
        <media src="C:\WMPub\WMRoot\nosignal.wmv" dur="30"/>
    </switch>
</smil>

Установка приложения на другой сервер

Анализ производительности

Для создания нагрузки на WMS есть программа Windows Media Load Simulator for Windows Media Services 9 Series.

В первый раз, возможно, вы получите сообщение об ошибке:

03/29/07 13:11:16, SERVER ACCESS DENIED, , Code: 0x00000000, Description: The operation completed successfully. 

Дело в том, что симулятор пытается получить доступ к диску C: (C$) сервера и прочитать оттуда файл с именем wmloadsafe.txt, видимо, чтобы исключить нецелевое использование программы для создания DoS-атаки. Достаточно открыть доступ и создать файл нулевой длины.

Мониторинг по SNMP

SNMP MIB находится в каталоге %systemroot%\System 32\Windows Media\Server.

Для начала работы необходимо зарегистрировать библиотеку Wmssnmp.dll:

C:\>regsvr32 "c:\WINDOWS\system32\windows media\server\wmssnmp.dll"

Логи

Перенос конфигурации с одного сервера на другой

Для экспорта конфигурации можно использовать скрипт на Perl'е:

#!/usr/bin/perl -w

use strict;
use Win32::OLE;

my $server = Win32::OLE->new('WMSServer') or die "oops\n";

# some place writable for everyone
$server->ExportXML("c:\\logs\\server.xml");

Re-buffering

Удаление ip-адреса

Если к Windows Media Services подключается не плеер, а, например, Web-браузер, то в ответ ему отдается asx-style playlist:

[Reference]
Ref1=http://fqdn.foo.bar/foo.asx?MSWMExt=.asf
Ref2=http://192.168.0.1:80/foo.asx?MSWMExt=.asf

Однако, если Windows Media Services является backend'ом и доступен из интернета под другим адресом, Ref2 оказывается бесполезным. В файле %systemroot%\system32\windows media\server\ServerNamespace.xml есть две настройки, которые отвечают за эти ссылки. Это

  • SendDomainNameURLInRedirectASX, которая отвечает за выдачу в Ref1 символического имени сервера и
  • SendIpAddressInWinInetRedirect, которая отвечает за выдачу в Ref2 ip-адреса.

Изменив вторую из этих настроек на "0x0" можно отключить выдачу ip-адреса в Ref2. Для этого остановите Windows Media Services, внесите изменения, а затем запустите его снова.

Увеличение числа соединений для Windows Media Encoder

HKEY_CLASSES_ROOT\Software\Microsoft\Windows Media Tools\Encoder\MaxClientConnections

How to enable reverse proxy mode?

#!/usr/bin/perl -w

use strict;
use Win32::OLE;

my $server = Win32::OLE->new('WMSServer') or die "oops\n";
$server->{EnableReverseProxyMode} = 1;

Автоматизация

Perl

Кроме C++, C# и VisualBasic разрабатывать ПО для автоматизации WMS можно и на Perl с помощью модуля Win32::OLE. Следующий скрипт прекрасно работает в ActivePerl и выводит сведения о подключенный в данный момент пользователях. При программировании на Perl удобнее всего пользоваться документацией для VisualBasic: Programming Reference (Visual Basic .NET).

#!/usr/bin/perl -w

use strict;
use Win32::OLE;

my $server = Win32::OLE->new('WMSServer') or die "oops\n";

# http://msdn2.microsoft.com/en-us/library/ms753428.aspx
my $stime = $server->StartTime();
# use Win32::OLE::Variant methods to retrieve date and time
print "Server started at ", $stime->Time(), " ", $stime->Date(), "\n";

# http://msdn2.microsoft.com/en-us/library/ms753417.aspx
my $players = $server->Players();

# http://msdn2.microsoft.com/en-us/library/ms752513.aspx
print "Count of players: ", $players->Count(), "\n";

for (my $i = 0; $i < $players->Count(); ++$i)
{
	# http://msdn2.microsoft.com/en-us/library/ms752514.aspx

	my $player = $players->Item($i);

	print "\n"; # skip a line

	# http://msdn2.microsoft.com/en-us/library/ms748486.aspx

	print "ID: ",             $player->ID(),             "\n";
	print "NetworkAddress: ", $player->NetworkAddress(), ":",
	                          $player->Port(),           "\n";	
	print "Status: ",         $player->Status(),         "\n";
	print "UserName: ",       $player->UserName(),       "\n";
	print "RequestedURL: ",   $player->RequestedURL(),   "\n";
}

Ссылки

Personal tools
Google AdSense