PDA

Просмотр полной версии : OSMF.Воспроизведение и переподключение HLS-видео


bumblebee
25.03.2013, 14:35
Всем привет!
Прощу помощи, сейчас работаю на видео плеером воспроизводящим HLS-видео(HTTP Live Streaming), т.е файлы с форматом *.m3u8
Вопрос в следующем, видео играет, но при разрыве связи я не могу понять когда соединение с интернетом восстановилось.

import at.matthew.httpstreaming.M3U8Element;
import at.matthew.httpstreaming.M3U8Loader;

...

private function connectStream():void
{
//
var netLoader:M3U8Loader = new M3U8Loader()

//
var urlResource:DynamicStreamingResource = new DynamicStreamingResource("http://rtmp.galargo.tv:1935/videoondemand/mp4:suva/suva/2012/12/13/10555/video_360p.f4v/playlist.m3u8");

//
var videoElement:M3U8Element = new M3U8Element(urlResource, netLoader);


//
var mediaplayer:MediaPlayer = new MediaPlayer();
mediaplayer.media = videoElement
mediaplayer.addEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, onState)

//
var mediaPlayerSprite:MediaPlayerSprite = new MediaPlayerSprite(mediaplayer);
addChild(mediaPlayerSprite);
}

private function onState(e:MediaPlayerStateChangeEvent):void
{
trace("onState.e: " + e.state)

switch(e.state) {
case "playbackError":
//reconnectTimer.start();
break
}
}
Допустим играет видео, в процессе воспроизведения я выдергиваю сетевой кабель. Приходит событие в методе: onState -> playbackError, означает связь потеряна.
После этого как я вставляю обратно кабель, никаких событий не приходит, как узнать что соединение восстановлено?

Тут можно почитать про HLS (http://en.wikipedia.org/wiki/HTTP_Live_Streaming)
Коротко, от сервера приходят пакеты по 15 сек видео, как только эти 15 сек проиграли, клиент запрашивает следующие 15 сек видео.

Все возможные варианты "погуглил", но в большинстве случаев видео не воспроизводится

Библиотеки M3U8 качал отдельно, входят в пакет OSMF

Simplifier
26.03.2013, 04:44
как узнать что соединение восстановлено?
А кто сказал, что оно восстанавливается после того как обратно воткнул кабель? Соединение разорвалось и все. Заново подключаться надо. Вероятнее так. Хотя, может и иначе, раз клиент не постоянно подключен, а регулярно перезапрашивает данные

bumblebee
26.03.2013, 15:31
А кто сказал, что оно восстанавливается после того как обратно воткнул кабель? Соединение разорвалось и все. Заново подключаться надо. Вероятнее так. Хотя, может и иначе, раз клиент не постоянно подключен, а регулярно перезапрашивает данные

Я согласен.
Как это сделать средствами OSMF?
Если я создаю:
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
connection.connect(null);
...

private function onNetStatus(e:NetStatusEvent):void
{
trace("onNetStatus.code: " + e.info.code);
switch (e.info.code)
{
case "NetConnection.Connect.Success":
setStream();
break;
}
}

Если устанавливать соединение с null, то все время приходит в методе onNetStatus-> "NetConnection.Connect.Success".
Если же указывать путь http://..., то выводит NetConnection.Connect.Error в независимости от того, есть интернет или нету.

Simplifier
26.03.2013, 16:11
Не совсем понимаю суть проблемы. Просто подключаешься как в первый раз и все. Если требуется NetConnection подключать к null, то естественно такое подключение всегда будет успешным, вне зависимости от наличия доступа к интернету. Значит этот этап можно пропустить по идее в последующие разы. Но на каком-то же этапе высыпется ошибка из-за того, что интернет не подключен. Там и устанавливай какой-то таймаут, чтобы делать следующую попытку подключения.