Поток Adobe AIR для iOS с камеры iPhone на сервер RTMP

#ios #actionscript-3 #flash #air #red5

#iOS #actionscript-3 #flash #air #red5

Вопрос:

У меня есть файл client .ipa, который я тестирую на своем устройстве iOS, теперь я успешно запустил приложение на iPhone с помощью Adobe Air для IOS, и для этого я использую Adobe Flash CC.

Когда я запускаю приложение на iPhone, видеосвязь не подключается к серверу потоковой передачи red5 и, следовательно, не может транслировать поток с камеры на сервер.

Я использовал stagevideo. Когда я запускаю приложение на локальном компьютере с веб-камерой и запускаю другое приложение на iOS для получения потока на iPhone, я могу видеть прямую трансляцию с веб-камеры моего ПК.

Но я хочу протестировать камеру 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;
    }
  

Ответ №1:

Ваш код в основном выглядит нормально, но я бы разделил части ns.publish и ns.play. ИМХО, вам не следует пытаться воспроизводить, пока публикация не будет успешной. Также, если вы не просто тестируете обратный переход на сервер, я бы просто подключил камеру к StageVideo; если это разрешено в iOS.