#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.