使用flex播放视频,AS3

时间:2016-03-28 05:07:49

标签: actionscript-3 flash flex video

我目前正在尝试使用flex进行游戏,我遇到的一个问题是如何在开始时播放短动画。这就是我到目前为止所做的:

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>

和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  
{

}

我是Flex和AS3的新手,因此大部分代码都被网络教程扯掉了。每当我尝试编译它时,我得到:&#39;错误:&#39; MyVideoClip.flv&#39;没有一个recongnized扩展,并没有提供mimeType。错误:无法转码&#39; MyVideoClip.flv&#39;&#39;

如果我删除了“嵌入”字样。使用&#34; MyVideoClip.flv&#34;替换MyVideoClip。在play()函数中,代码编译时没有错误,但是当我打开SWF时,我得到的只是一个黑屏。我做错了什么?

提前致谢!!

2 个答案:

答案 0 :(得分:2)

尝试设置mime-type,例如:

class MyAsyncTask extends AsyncTask<Object,Object,Object>{

    Private Context c;
    private Handler handler;

    private final static int YOUR_WORK_ID = 0x11;

    public  MyAsyncTask(Context c,Handler handler){
      this.c = c;
      this.handler = handler;

  }

    protected Object doInBackground(Object... params){
      //do your work
        ...
       Message m =  handler.obtainMessage();
       m.what = YOUR_WORK_ID;
       ...
       handler.sendMessage().sendToTarget(); 


  }



}

答案 1 :(得分: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,以便稍后您可以访问&amp;从任何其他功能控制它们。请记住,如果在公共函数中使用 var ,它只在该函数中保持有效,而在其他函数中不存在。最好将这些变量公开给所有功能。