Pergunta

Estou me perguntando como usar um objeto VideoDisplay (definido em MXML) para exibir vídeo transmitido do FMS por meio de um NetStream.

O Documentos Flex3 sugira que isso é possível:

A exibição de vídeo ...suporta download progressivo por HTTP, streaming do Flash Media Server e streaming de um objeto Camera.

No entanto, mais tarde na documentação, tudo o que posso ver é um método attachmentCamera().Não parece haver um método attachmentStream() como o antigo objeto Video.

Parece que você pode reproduzir um arquivo fixo servido em HTML usando a propriedade source, mas não vejo nada sobre como anexar um NetStream.

O velho Vídeo object ainda parece existir, embora não seja baseado em UIComponent e não pareça ser utilizável em MXML.

eu encontrei esta postagem do blog isso mostra como fazer isso com um objeto Video normal, mas eu prefiro usar VideoDisplay (ou qualquer outra coisa que possa ser colocada diretamente no MXML).

Foi útil?

Solução

Infelizmente você pode anexarNetStream() apenas no objeto Video.Então você está condenado a usá-los se quiser obter dados do FMS.

A propósito, método attachmentCamera() publica vídeo da câmera local para o servidor, então tome cuidado;)

Outras dicas

VideoDisplay é um invólucro VideoPlayer, que por sua vez é a Video subclasse.Infelizmente, o wrapper impede que você anexe um NetStream existente ao objeto Video.

No entanto, uma referência a esse componente é mantida no mx_internal namespace, então o seguinte deve resolver:

videoDisplay.mx_internal::videoPlayer.attachNetStream(incomingStream);
videoDisplay.mx_internal::videoPlayer.visible = true;

(você precisa importar o mx.core.mx_internal espaço para nome)

funciona.

mx:VideoDisplay live="true" autoPlay="true" source="rtmp://server.com/appname/streamname" />

que lhe dará vídeo ao vivo através de um display de vídeo...o problema é que ele não usará um objeto netconnection existente, ele criará o seu próprio ...é por isso que estou tentando encontrar uma solução alternativa.

Aqui está um link para um exemplo de como usar o vídeo:http://blog.flexexamples.com/2008/03/01/displaying-a-video-in-flex-using-the-netconnection-netstream-and-video-classes/

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical"
    verticalAlign="middle"
    backgroundColor="white"
    creationComplete="init();">

<mx:Script>
<![CDATA[
    import mx.utils.ObjectUtil;

    private var nc:NetConnection;
    private var ns:NetStream;
    private var video:Video;
    private var meta:Object;

    private function init():void {
    var nsClient:Object = {};
    nsClient.onMetaData = ns_onMetaData;
    nsClient.onCuePoint = ns_onCuePoint;

    nc = new NetConnection();
    nc.connect(null);

    ns = new NetStream(nc);
    ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv");
    ns.client = nsClient;

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

    private function ns_onMetaData(item:Object):void {
    trace("meta");
    meta = item;
    // Resize Video object to same size as meta data.
    video.width = item.width;
    video.height = item.height;
    // Resize UIComponent to same size as Video object.
    uic.width = video.width;
    uic.height = video.height;
    panel.title = "framerate: " + item.framerate;
    panel.visible = true;
    trace(ObjectUtil.toString(item));
    }

    private function ns_onCuePoint(item:Object):void {
    trace("cue");
    }
]]>
</mx:Script>

<mx:Panel id="panel" visible="false">
    <mx:UIComponent id="uic" />
    <mx:ControlBar>
    <mx:Button label="Play/Pause" click="ns.togglePause();" />
    <mx:Button label="Rewind" click="ns.seek(0); ns.pause();" />
    </mx:ControlBar>
</mx:Panel>
</mx:Application>

Eu vi um código de exemplo onde algo assim funciona:

// Connect to the video stream in question.
var stream:NetStream = new NetStream( chatNC );
stream.addEventListener( NetStatusEvent.NET_STATUS, handleStreamStatus );
stream.addEventListener( IOErrorEvent.IO_ERROR, handleIOError );

// Build the video player on the UI.
var video:Video = new Video(246, 189);
var uiComp:UIComponent = new UIComponent();
uiComp.addChild( video );
uiComp.width = 246;
uiComp.height = 189;
stream.play( streamName );
video.attachNetStream( stream );
video.smoothing = true;
video.width = 246;
video.height = 189;
view.videoPlayerPanel.removeAllChildren();
view.videoPlayerPanel.addChild( uiComp );

Mas eu não consigo fazer isso funcionar sozinho.Postarei aqui mais tarde se conseguir descobrir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top