请问怎样处理视频

来源:互联网 发布:护肤品淘宝代购店推荐 编辑:程序博客网 时间:2024/04/29 17:36
<script type="text/javascript"><!--google_ad_client = "pub-9649745520893664";//468x60, 创建于 07-12-9google_ad_slot = "1840944113";google_ad_width = 468;google_ad_height = 60;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><iframe name="google_ads_frame" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-9649745520893664&amp;dt=1217408681582&amp;lmt=1217408680&amp;output=html&amp;slotname=1840944113&amp;correlator=1217408681580&amp;url=http%3A%2F%2Fwww.openred5.com%2Fbbs%2Farchiver%2F%3Ftid-321.html&amp;ref=http%3A%2F%2Fwww.google.cn%2Fsearch%3Faq%3Df%26complete%3D1%26hl%3Dzh-CN%26newwindow%3D1%26client%3Dfirefox-a%26rls%3Dorg.mozilla%253Azh-CN%253Aofficial%26q%3D%2BVideoDisplay%2B%2B%25E5%25BF%2585%25E9%25A1%25BB%25E8%25BF%259E%25E6%258E%25A5%2BNetConnection%2B%25E5%25AF%25B9%25E8%25B1%25A1%26btnG%3DGoogle%2B%25E6%2590%259C%25E7%25B4%25A2%26meta%3D&amp;frm=0&amp;cc=100&amp;ga_vid=2693316218462328300.1217408682&amp;ga_sid=1217408682&amp;ga_hid=1585598791&amp;flash=9.0.115&amp;u_h=768&amp;u_w=1024&amp;u_ah=768&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=1&amp;u_java=true&amp;u_nplug=21&amp;u_nmime=104" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" width="468" frameborder="0" height="60"></iframe>

查看完整版本: 请问怎样处理视频

binbinming 2007-8-15 11:12

请问怎样处理视频

最近用学习用RED5写视频播放的练习 ,但一头雾水,请版主指教一下
我用ECLIPSE 中 加入了FLEX 3的插件,也就可以在ECLIPSE 中简历 FLEX 工程了
我在工程中建立了个主页面,里面的视频是这样写的:

<!-- 视频 -->       
                <mx:VBox x="553" y="49" width="384" height="443">
                        <mx:VideoDisplay id="vDisplay" width="362" height="275" playheadUpdate="videoMovie(event)"
                                                         bufferTime="0.5" maintainAspectRatio="false"
                                             source="assets/flvMovie/karas.flv" autoPlay="false"/>
                       
                                             
          <mx:ControlBar id="mainControl" width="365" height="52" borderColor="green">  
      <mx:Label text="音量" color="black"/>  
         <!--播放器声音控制 -->  
         <mx:HSlider id="vcSound" width="80" themeColor="red"  
            minimum="0" maximum="1"  
            thumbRelease="soundControl_Relase(event)"   
            change="soundControl_Changes(event)"  
            value="{vDisplay.volume}" />  
            
       <mx:CheckBox id="vcfull" label="全屏模式" change="showfull()"/>
         
       </mx:ControlBar>
                        <!-- 视频滑块 -->
                        <mx:ControlBar id="videoControlHead" width="364" height="40">
                                <mx:HSlider id="slider" minimum="0"
                                                           change="changVideoTime(event)" width="352"
                                                           labels="['0%','100%']"/>
                        </mx:ControlBar>

                        <mx:HBox width="364" height="32">
                                <mx:Button id="play"click="{if(vDisplay.playing) vDisplay.stop();vDisplay.play()}"label="播放" fontSize="12" />
                                <mx:Button id="pause" click="{vDisplay.pause()}" label="暂停" fontSize="12" />
                                <mx:Button id="stop" click="{vDisplay.stop()}" label="停止" fontSize="12" />
                        </mx:HBox>
                </mx:VBox>

有两个问题,

