繁体   English   中英

iOS版Adobe AIR从iPhone摄像头流到RTMP服务器

[英]Adobe AIR for iOS stream from iPhone Camera to RTMP server

我有一个在我的iOS设备上测试过的客户端.ipa文件,现在我已经通过使用Adobe Air for IOS成功地使该应用程序在iPhone上运行,为此,我正在使用Adobe Flash CC。

当我在iPhone上启动该应用程序时,视频连接未连接到red5流服务器,因此无法将流从摄像机广播到服务器。

我已经使用了stagevideo。 当我在具有网络摄像头的本地PC上启动该应用程序,并在iOS上启动另一个应用程序以在iPhone上接收流时,我可以从我的PC网络摄像头看到直播。

但我想测试iPhone相机并发送来自red5服务器的实时流媒体。

我怎样才能做到这一点。 我将当前代码放在下面。

                import flash.display.Sprite;

  import flash.display.MovieClip;

import flash.events.NetStatusEvent;

import flash.net.NetConnection;

 import flash.net.NetStream;

 import flash.media.Camera;

 import flash.media.Microphone;

 import flash.media.Video;

 import flash.net.Responder;

 import flash.media.StageVideo;
import flash.events.StageVideoAvailabilityEvent;
import flash.events.StageVideoEvent;
 import flash.geom.Rectangle;

     var nc:NetConnection;
     var good:Boolean;

     var netOut:NetStream;
     var netIn:NetStream;
     var cam:Camera;
     var mic:Microphone;
     var responder:Responder;
     var r:Responder;
     var vidOut:Video;
     var vidIn:Video;
     var outStream:String;
     var inStream:String;

     var sv:StageVideo;

        stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, onAvail);
    var sva:Boolean;

    function onAvail(e:StageVideoAvailabilityEvent):void{
        sva = (e.availability == StageVideoAvailability.AVAILABLE);
        trace(sva);
        var rtmpNow:String="rtmp://192.168.1.7/test1";

         nc=new NetConnection;

         nc.client = this;

         nc.connect(rtmpNow,"trik");

         nc.addEventListener(NetStatusEvent.NET_STATUS,getStream);



    }


    function onRender(e:StageVideoEvent):void{
        sv.viewPort = new Rectangle(0,0, 240, 180);

    }

     function getStream(e:NetStatusEvent):void
    {
         good=e.info.code == "NetConnection.Connect.Success";
         if(good)
         {
        trace("hello");
              // Here we call functions in our Java Application


         setCam();
         //setMic();
         //Play streamed video
         netIn = new NetStream(nc);

        if(sva){


         //Publish local video
         netOut=new NetStream(nc);
         //netOut.attachAudio(mic);
         netOut.attachCamera(cam);
         netOut.publish("tester", "live");
        sv = stage.stageVideos[0];

        sv.addEventListener(StageVideoEvent.RENDER_STATE, onRender);
            sv.attachNetStream(netIn);

            netIn.play("tester");

        }else{
         setVid();

         vidIn.attachNetStream(netIn);

         netIn.play("tester");
        }






         }
    }


     function streamNow(streamSelect:Object):void
    {
        trace("hello");


    }

     function setCam():void
    {
         cam=Camera.getCamera();
         cam.setMode(240,180,15);
         cam.setQuality(0,85);
    }

     function setMic():void
    {
        trace("hello");
         mic=Microphone.getMicrophone();
        trace("hello");
         mic.rate =11;
        trace("hello");
         //mic.setSilenceLevel(12,2000);
        trace("hello");
    }

     function setVid():void
    {
        trace("vid");

         vidIn=new Video(240,180);
         addChild(vidIn);
         vidIn.x=0;
         vidIn.y=0;
    }

您的代码通常看起来不错,但是我将ns.publish和ns.play部分分开。 恕我直言,在发布成功之前,您不应该尝试播放。 另外,如果您不只是在测试到服务器的往返行程,还可以将摄像机连接到StageVideo上。 如果iOS允许的话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM