FastNetMon

Saturday, 27 November 2010

Стриминг flv видео посредством lighttpd

Итак, у нас есть готовый видео файл в формате flv: http://phpsuxx.blogspot.com/2010/11/dvd-video-flv-debian-5-linux.html и теперь стоит задача настроить трансляцию этого видео с работающей перемоткой в браузер с поддержкой flash.

Для работоспособности перемотки нужно добавить мета информацию (http://kovyrin.net/2006/10/08/lighttpd-memcoder-flvtool-for-streaming/),
более конкретно, что именно за информацию я пока сказать не могу, не
изучал вопрос настолько хорошо.

Для этого ставим flvtool2:
apt-get install -y flvtool2

Итак, сначала наш файл не содержит никакой мета-информации:
flvtool2 -P outputfile.flv
---
/opt/ssau_film/outputfile.flv:
duration: 723.52
audiosamplerate: 22050
framerate: 25
audiosamplesize: 16
stereo: true
videocodecid: 2
filesize: 40900644
height: 576
audiocodecid: 2
videodatarate: 0
width: 720
...


Далее добавляем метаданные к созданному нами файлику (но лучше, конечно, выдавать результат в другой файл, чтобы не перезаписывать оригинал):
flvtool2 -PU outputfile.flv

Теперь повторно запросим информацию о мета-данных:
flvtool2 -P outputfile.flv
---
/opt/ssau_film/outputfile.flv:
duration: 723.52
hasMetadata: true
hasKeyframes: true
framerate: 25
datasize: 40724054
audiodatarate: 35.1694144965998
audiosamplerate: 22000
cuePoints:
audiosamplesize: 16
hasVideo: true
lasttimestamp: 723.48
videocodecid: 2
canSeekToEnd: false
stereo: true
audiosize: 3484883
lastkeyframetimestamp: 715.32
videosize: 37232469
audiodelay: 0
hasAudio: true
filesize: 40907095
height: 576
keyframes:
filepositions:
- 6727
- 29382
- 40182
- 51024
тут еще очень много циферок
- 40052758
- 40120879
- 40216540
- 40257801
- 40330333
- 40585739
times:
- 0
- 0.08
- 0.12
- 0.16
- 0.2
тут еще много циферок
- 217.6
- 221.6
- 221.64
- 221.68
- 221.72
- 221.76
- 221.8
- 221.84
- 225.52
- 226.96
- 228.16
- 229.56
- 233.28
- 238.32
- 240.88
- 242.16
тут также много-много циферок
- 709.8
- 712.04
- 715.32
videodatarate: 409.50407474982
audiocodecid: 2
metadatacreator: inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2
metadatadate: Sat Nov 27 13:16:56 GMT+0300 2010
width: 720
hasCuePoints: false
...


Все, прекрасно, есть файл в нужном формате с данными для перемотки.

Теперь нужен веб-сервер чтобы все это выдать в браузер. Мы будем использовать lighttpd, вот инструкция по его установке и настройке для трансляции flv видео.

Теперь копируем в папку веб-сервера наш flv файл:
cp /opt/film/outputfile.flv /var/www/

Далее, для проигрывания всей этой радости нам нужен flash (swf) плейер, я предлагаю использовать FLV-Scrubber 3.x, вот его офсайт http://www.topfstedt.de/weblog/?page_id=208

Итак, качаем плейер:
cd /var/www
wget http://topfstedt.de/FLVScrubber3/FLVScrubber.swf

Далее нужно создать html файлик, в который будет встроен флеш плейер, назовем его, допустим, player.html:
<html>
<body>
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"
width="336"
height="297">
<param name="movie" value="scrubber.swf?file=/movie.flv" />
<param name="quality" value="high" />
<embed src="FLVScrubber.swf?file=/outputfile.flv"
quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash"
width="336"
height="297"></embed>
</object>
</body>
</html>

Далее открываем http://..../player.html и наслаждаемся :) Итого, у меня все отлично заработало (и даже с прокруткой!) на FireFox 3.6, Opera 10, Chrome.

Либо можно поставить JW Player, который по впечатлениям намного круче и аккуратнее.

Скачиваем дистрибутив (нам из него нужны лишь файлы player.swf, swfobject.js, yt.swf и, вроде, jwplayer.js):
cd /var/www
wget http://www.longtailvideo.com/jw/upload/mediaplayer.zip
unzip mediaplayer.zip
mv mediaplayer-5.3/* ./
rm -r mediaplayer-5.3
mkdir swf
mkdir js
mv *.js js
mv *.swf swf

Далее составляем файлик player.html следующего вида:
<html>
<body>
<p id='preview'>
The player will show in this paragraph
</p>
<script type='text/javascript' src='js/swfobject.js'></script>
<script type='text/javascript'>
var s1 = new SWFObject('swf/player.swf','player','400','300','9');
s1.addParam('allowfullscreen','true');
s1.addParam('allowscriptaccess','always');
s1.addVariable('file','http://46.4.187.234/outputfile.flv');
s1.write('preview');
</script>
</body>
</html>

И все выглядит и работает намного круче :) Разве что перемотка не работает :(

Источник: http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12/install-the-jw-player-for-flash-v5

2 comments :

  1. У Facebook есть свой вариант flvtool написанный на С++ вместо Ruby.
    http://mirror.facebook.net/facebook/flvtool++/

    ReplyDelete
  2. Ну это у кого есть серьезный поток такого видео на прописыание мета-инфы, у меня пока нету :)

    ReplyDelete

Note: only a member of this blog may post a comment.