#flash
#flash
Вопрос:
Я создал музыкальный автомат flash video, поэтому он часами считывает динамический список воспроизведения файлов F4V. Все работает хорошо, но примерно через 45 минут звук прекращается, а через 2 часа подключаемый модуль flash Player выходит из строя. Похоже, что кэш не принимает больше видео F4V, а затем выходит из строя. Если я автоматически обновляю браузер каждые 2 часа, это работает, но я хотел бы избежать необходимости обновлять браузер и просто очистить кеш flash Player, если именно туда переходит F4V? Я не могу найти никакой информации о том, куда отправляются файлы F4V при их воспроизведении!
Редактировать
Кадр 1 присваивает переменной значение имени видеофайла vidReference
:
VidReference = trackToPlay;
Во втором кадре воспроизведение:
var nc:NetConnection = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
const buffer_time:Number = 2;
ns.bufferTime = buffer_time;
ns.client = this;
ns.play(VidReference);
var vid:Video = new Video();
vid.attachNetStream(ns);
addChild(vid);
vid_frame.addChild(vid);
Это функция, которая определяет, когда воспроизведение видео завершено, все еще на кадре 2:
function netStatusHandler(event:NetStatusEvent):void
{
switch (event.info.code)
{
case "NetStream.Play.StreamNotFound": newTrack();
break;
case "NetStream.Play.Stop": newTrack();
break;
}
}
И функция newTrack()
просто присваивает переменной trackToPlay
значение (имя файла следующего видео). И затем говорит о gotoAndPlay
кадре 1, так что это своего рода повторная инициализация проигрывателя. Объекты повторно объявлены во фрейме 2, проблема здесь в этом?
Дэвид
Ответ №1:
похоже, что у него заканчивается память. вы очищаете старые f4v, чтобы никогда не запрашивать память постоянно?
попробуйте профилировать его или использовать что-то вроде http://jpauclair.net/flashpreloadprofiler /
для получения помощи в отслеживании проблем с памятью ознакомьтесь с http://divillysausages.com/blog/tracking_memory_leaks_in_as3 (бесстыдная самореклама)
Комментарии:
1. На самом деле я надеялся, что можно очистить старый F4V, возможно ли это? Через некоторое время они определенно занимают всю память, и я почти уверен, что именно поэтому происходит сбой. Как мне очистить старый F4V, который когда-то воспроизводился?
2. вам нужно убедиться, что нет ничего, содержащего ссылки на него — в проигрывателе, списках, чем угодно. в зависимости от ваших настроек вам может потребоваться небольшая реструктуризация. в принципе, я бы сохранил, возможно, имя файла плюс небольшое изображение, чтобы люди знали, что это такое. у меня одновременно был бы только один видеофайл в SWF
Ответ №2:
Это не проблема с кэшем. На вашем жестком диске выделено место для кэша, поэтому, если оно не заполнено, у вас не возникнет проблемы.
Звучит так, как будто вы не собираете мусор и неправильно используете видеообъект повторно. Опубликуйте некоторый код, чтобы мы могли это исправить
Комментарии:
1. Можете ли вы отредактировать свой пост и вставить туда свой код. Мне гораздо проще разобраться с этим для вас
2. Кадр 1 присваивает переменной vidReference значение имени видеофайла:
VidReference = trackToPlay;
Кадр 2 воспроизводит:var nc:NetConnection = new NetConnection(); nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); nc.connect(null); var ns:NetStream = new NetStream(nc); ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); const buffer_time:Number = 2; ns.bufferTime = buffer_time; ns.client = this; ns.play(VidReference); var vid:Video = new Video(); vid.attachNetStream(ns); addChild(vid); vid_frame.addChild(vid);
3. Это функция, которая определяет, когда воспроизведение видео завершено, все еще на кадре 2:
function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetStream.Play.StreamNotFound": newTrack(); break; case "NetStream.Play.Stop": newTrack(); break; } }
А функция newTrack просто присваивает переменной trackToPlay значение (имя файла следующего видео). И затем говорит gotoAndPlay frame 1, так что это своего рода повторная инициализация проигрывателя. Объекты повторно объявлены во фрейме 2, проблема здесь в этом?4. Пожалуйста, разместите этот код в вашем первоначальном вопросе. Читать это так больно. Также включите вашу newTrack( ); функцию.