WMSによるストリーミングの録画方法(例:ふくいちライブカメラ)
こんにちは。日本マイクロソフトの我孫子です。
Windows Media サービスから配信されているストリーミングビデオは、Windows Media Format SDK を用いたプログラムで録画することができます。
(注:DRMで保護されている場合は録画しても再生できません)
今日は例として本日バージョンアップしたふくいちライブカメラを例にとりあげて説明します。プログラムとしては、Windows SDK 7.1 に同梱されている WMVCopy サンプルを使います。しかしそのままではストリーミングを録画できませんので、少々手を入れる必要があります。
WMVCopyの修正箇所
WMVCopyサンプルはファイル入力のシナリオを想定して実装されているため、起動時にコンテンツの長さをASFヘッダから読み込もうとします。しかしストリーミングでは長さは視聴を止めるまで確定しませんので、Windows Media Format SDK はエラーを返します。このエラーをもってWMVCopy はエラー終了してしまうため、その部分に手を入れます。
HRESULT CWMVCopy::CreateReader( const WCHAR * pwszInputFile )
{
(……)
hr = m_pReaderHeaderInfo->GetAttributeByName( &wStreamNumber,
g_wszWMDuration,
&enumType,
(BYTE *)&m_qwDuration,
&cbLength );
if( FAILED( hr ) )
{
return( hr );
}
/*
if( m_qwDuration == 0 )
{
hr = E_INVALIDARG;
return( hr );
}
*/
また、長さの情報は進捗状況の表示処理にも使われているため、そちらも手を入れます。
HRESULT CWMVCopy::OnStreamSample( /* [in] */ WORD wStreamNum,
/* [in] */ QWORD cnsSampleTime,
/* [in] */ QWORD cnsSampleDuration,
/* [in] */ DWORD dwFlags,
/* [in] */ INSSBuffer __RPC_FAR * pSample,
/* [in] */ void __RPC_FAR * pvContext)
{
HRESULT hr = S_OK;
BOOL fMoveScript = FALSE;
/*
while( m_dwProgress <= cnsSampleTime * 50 / m_qwDuration )
{
m_dwProgress ++;
_tprintf( _T( "*" ) );
}
*/
以上の修正を施したらビルドします。
WMVCopy の使用方法
WMVCopy の引数には、ストリーミング配信のURLを与える必要があります。
ふくいちライブカメラのサイトには、Windows Media Player 用のリンクが掲載されています。
そのリンク先は ASX ファイル(クライアントサイドプレイリスト)というテキストファイルで、XMLのような形式でURLが記載されています。
そのURLを与えてWMVCopyを起動します。-d 60 は 60秒録画するという意味です。
wmvcopy –i [URL] –o [出力ファイル.wmv] –d 60
例:wmvcopy –i “mms://a1362.l12738051361.c127380.a.lm.akamaistream.net/D/1362/127380/v0001/reflector:51361” –o out.wmv –d 60
録画したWMVファイルは Windows Media Player などで再生できます。
一日も早い事故の収束をお祈りします。
参考文献
WMVCopyの説明はこちらに掲載されています。
Sample Applications
https://msdn.microsoft.com/en-us/library/dd757605(VS.85).aspx
ASXファイルの仕様はこちらに掲載されています。
Windows Media(TM) メタファイルの活用
https://msdn.microsoft.com/ja-jp/library/dd148561.aspx
RTSPプロトコルの仕様書はこちらに掲載されています。
[MS-RTSP]: Real-Time Streaming Protocol (RTSP) Windows Media Extensions
https://msdn.microsoft.com/en-us/library/cc245238(v=prot.10).aspx