我正在尝试从通过 Red5 路由的实时流中获取原始音频数据。
我可以毫无问题地使用 netstream.attachAudio(mic),但了解不支持获取原始数据。
我有使用 netstream.send 通过 ByteArray 发送音频数据的代码。我可以验证数据正在发送到 Red5 服务器,并且正在从 Red5 服务器发送回客户端(查看网络流量)。我设置用于接收数据的客户端功能从未尝试过。我找到了许多示例并实施了一个解决方案,每个示例都应该有效..但显然缺少一些东西。代码如下:
protected function ncStatus(event:NetStatusEvent):void {
trace("rtmp connection status: " + event.info.code );
if ( event.info.code == "NetConnection.Connect.Success" ) {
upStream = new NetStream( netc );
upStream.client = this;
upStream.attachCamera(_camera);
upStream.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
//this.upStream.attachAudio(this._mic);
_mic.addEventListener( SampleDataEvent.SAMPLE_DATA, micSampleDataHandler, false, 0, false );
upStream.publish("Seat1","live");
}
}
public function micSampleDataHandler( event:SampleDataEvent ):void {
upStream.send("audiodata", event.data as ByteArray );
if ( txnum==7 ) {
downStream.play("Seat1");
}
txnum++;
}
public function audiodata( data ):void {
var buf2:ByteArray = newBuffer();
var res:Boolean = ane.processEngine( data as ByteArray, buf2, true, true );
if ( res )
processBuffer.push( buf2 );
if ( processBuffer.length > 8 )
_sound.play();
}
protected function netStatus( event:NetStatusEvent):void {
trace("netstream status: " + event.info.code + " " + event.target );
if ( event.info.code == "NetStream.Publish.Start" ) {
downStream = new NetStream( netc );
downStream.client = this;
video = new Video();
video.attachNetStream( downStream );
mediaContainer.addChild(video);
downStream.addEventListener(NetStatusEvent.NET_STATUS, netStatus );
}
}
视频通过没有问题,适当数量的数据被发送到服务器和从服务器发送,没有指示错误,但从未调用函数“audiodata”。有任何想法吗?