2015-01-11 6 views
0

This был полезной статьей о двойной пороговой буферизации. Это объясняет, что вы можете прослушивать события NetStream.Buffer.Full и NetStream.Buffer.Empty на NetStream и настраивать время буфера NetStream, чтобы наилучшим образом использовать доступную полосу пропускания, а также быстро получать время начала видео. Однако я столкнулся с проблемой. Когда я прохожу мимо буферизованного раздела видео в моем NetStream, буфер снова пуст, но я не получаю событие NetStream.Buffer.Empty. Время буферизации NetStream по-прежнему настроено на мое расширенное время буфера, поэтому я теряю преимущество быстрого начала. Как вы реализуете эту стратегию, чтобы в этом случае она работала правильно? Как вы скажете, что буфер снова пуст или что вы искали доступный буфер?NetStream: двойная пороговая буферизация и поиск за пределами буфера

Редактировать: Я должен, вероятно, упомянуть, что использую поиск в буфере (Smart Seeking). Я думаю, что это не было бы проблемой, если бы я не был, потому что флеш забрасывает буфер на каждый поиск без включения этой функции.

+0

Эта статья очень полезна для буферизации длинных потоков да, но я думаю, что вы можете использовать некоторую логику там. Низкий порог буфера в буфере пуст, когда поиск должен помочь в продолжении воспроизведения. Однако поиск немного меняет ситуацию. Я должен спросить, правда, ищет действительно то, что нужно клиенту? Если это инициация, инициированная пользователем, то она не запрашивает слишком много для буферизации воспроизведения. Это должно быть приемлемым для пользователя. Если они хотят искать, они должны быть готовы подождать, пока их контент будет готов. – tree

ответ

0

Решение для меня состояло в том, чтобы просто сбросить время буфера на каждый поиск. Вы по-прежнему получите событие NetStream.Buffer.Full, и оно немедленно сгорит, если вам посчастливится найти место, где буфер уже больше вашего минимального буфера, поэтому ваш обработчик для NetStream.Buffer.Full сразу же установит время буфера обратно в ваш расширенный буфер время. Вот пример:

var videoStream:NetStream = new NetStream(nc); 

videoStream.addEventListener(NetStatusEvent.NET_STATUS, function (event:NetStatusEvent):void { 
    switch(event.info.code) { 
     case "NetStream.Buffer.Full": 
      // this will keep the buffer filling continuously while there is bandwidth 
      videoStream.bufferTime = Settings.maxBuffer; 
      State.buffering = false; 
      break; 
     case "NetStream.Buffer.Empty": 
      // if we run out of buffer we'll reset the buffer time to the min 
      videoStream.bufferTime = Settings.minBuffer; 
      State.buffering = true; 
      break; 
    } 
} 

_view.addEventListener(SeekEvent.SEEK, function (event:SeekEvent):void { 
    State.buffering = true; 
    videoStream.bufferTime = Settings.minBuffer; 
    videoStream.seek(event.seek * (_duration || 0)); 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^