WMS
From www.mosalov.com
Rebuffers
- The video occasionally is rebuffered, or frames are dropped when you try to stream a video through a multicast from Windows Media Services to Windows Media Player clients
- Packet Fragmentation May Occur in Audio-Only Content
- Re: astable delay on server-encoder link, server buffer size
- Windows Media Services 9 Series network send behavior may lead to an unwanted client experience
- Delivering IPTV with the Windows Media Platform
Silverlight
Soft для обработки wmv
- WMV Direct
- SUPER
- AsfBin
- ASF Converter
- VurtualDub умеет открывать файлы с расширением .avs, в который можно написать
DirectShowSource("source.wmv", fps=25)
Windows Media Player
- Windows Media Player: Advanced Scripting for Cross-Browser Functionality
- Adding Windows Media to Web Pages
- PARAM Elements in an OBJECT Element (включая версию ActiveX для Firefox)
- Как подружить Firefox и Windows Media Player
- Windows Media Player и управление фоновой музыкой
Windows Media Serices 2008
- What Windows Media Services 2008 do (server core)
- Streaming Media Services (документация на technet)
Как использовать сетевой ресурс в качестве источника файлов для трансляций?
Самое главное — отключить 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 из командной строки?
- Необходимо установить Windows Media Encoder SDK.
- Настроить сессию для кодирования в графическом режиме, а затем сохранить её в файл, например, Session.wme.
- Запустить:
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-х разрядной. Я делаю это так:
- Устанавливаю Visual Studio 2005 Express Edition.
- Устанавливаю Platform SDK с включением всех фич для x64 и AMD64.
- Запускаю 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).
- Далее, выполняю следующие команды:
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.
- Открываю проект.
- Вношу в свойста проекта изменения, описанные в How to: Configure Visual C++ Projects to Target 64-Bit Platforms
- В Tools->Options...->Projects and solutions->VC++ Directories для всех категорий поднимаю пути из SDK вверх, а пути из VC опускаю вниз.
- Компилирую.
Все готово. dll-ку можно копировать на x64-сервер и устанавливать командой
regsvr32 plugin.dll
в окне cmd.exe. Перед установкой я останавливаю Windows Media Services, а после — запускаю.
Резервирование
- Windows Media Services SDK Implementing Failover
- Windows Media Services SDK Reducing Switching Latency
Пример 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>
Установка приложения на другой сервер
- Необходимо установить C++ Redistributable Package (vcredist_x86.exe)
- Необходимо зарегистрировать WMSServerTypeLib.dll: Registering and Installing Windows Media Services Components
В "Командной строке":
C:\>c:\windows\SysWOW64\regsvr32.exe "c:\WINDOWS\system32\windows media\server\WMSServerTypeLib.dll" C:\>c:\windows\system32\regsvr32.exe "c:\WINDOWS\system32\windows media\server\WMSServerTypeLib.dll"
Анализ производительности
Для создания нагрузки на 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";
}
Ссылки
- Alex Zambelli's WMV Tools
- Создание сценариев для работы с Windows Media Services (на Perl)
- Building Windows Media Player and Windows Media Encoder Plug-ins — общие слова о Transform Plug-ins для WME
- Steps in creating a DMO filter
- Добавление нескольких звуковых дорожек к WMV-файлу.
- ASFViewer — программка для разглядывания внутренностей WMV-файлов. Например, ей можно убедиться, что видео закодировано в VC-1 (FourCC=WVC1).
- Windows Media - Infos, Links und Software
- Чтобы впереть VC-1 на Windows 2003 Server, можно поставить вот это.
