Как проверить существование FLV-файла перед его воспроизведением с использованием FLVPlayback в Action Script 3? - PullRequest
1 голос
/ 26 июля 2010

Я очень новичок в Action Scripting, я использую класс FLVPlayback для воспроизведения моих FLV-файлов.

Если я пытаюсь воспроизвести FLV-файл, который еще не существует, я получаю «VideoError: 1000» с сообщением Unable to make connection to server or to find FLV on server.

Я хочу проверить существование файла FLV, используя URL-адрес или путь к файлу, прежде чем воспроизводить этот FLV с помощью FLVPlayback. Кто-нибудь может предложить, пожалуйста, способ сделать это.

Спасибо

Ответы [ 2 ]

3 голосов
/ 26 июля 2010

Единственный способ безопасно отловить ошибку - это прослушать событие fl.video.VideoEvent.STATE_CHANGE и действовать соответственно.Вот небольшой фрагмент кода о том, как это сделать:

import fl.video.FLVPlayback;
import fl.video.VideoEvent;
import fl.video.VideoState;

var videoPlayer:FLVPlayback;
videoPlayer.addEventListener( VideoEvent.STATE_CHANGE, onVideoStateChange );
/** Bad source  **/
videoPlayer.source = "http://www.helpexamples.com/flash/video/caption_video_error.flv";
/** Good source **/
//videoPlayer.source = "http://www.helpexamples.com/flash/video/caption_video.flv";

function onVideoStateChange( evt:VideoEvent ):void
{
    var videoPlayer:FLVPlayback = evt.target as FLVPlayback;
    switch( evt.state )
    {
        case VideoState.CONNECTION_ERROR:
            trace( 'Connection error' );
            /**
             * Once you hit this event, you should run some logic to do one or more of the following:
             *   1. Show an error message to the user
             *   2. Try to load another video
             *   3. Hide the FLVPlayback component
             */
            break;
        default:
            trace( 'Player is: ' + evt.state );
    }
}

Для получения полного списка возможных констант VideoState посетите fl.video.VideoState .

1 голос
/ 26 июля 2010

Думаю, вы сможете использовать событие stateChange .Один из возможных типов событий - VideoState.CONNECTION_ERROR , а другой - VideoState.DISCONNECTED, который также может работать.

Попробуйте сделать снимок.

Если они не работают, я могу думать только о том, чтобы выполнить запрос HEAD или GET для flv, прежде чем пытаться загрузить его.Только успешный ответ вызовет загрузку видео обычным способом.Я не помню, поддерживает ли Flash запросы HEAD, но если это так, то это, безусловно, будет лучшим вариантом.

Если Flash не поддерживает запросы HEAD, возможно, вам лучше иметь простой серверный скриптэто может проверить существование FLV, прежде чем вы на самом деле запросите, если.Таким образом, вы можете использовать простой запрос GET без необходимости извлечения всего файла.

INLINE THINKING
Я просто думаю, что другим возможным решением с использованием GET будет отмена загрузкикак только bytesLoaded> 1K (например) или что-то в этом роде.Пока вы проверяете размер больше, чем получаемый вами ответ 404, вы должны быть в состоянии предположить, что flv загружается.

...