Информация NetStream, возвращающая 0 (Icecast Stream) - PullRequest
2 голосов
/ 05 декабря 2011

Я искал все выше и ниже для исправления этой проблемы, но не могу найти НИЧЕГО по поводу того, почему почти все свойства возвращаются как 0.

Я использую обтекание FLV для извлечения потока живого аудиоиз Icecast (с тех пор, как Adobe, 15 лет спустя, до сих пор не устранила проблему утечки аудиопамяти в реальном времени).Он отлично работает, все работает отлично.

Однако я хочу создать монитор пропускной способности (для моего порта iPhone и для моего обычного проигрывателя Flash) ... Но всякий раз, когда я получаю netStreamInfo, он возвращаетсякак 0!Для dataBytesPerSecond, audioBytesPerSecond, byteCount, dataByteCount, почти КАЖДАЯ ОДНА СОБСТВЕННОСТЬ возвращает 0.Я запустил этот таймер на 1 секунду.

Вот общий вывод информации:

currentBytesPerSecond=0 
byteCount=0 
maxBytesPerSecond=0 
audioBytesPerSecond=0 
audioByteCount=0 
videoBytesPerSecond=0 
videoByteCount=0 
dataBytesPerSecond=0
dataByteCount=0 
playbackBytesPerSecond=16296.296296296296 
droppedFrames=0 
audioBufferLength=0.072
videoBufferLength=0 
dataBufferLength=0 
audioBufferByteLength=1540 
videoBufferByteLength=0
dataBufferByteLength=0 
srtt=0 
audioLossRate=0 
videoLossRate=0 Data Bytes Per Second

Этот вывод занял около 5 минут. Я заметил, что playBackBytesPerSecond никогда не менялся, иaudioBufferByteLength любил случайным образом переключаться между 1540 и 23хх.

Может ли кто-нибудь помочь мне здесь?

Мой сценарий действий:

package
{
    import flash.display.Sprite;
    import flash.net.NetConnection;
    import flash.net.NetStream;
    import flash.media.Video;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextField;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.events.NetStatusEvent;
    import flash.utils.Timer;
    import flash.media.Sound;
    import flash.net.URLRequest;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.media.SoundTransform;
    import flash.display.Loader;
    import flash.errors.IOError;
    import flash.events.MouseEvent;
    import flash.geom.Rectangle;
    import flash.net.NetStreamInfo;
    import flash.utils.ByteArray;
    import flash.media.*

    public class soundContainer extends Sprite
    {
        public var slider:SliderMC = new SliderMC();
        private var _video:Video;
        private var _stream:NetStream;
        private var _playbackTime:TextField;
        private var _duration:uint;
        private var _timer:Timer;
        private var _soundChannel:SoundChannel;
        public var audioTransform:SoundTransform = new SoundTransform();
        public var _URL:String;
        public var flvUrl:String = "s";
        public var dragging:Boolean = false;
        public var rectangle:Rectangle = new Rectangle(0,0,100,0);
        private var ba:ByteArray;
        private var bn;


        public function soundContainer() {

            addEventListener(Event.ADDED_TO_STAGE, init);
        }

        public function init(e:Event):void
        {

            ba = new ByteArray();

            slider.x = 73.85;
            slider.y = 10.95;
            addChild(slider);

            slider.slider_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragIt);
            stage.addEventListener(MouseEvent.MOUSE_UP, dropIt);


            _timer = new Timer(1000);
            _timer.addEventListener(TimerEvent.TIMER, onTimer);
            _timer.start();


        }

        public function dragIt(e:MouseEvent):void
        {
            slider.slider_mc.startDrag(false, rectangle);
            dragging = true;
            slider.slider_mc.addEventListener(Event.ENTER_FRAME, adjustVolume);
        }

        public function dropIt(e:MouseEvent = null):void
        {
            if (dragging)
            {
                slider.slider_mc.stopDrag();
                dragging = false;
            }
        }

        public function adjustVolume(e:Event):void
        {
            var vol:Number = slider.slider_mc.x / 100;
            var st:SoundTransform = new SoundTransform(vol);
            SoundMixer.soundTransform = st;

        }

        public function playMyFlv(flvUrl)
        {
            _URL = flvUrl;
            _video = new Video();

            var connection:NetConnection = new NetConnection();
            connection.connect(null);

            _stream = new NetStream(connection);
            _stream.soundTransform = audioTransform;
            _stream.play(flvUrl);

            var Client:Object = new Object();
            _stream.client = Client;
            _video.attachNetStream(_stream);

            addChild(_video);

        }



        public function stopMyFlv()
        {
            SoundMixer.stopAll();
            trace("stop");
            try
            {
                _stream.close();
            }
            catch (error:IOError)
            {
            }

        }




        private function onNetStatus(e:NetStatusEvent)
        {

        }

        private function onTimer(t:TimerEvent):Number
        {
            trace(_stream.info + " Data Bytes Per Second");
        }


        public function onIOError(e:IOError)
        {
            trace("Failed to load");
        }
    }
}
...