Playing a video with flex, AS3

Refresh

November 2018

Views

69 time

2

I am currently trying to make a game on flex and one of the problems I ran in to is how to play a short animation at the beginning. This is what I have so far:

Game.mxml

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    name="Game"
    backgroundColor="#000000"
    horizontalAlign="center"
    creationComplete="Init();"
    enterFrame="UpdateFrame();"
    paddingLeft="0"
    paddingTop="0"
    paddingBottom="0"
    paddingRight="0"
    width="800" height="600">

  <mx:Script>
  <![CDATA[
    include "Game.as";
  ]]>
  </mx:Script>

  <mx:Canvas id="gamePanel" x="0" y="0" width="100%" height="100%" mouseDown="MouseDown(event)" mouseUp="MouseUp(event)" mouseMove="MouseMoved(event)"/>
</mx:Application>

and Game.as

import flash.display.*; 
import flash.events.*;
import flash.external.ExternalInterface; 
import mx.events.*;
import mx.controls.*;

[Embed(source="MyVideoClip.flv")] private var MyVideoClip:Class;

public function Init():void
{   
    var MyVideo:Video = new Video(800, 600);
    addChild(MyVideo);
    var qNetConnection:NetConnection = new NetConnection();
    qNetConnection.connect(null);
    var qNetStream:NetStream = new NetStream(qNetConnection);
    MyVideo.attachNetStream(qNetStream);
    qNetStream.client = new Object();
    qNetStream.play(MyVideoClip);
}

private function UpdateFrame():void
{

}

private function MouseDown(event:MouseEvent):void   
{   

}   

private function MouseUp(event:MouseEvent):void     
{

}

private function MouseMoved(event:MouseEvent):void  
{

}

I am rather new to Flex and AS3 so most of this code was ripped off web tutorials. Whenever I try to compile it I get: 'Error: 'MyVideoClip.flv' does no have a recongnized extention, and a mimeType was not provided. Error: unable to transcode 'MyVideoClip.flv''

If I remove the 'embed' line and replace MyVideoClip with "MyVideoClip.flv" in the play() function, the code compiles with no errors, but when I open the SWF all I get is a black screen. What am I doing terribly wrong?

Thanks in advance!!

2 answers

2

Попробуйте установить тип пантомимы, например:

[Embed(source = "MyVideoClip.flv", mimeType = "application/octet-stream")]
2

Вы внедренный видеофайл (его байт) в выходной SWF. Так что теперь NetStreamдолжен играть от источника байтов. Просто установите byteArrayравным new MyVideoClip();и добавить к NetStream.

Попробуй это...

[Embed(source="MyVideoClip.flv", mimeType="application/octet-stream")] private var MyVideoClip:Class; //# embed the FLV's bytes

public var VideoClipBytes : ByteArray;
public var MyVideo:Video;

public var qNetConnection:NetConnection;
public var qNetStream:NetStream;

public function Init():void
{   
    VideoClipBytes = new MyVideoClip() as ByteArray; //# fill a byte Array with embedded bytes 

    qNetConnection = new NetConnection(); qNetConnection.connect(null);
    qNetStream = new NetStream(qNetConnection);
    qNetStream.client = new Object();

    MyVideo = new Video(800, 600);
    MyVideo.attachNetStream(qNetStream);
    addChild(MyVideo);

    qNetStream.play(null); //# play mode is now bytes
    qNetStream.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); //# ready for new audio/video data        
    qNetStream.appendBytes( VideoClipBytes ); //# add bytes to decoder queue (playback)

}

PS: Я сделал некоторые из ваших переменных , как publicэто позже вы можете получить доступ и управлять ими из любых других функций. Помните , что если вы делаете вар внутри публичной функции он остается действительным только в том , что одной из функций и не существует других функций. Лучший сделать такие вары , как публично доступны все функции.