|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.06.2013, 04:24 | #1 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
Зависание при перемотки видео put_CurrentPosition
Здравствуйте. Играю видео из интернета при помощи DirectShow и фильтров Lav. В некоторых видео (контейнер flv), при попытке перемотать (IMediaPosition - put_CurrentPosition), происходит зависание всего приложения. Данные для воспроизведения в это время загружаются с указанной позиции, если верить снифферу, но воспроизведение не начинается.
Как можно остановить воспроизведение в таком случае и освободить память фильтров и графа? Последний раз редактировалось kangreon; 22.06.2013 в 04:27. |
22.06.2013, 08:21 | #2 |
Далеко не
Участник клуба
Регистрация: 11.08.2011
Сообщений: 1,512
|
может использовать поток?
|
22.06.2013, 12:47 | #3 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...как обычно:
Код:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
22.06.2013, 15:44 | #4 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
Спасибо за ответы.
Попробовал вынести метод put_CurrentPosition в отдельный поток, но это не принесло никаких изменений. Во время загрузки данных, приложение перестает получать от Windows какие-либо сообщения, т.к. DirectShow не возвращает результат на прошлое сообщение. После небольших изменений, пробовал вызывать метод Abort у IGraphBuilder. Это ничего не дало. При вызове метода IMediaControl - Stop из отдельного потока, происходит зависание и в нем. Структура приложения построена таким образом, что в случае зависания DirectShow не зависает основное приложение. Для каждого экземпляра DirectShow создается отдельный поток со своим окном и обработчиком сообщений, созданным при помощи WinApi. Поток с DirectShow и основное приложение отлично синхронизируются и в случае зависания первого, второе отлично работает. Но существует проблема с перемоткой некоторых видео, о которых я писал в первом посте. Все бы ничего, пусть бы себе висело пока не отвиснет само и не освободит ресурсы, но во время этого зависания происходит загрузка данных из интернета (канал не резиновый =( ). Вот и хочется остановить эту уже не нужную загрузку. Может стоит уже начинать смотреть в исходники фильтров Lav? Или может есть способ избежать такого зависания? |
22.06.2013, 15:56 | #5 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...избежать, смотреть скорее исходники. Можно и ведь и отслеживать своеобразный таймаут между началом действия пользователя (изменением положения ползунка) и зависанием потока, и в случае чего прибивать граф.
p.s.: кстати, если не секрет, где взяли этот фильтр LAV?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
22.06.2013, 16:01 | #6 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
Фильтр расположен на Google Code http://code.google.com/p/lavfilters/
UPD Реализовать проверку зависания в течении некоторого времени конечно можно, но опять же, не получится остановить граф и освободить память. PS Разработчик фильтра, как я понял, не уделяет особого внимания на LAV Splitter, т.к. я еще в январе писал о таймауте открытия файлов. В итоге пришлось самому перекомпилировать проект с необходимыми изменениями. Последний раз редактировалось kangreon; 22.06.2013 в 16:11. |
22.06.2013, 17:07 | #7 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...а пробовали сразу в nil интерфейсы, без Stop?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
23.06.2013, 00:45 | #8 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
Попробовал интерфейсы в nil и в конце CoUninitialize. Не помогло.
Спасибо за ответы. Буду пытаться найти решение проблемы в исходниках фильтра. UPD Частично проблему удалось решить изменением кода фильтра. Изменил время ожидания сообщения с постоянно на 20 сек. и в случае превышения таймаута, управление возвращается основному приложению, в котором уже останавливается воспроизведение. Данные больше не загружаются, но освободить память не получается, т.к. зависает на методе Stop. Последний раз редактировалось kangreon; 23.06.2013 в 02:08. |
23.06.2013, 11:39 | #9 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
20 секунд многовато для пользователя, 5-10 в самый раз.
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
24.06.2013, 22:43 | #10 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
А что нельзя использовать TWebBrowser и HTML-код проигрывателя в программе?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зависание при работе с HttpWebRequest при обращении к некоторым сайтам | Mishiko | C# (си шарп) | 0 | 16.08.2012 12:24 |
Ползунок перемотки видео в TMediaPlayer | Illegal Production | Мультимедиа в Delphi | 1 | 05.12.2010 16:36 |
Зависание при скачке файла | Lauri | Общие вопросы Delphi | 2 | 11.10.2010 10:25 |
Зависание ПК при печати. | delf7 | Компьютерное железо | 3 | 09.06.2010 11:16 |