1: 我是用 FLEX 的标签 videoDisplay 去写的,也就是 指定 source 。
可是我看到有个帖子讲的是关于RTMP 协议的,里面是这样写的:
var videoInstance:Video = your_video_instance;
var nc:NetConnection = new NetConnection();
var connected:Boolean = nc.connect("rtmp:/localhost/myapp");
var ns:NetStream = new NetStream(nc);
videoInstance.attachVideo(ns);
ns.play("flvName");

这样的话我怎么用videoDisplay 去指定上面缩写的 rtmp://xxxxx?一般情况我要在FLEX端写视频广播播放,我应该怎样去写?
2:我写了个全屏的方法 showfull()
方法如下:
private function showfull():void {
                      try{
                        if(vcfull.selected){
                            stage.displayState="fullScreen";
                            }else{
                             stage.displayState="normal";
                            }
                }catch(e : Error){
                        Alert.show(e.message);
                }
        }

可我点击全屏时候 提示我安全原因不行:        2152        Full screen mode is not allowed.

D5Power 2007-8-15 12:16

问题1:videoInstance.attachVideo(ns);
这句就是指明用哪个对象来播放视频的图象,比如你的例子中,就应该是vDisplay.attachVideo(ns);

问题2:
只在FLASH里面写全屏是不起作用的,必须在HTML允许该FLASH全屏幕。代码为
<param name="allowFullScreen" value="true" />

binbinming 2007-8-15 13:27

OK , 非常感谢版主啊

binbinming 2007-8-15 13:30

videoDisplay 中好像没有 attachVideo ,只有 attach摄像头的,而且我自己写个 var xx:Video() 对象 不能用 attachVideo()这个方法

binbinming 2007-8-15 13:38

video.attachNetStream(stream); ?

binbinming 2007-8-15 13:39

现在是这个错误 。咋回事?

ArgumentError: Error #2126: 必须连接 NetConnection 对象。
        at flash.net::NetStream/flash.net:NetStream::construct()
        at flash.net::NetStream$iinit()
        at red5Demo/::init()
        at red5Demo/___Application1_creationComplete()
        at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at mx.core::UIComponent/dispatchEvent()
        at mx.core::UIComponent/set initialized()
        at mx.managers::LayoutManager/::doPhasedInstantiation()
        at Function/http://adobe.com/AS3/2006/builtin::apply()
        at mx.core::UIComponent/::callLaterDispatcher2()
        at mx.core::UIComponent/::callLaterDispatcher()

D5Power 2007-8-15 14:37

流程:
1.建立NetConnection对象
var nc:NetConnection=new NetConnection()

2.建立NC连接
nc.connect("rtmp://xxxxx");// 注意你的代码里写成了rtmp:/,少了一个/
如果是直接通过HTTP方式播放,则此处应为
nc.connection(null);

3.建立NetStream
var ns:NetStream=new NetStream(nc);
注意这里有一个必须参数nc

4.连接源
xxVideo.attachVideo(ns);

5.播放
ns.play("xxxx");

binbinming 2007-8-15 15:24

那我怎么能像 videoDisplay 标签一样加到 MXML文件上呢? 我这样加提示我类型转换错误:
this.addChild(video);
还有 ns.play(xxx);中的xxx 是指我工程目录下的stream/xxx吧!

D5Power 2007-8-15 17:28

你把你的全部代码贴出来吧。。。

binbinming 2007-8-16 11:02

我其实就是想知道怎么能够像videoDisplay标签一样加到页面上,以前写的AS 是继承了Sprite 然后 用 addChild(video)就可以了,但我在我的MXML 文件中就不行啊:

代码大概是这样的,因为太多,只能就贴这一点,要不乱了:
   nc.addEventListener( "success", connectionSuccessHandler ); //nc即NetConnection
