Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   OSMF.Воспроизведение и переподключение HLS-видео (http://www.flasher.ru/forum/showthread.php?t=196479)

bumblebee 25.03.2013 14:35

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

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
Коротко, от сервера приходят пакеты по 15 сек видео, как только эти 15 сек проиграли, клиент запрашивает следующие 15 сек видео.

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

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

Simplifier 26.03.2013 04:44

Цитата:

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

bumblebee 26.03.2013 15:31

Цитата:

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

Я согласен.
Как это сделать средствами OSMF?
Если я создаю:
Код AS3:

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, то естественно такое подключение всегда будет успешным, вне зависимости от наличия доступа к интернету. Значит этот этап можно пропустить по идее в последующие разы. Но на каком-то же этапе высыпется ошибка из-за того, что интернет не подключен. Там и устанавливай какой-то таймаут, чтобы делать следующую попытку подключения.


Часовой пояс GMT +4, время: 08:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.