ismvファイル再生メモ

自分メモ。

Windows7へのIISセットアップあれこれ
http://awoni.net/personal-site/iis
http://awoni.net/personal-site/web-site/
http://awoni.net/personal-site/application/

IIS Media Services 3.0 (64 ビット)

インストール後配信手順

※上のサイトだとダウンロードしたファイルとサイトの情報が合っていないのでこっち(英語)を参照

プレイヤー&サンプル動画

SmoothStreamingPlayer.exe

html内のismファイルの向き先を書き換え
※最後の/manifest は必要なので消さないこと。

http://%ServerName%/Big Buck Bunny H.264 720p/BigBuckBunny.ism/manifest

ローカルPCで再生でけた。

hlsで動画配信時に実尺とシークタイムにズレが生じる原因

hls(http live streaming)をサクっと説明すると、

・Appleが作った動画を配信するためのプロトコル。
・ストリーミングサーバー不要
・動画は複数のファイル(MpegTS)に分割されている
・リストファイル(.m3u8)に動画のパスと秒数が記録されている
・対応したプレイヤーでm3u8を読み込むとhlsでの再生が可能

といったところ。

HTTPライブ
ストリーミングの概要

httpなのでCDN等キャッシュサーバーからも配信することができてトラフィックが多くても大丈夫。

2014年10月現在、iPhoneとAndroid両対応の動画を独自に配信しようとおもったら良い選択肢だと思います。
ただ、権利がからむ場合は暗号化を忘れずに。
(ここでは説明しません)

で、hlsを以下の2パターンで作っていたのですが、どちらも動画の実尺に対してシークバーの合計時間が短くなってしまう現象に悩まされていました。

[パターン1]
元データ > XmediaRecoder > Tsフィアル化
Tsファイル > AppleMediaSegmenter > hls化

[パターン2]
元データ > FFmpeg > hls化

[不具合]
実尺9分56秒の動画なのに、シークバーは9分28秒となってしまう(画像参照)
Screenshot_2014-10-20-17-10-03
(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org

[スマホ用 サンプル動画] ※パケット代注意 Wi-Fiからが良いです
http://keycreate.jp/test/movie/hlstest/movie.m3u8

で、色々調べてみたところどうやらm3u8ファイル内の尺を記述する #EXTINF:10 が小数点以下を無視することが原因のようでした。

小数点を含む#EXTINFの合計 = 596.5秒(9分56秒)
小数点切捨の#EXTINFの合計 = 568秒(9分28秒) ← スクリーンショットのシークバーと同じ時間!

とりあえずは原因がわかったので、tsファイル1つがきっちり10秒になるように分割しようと思います。

[追記]
HTTP Live Streaming draft-pantos-http-live-streaming-14

拙い英語力ですが、これによると浮動小数点は使えるような気がします。
だとすると何でズレるんなろう?

decimal-floating-point: an unquoted string of characters from the set [0..9] and ‘.’ which expresses a non-negative floating-point number in decimal positional notation.

where duration is a decimal-integer or decimal-floating-point number (as described in Section 4.2) that specifies the duration of the Media Segment in seconds.

Durations that are reported as integers SHOULD be rounded to the nearest integer.

Durations MUST be integers if the compatibility version number is less than 3 to support older clients.

Durations SHOULD be floating-point if the compatibility version number is 3 or greater.

The remainder of the line following the comma is an optional human-readable informative title of the Media Segment.