簡體   English   中英

AS3接收netstream.send ByteArray

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM