Простой вид для видео компонента

Я должен использовать компонент flash.media.Video для воспроизведения удаленных видеофайлов, потому что у меня есть собственный механизм аутентификации (CRAM-MD5) в Red5, который не позволяет использовать VideoPlayer. Я пытался использовать OpenVideoPlayer, но он не работает на стороне сервера (Ошибка при выполнении вызова: Service: null Метод: play Num Параметры: 3 0: test/avatar.flv 1: NaN 2: NaN).

Мне просто нужно иметь контроллеры в верхней части компонента Video: воспроизведение, пауза, остановка, перемотка назад, индикатор выполнения. Пожалуйста, кто-нибудь может порекомендовать мне простой взгляд на это? Или любое решение будет в порядке!

обновление: пример кода, togglePause не работает должным образом:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="640" minHeight="480"
           initialize="init();">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
    <![CDATA[
        import flash.globalization.Collator;

        import mx.utils.ObjectUtil;
        import mx.controls.Alert;

        private var nc:NetConnection;
        private var ns:NetStream;
        private var video:Video;
        private var meta:Object;
        private var videoURL:String = "test/avatar.flv";

        private function init():void {

            var params:Object = {
                user: "user",
                video_id: 2
            };

            nc = new NetConnection();
            nc.connect("rtmp://localhost/myapp", params);
            nc.client = this;
            nc.addEventListener(NetStatusEvent.NET_STATUS,onConnectionStatus);
            nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR,onErrorHandler);
            nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
        }

        private function onConnectionStatus(event:NetStatusEvent):void {

            var nsClient:Object = {};
            nsClient.onMetaData = ns_onMetaData;
            nsClient.onCuePoint = ns_onCuePoint;

            ns = new NetStream(nc);
            ns.play(videoURL);
            ns.client = nsClient;

            video = new Video();
            video.attachNetStream(ns);
            uic.addChild(video);
        }

        private function onErrorHandler(event:AsyncErrorEvent):void{
        }

        private function onSecurityError(event:SecurityErrorEvent):void{
        }

        private function ns_onMetaData(item:Object):void {
        }

        private function ns_onCuePoint(item:Object):void {
        }

        public function onBWDone():void {
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:SpriteVisualElement id="uic" x="0" y="0" width="320" height="240" /> 
<mx:ControlBar x="10" y="330">
    <mx:Button label="Play/Pause" click="ns.togglePause();" />
    <mx:Button label="Rewind" click="ns.seek(0); ns.pause();" />
</mx:ControlBar>

1 ответ

Я предполагаю, что вы используете класс NetStream, который, наряду с NetConnection, отвечает за извлечение мультимедиа из Red5.

Проверьте документацию для NetStream: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html

Должно быть достаточно методов и событий для создания необходимых элементов управления (таких как play(), pause() и т. Д.)

Кроме того, рассмотрите возможность изучения Open Source Media Framework. Он обеспечивает отличную абстракцию для создания медиаплееров и позволяет создавать плагины для дополнительной функциональности (например, механизм аутентификации Red5).

Кроме того, компонент VideoPlayer основан на OSMF, поэтому вы можете разработать собственный плагин для связи с вашим сервером Red5 и использовать его с VideoPlayer Flex.

Другие вопросы по тегам