[英]AS3 receiving netstream.send ByteArray
我試圖從通過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”。 有任何想法嗎?
原來,這是AMF3的Red5問題。
我切換到Adobe Media Server,它按預期工作。
如果我更改netConnection上的objectEncoding,它可以工作,但是ByteArray作為對象接收,這會引起許多麻煩,並且也會影響性能。
有問題的Red5代碼在org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.java中。 我要再說一遍,現在就推動AMS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.