需要安装FLASH MEDIA SERVER 4 (这个版本已经支持flash的p2p视频)
需要用flash cs5 开发iphone程序 (生成的ipa格式的文件,需要91助手安装)
我把测试的代码发出来,需要iphone先打开程序,
然后电脑在打开一个,电脑的程序点击发布视频,iphone端点击接收视频
package
{
import flash.display.Sprite;
import flash.events.SecurityErrorEvent;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.events.AsyncErrorEvent;
import flash.net.NetStream;
import flash.net.NetConnection;
import flash.media.Camera;
import flash.media.Microphone;
public class Cs1 extends Sprite
{
public var nc:NetConnection;
public var outgoingStream:NetStream;
public var incomingStream:NetStream;
public var myInofArr:Array=new Array();
public var youInofArr:Array=new Array();
public var camera:Camera;
public var mic:Microphone;
public function Cs1()
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
nc.connect("rtmfp://192.168.1.100/iphone1",youInofArr);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler="+event);
}
public function netStatusHandler(event:NetStatusEvent):void
{
trace(event.info.code);
switch (event.info.code)
{
case "NetConnection.Connect.Success" :
connectOk();
//nc.call("checkBandwidth", null);
break;
}
}
public function asyncErrorHandler(event:AsyncErrorEvent):void
{
trace("asyncErrorHandler="+event);
}
public function showMsg(msg:String):void
{
txtc.htmlText += msg;
}
public function connectOk():void
{
trace("connectOk()");
showMsg("connectOk()");
showMsg("nc.nearID="+nc.nearID);
txt1.text = "nc.nearID=" + nc.nearID;
myInofArr.nid = nc.nearID;
var ClientObj:Object=new Object();
ClientObj.backInfo = backInfo;
function backInfo(tempC:Object)
{
trace("backInfo");
//trace(tempC);
}
ClientObj.ctoallMsg = ctoallMsg;
function ctoallMsg(msg:String)
{
showMsg(msg);
txt1.text = msg;
}
nc.client = ClientObj;
bt1.addEventListener(MouseEvent.CLICK, bt1_ck);
function bt1_ck(event:MouseEvent):void
{
outCam();
}
bt2.addEventListener(MouseEvent.CLICK, bt2_ck);
function bt2_ck(event:MouseEvent):void
{
if (txt1.text != "")
{
inCam(txt1.text);
}
}
}
public function outCam():void
{
//myInofArr.nid
//nc.call()
nc.call("toallMsg",null, myInofArr.nid);
//发布视频
outgoingStream = new NetStream(nc,NetStream.DIRECT_CONNECTIONS);
outgoingStream.addEventListener(NetStatusEvent.NET_STATUS,outStreamHandler);
outgoingStream.publish("mediac");
camera = Camera.getCamera();
if (camera)
{
outgoingStream.attachCamera(camera);
av1.attachCamera(camera);
}
mic = Microphone.getMicrophone();
if (mic)
{
outgoingStream.attachAudio(mic);
}
function outStreamHandler(event:NetStatusEvent):void
{
//trace("outStreamHandler: " + event.info.code + "\n");
switch (event.info.code)
{
case "NetStream.Play.Start" :
break;
case "NetStream.Connect.Closed" :
break;
}
}
}
public function inCam(temp_nearID:String):void
{
incomingStream = new NetStream(nc,temp_nearID);
incomingStream.addEventListener(NetStatusEvent.NET_STATUS,incontrolHandler);
incomingStream.play("mediac");
av1.attachNetStream(incomingStream);
function incontrolHandler(event:NetStatusEvent):void
{
trace("in event: " + event.info.code + "\n");
switch (event.info.code)
{
case "NetStream.Play.Start" :
break;
case "NetStream.Connect.Closed" :
break;
}
}
}
}
}