좋아요 ... 나는 당신을위한 단서를 가지고 있습니다. 난 당신이 플래시 CS5 내부에서 other question에 게시 된 NBAAC 코드 링크를 실행하려고이 오류 가지고 :
onChannelReady : MetaData Error: Error #2067: The ExternalInterface is not available in this container. ExternalInterface requires Internet Explorer ActiveX, Firefox, Mozilla 1.7.5 and greater, or other browsers that support NPRuntime.
은 그래서 플레이어가 &가 ExternalInterface를 사용하는 HTML 페이지 내부에서만 사용하도록 설계되어 보인다 (자바 스크립트) 브라우저에서 SWF로 메타 데이터를 가져 오는 경우
ExternalInterface 항목을 제거했으며 브라우저/HTML없이 Flash Player & Device Central에서 정상적으로 작동했습니다. AIR 응용 프로그램에서이 코드를 사용해보십시오 (확인을 위해 더 이상 AIR를 설치하지 않았습니다 ..)
package
{
import com.thebitstream.flv.CodecFactory;
import com.thebitstream.flv.Transcoder;
import com.thebitstream.flv.codec.*;
import com.thebitstream.ice.*;
import com.thebitstream.nsv.*;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
//import flash.external.externalInterface;
import flash.media.SoundTransform;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.net.NetStreamAppendBytesAction;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLStream;
import flash.utils.ByteArray;
import flash.utils.setTimeout;
[SWF (width="250",height="250")]
public dynamic class NBAAC_AIR_v2 extends Sprite
{
public var request:URLRequest;
public var transcoder :Transcoder
public var transport :NetConnection;
public var transportStream :NetStream;
public var serverConnection:URLStream;
//public var host:String=" "; //now not used in line... request=new URLRequest(resource);
public var resource:String="http://aacplus-ac-64.timlradio.co.uk/;"; //test station
public function NBAAC_AIR_v2()
{
super();
/*
if(loaderInfo.parameters.host)
host=loaderInfo.parameters.host;
if(loaderInfo.parameters.resource)
resource=loaderInfo.parameters.resource;
*/
//CodecFactory.ImportCodec(MetaData);
CodecFactory.ImportCodec(AAC);
CodecFactory.ImportCodec(AACP);
transcoder = new Transcoder();
transcoder.addEventListener(CodecEvent.STREAM_READY,onChannelReady);
transcoder.addEventListener(StreamDataEvent.DATA, onTag);
transcoder.initiate();
transcoder.loadCodec("AAC");
transport = new NetConnection();
transport.connect(null);
flash.utils.setTimeout(boot,500);
}
public function boot():void
{
//externalInterface.addCallback('nbaac.setVolume', onVolume);
//externalInterface.addCallback('nbaac.togglePause', onTogglePause);
//externalInterface.addCallback('nbaac.setBuffer', setBufferLength);
//externalInterface.addCallback('nbaac.getBuffer', getBufferLength);
//externalInterface.addCallback('nbaac.getTime', getTime);
/*
var meta:Object={};
meta.uri="";
meta.StreamTitle="";
*/
//externalInterface.call('logit','start up');
transportStream = new NetStream(transport);
transportStream.bufferTime=2;
transportStream.client = this;
transportStream.soundTransform=new SoundTransform(.5,0);
transportStream.play(null);
transportStream.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
var headerTag:ByteArray=transcoder.createHeader(false,true);
transportStream.appendBytes(headerTag);
headerTag.clear();
//transcoder.readMetaObject(meta,0);
serverConnection=new URLStream();
serverConnection.addEventListener(ProgressEvent.PROGRESS,loaded);
serverConnection.addEventListener(IOErrorEvent.IO_ERROR, onIo);
serverConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onNoPolicy);
serverConnection.addEventListener(Event.CLOSE, onClose);
request=new URLRequest(resource); //removed "host" from url
//request.requestHeaders=[new URLRequestHeader("GET",resource+" HTTP/1.0")];
//request.requestHeaders=[new URLRequestHeader("Icy-MetaData","1")];
request.method=URLRequestMethod.GET;
serverConnection.load(request);
}
private function getTime() :Number
{ return transportStream.time; }
private function getBufferLength() :Number
{ return transportStream.bufferLength; }
private function setBufferLength (val:Number) :void
{ transportStream.bufferTime = val; }
private function onTogglePause():void
{ transportStream.togglePause(); }
private function onVolume (val:Number) :void
{ transportStream.soundTransform = new SoundTransform(val, 0); }
private function onIo(pe:IOErrorEvent) :void
{ /* externalInterface.call('logit','IOErrorEvent') */ }
private function onTag(sde:StreamDataEvent) :void
{
sde.tag.position=0;
transportStream.appendBytes(sde.tag);
}
private function onChannelReady(ce:CodecEvent) :void
{ trace('onChannelReady :',ce.codec.type); }
private function onClose(e:Event):void
{ /* externalInterface.call('logit','onClose') */ }
public function onMetaData(e:Object):void
{ /* externalInterface.call('logit','onMetaData') */ }
private function loaded(e:ProgressEvent):void
{
var chunk:ByteArray=new ByteArray();
while(serverConnection.bytesAvailable)
{ chunk.writeByte(serverConnection.readByte()); }
chunk.position=0;
transcoder.addRawData(chunk, 0, "AAC");
}
private function onNoPolicy(se:SecurityErrorEvent):void
{ /* externalInterface.call('logit','SecurityErrorEvent'+host+resource+'<br />'+se.text); */ }
}
}
안녕하십니까,이 질문에 답변 해 주실 수 있습니까? http://stackoverflow.com/questions/25819826/shoutcast-aacplus-streaming-with-as3. Thunder-Snow를 사용하여 재생할 위치와 방법 및 위치를 보여주는 예제를 제공 할 수 있습니다. –
FLOS는 iOS에서 지원되지 않습니다. Android에서는 메모리 카드에서 저장된 FLV 파일을 재생할 수 있지만 스트리밍에 대해서는 알지 못합니다. 따라서 모바일에서이 AAC 데이터를 가져올 때 FLV를 래핑하지 말고 대신 [[Native Extensions] (http://www.adobe.com)를 사용하여 다른 기본 응용 프로그램 (즉, 내장 된 OS 디코더)에 버퍼하고 보내십시오. /devnet/air/native-extensions-for-air.html)] 및 [[Google 결과] (https://www.google.co.uk/?gws_rd=cr&ei=nqYkUqj1Osi20QXAhoHoDQ#q=as3%20android%)도 참조하십시오. 20 %% 20extensions)]. 고려해야 할 한가지지만 나 자신을 시도하지 않았습니다. –
일부 사람들은 어떻게 든 Android에서 재생할 수있는 것처럼 보입니다. http://stackoverflow.com/questions/20714135/streaming-aac-inside-flv-on-ios-using-air. 우리는 Android 용 네이티브 확장을 만들려고 시도했지만 사용 가능한 C/Java 솔루션을 사용하여 ANE를 만드는 것은 어렵습니다. ((( –