然后 :private function connectionSuccessHandler( event:Event ):void{
                       
                        //-------------------- 视频连接 --------------
try{
                        var responser : Responder = new Responder(getListFLVs);
                        var video:Video = new Video(114,115);
                        var ns:NetStream = new NetStream(nc);
                        video.attachNetStream(ns);
                         addChild(video) //错误出在这 ,提示我Error #1034:强制转换类型失败:无法将                                                             flash.media::Video@5abcc39 转换为 mx.core.IUIComponent。
                        
                        ns.play("streams/karas.flv"); //没法播放
                       
                       //把streams文件下的列表加如到 页面中LIST标签中
                        nc.call("getListOfAvailableFLVs",responser);
}catch(e : Error){
        Alert.show(e.message);
}


另外,我还有个问题,我在后台RED5 ,还要做些什么么?我想取得这个视频的播放时间之类的怎么取?
谢谢

binbinming 2007-8-16 11:04

不对,nc 是 FMSConnection ,是我下的一个源码中有个这样的类,正好免的写了,所以就拿过来了
dynamic public class FMSConnection extends NetConnection implements IEventDispatcher//FMSConnection是这样定义的

D5Power 2007-8-16 14:31

不好意思:)没有认真去查过就回答你了。
刚才去查了一下Adobe的官方论坛。发现VideoDisplay貌似不能用stream,呵呵:)解决全部代码如下:
[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
<mx:Script>
        <![CDATA[
                import mx.core.UIComponent;
                public function init():void
                {
                        var nc:NetConnection=new NetConnection();
                        nc.connect(null);
                        var ns:NetStream=new NetStream(nc);

                        ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);

                        var screen:UIComponent=new UIComponent();
                        screen.setActualSize(800,600);
                       
                        var myVideo:Video=new Video(320,240);
                        myVideo.attachNetStream(ns);
                        screen.addChild(myVideo);
                        addChild(screen);
                        ns.play("http://xxx/video.flv");
                }

                public function asyncErrorHandler(e:Object):void
                {
                       
                }
        ]]>
</mx:Script>
</mx:Application>
[/code]

需要把Video加入一个UIComponent里才可以addChild,在我机器上测试通过了:)特别要声明,这里需要为ns增加事件侦听器ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErrorHandler);哪怕只是个空函数也要增加。否则会报错(但不影响视频播放)

[[i] 本帖最后由 D5Power 于 2007-8-16 14:37 编辑 [/i]]

binbinming 2007-8-16 14:37

是这样的吧 :                         var videoHolder:UIComponent = new UIComponent();
                        var video:Video = new Video(114,115);
                        var ns:NetStream = new NetStream(nc);
                        video.attachNetStream(ns);
                        videoHolder.addChild(video);
                        videoHolder.width = 114;
                        videoHolder.height = 115;
                        clientVideoCanvas.addChild(videoHolder);
                        ns.play("chatVideo/streams/karas.flv");

binbinming 2007-8-16 14:38

但我的还是没法播放,错误没有了。
请问 我调用 Netstream.play()方法的时候 RED5后台的哪个方法被调用了? 还有 netstream.play(xx),中的 XXX.flv文件放在哪?

D5Power 2007-8-16 14:39

恩,必须要有一个UIComponent来做“容器”,把Video放到容器里,再把容器放到舞台上

D5Power 2007-8-16 14:41

如果按你的代码,且你没有修改过RED5项目的设置,那么这个文件应该在
webapps/your_project/streams/chatVideo/streams/karas.flv
同时你的chatVideo/streams/karas.flv中的斜杠是不是反了啊。。。记不清楚了,我怎么记得应该是/这样的啊

binbinming 2007-8-16 14:42

哦,对了,我记得好像在 FLEX 中用/就可以,好像如果发布后 要改成 /

D5Power 2007-8-16 14:42

你应该学会调试。在出现问题的时候,应该尝试先去掉可能出现问题的部分
比如现在,你可以先把stream连到本地的某个VIDEO文件,这样路径上不会出问题,才能判断到底是你RED5方面的问题,还是AS代码方面的问题

binbinming 2007-8-16 14:44

但是他并不提示我错误啊,还有 ,ns.play(),方法后,RED5后台要做什么么?比如我想取得播放的总时间
应为如果我要用 videoDisplay.totalTime的时候老是显示-1

binbinming 2007-8-16 14:44

恩,谢谢,版主大哥了!
页: [1] 2
查看完整版本: 请问怎样处理视频