![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
![]()
Здравствуйте. Играю видео из интернета при помощи DirectShow и фильтров Lav. В некоторых видео (контейнер flv), при попытке перемотать (IMediaPosition - put_CurrentPosition), происходит зависание всего приложения. Данные для воспроизведения в это время загружаются с указанной позиции, если верить снифферу, но воспроизведение не начинается.
Как можно остановить воспроизведение в таком случае и освободить память фильтров и графа? Последний раз редактировалось kangreon; 22.06.2013 в 04:27. |
![]() |
![]() |
![]() |
#2 |
Далеко не
Участник клуба
Регистрация: 11.08.2011
Сообщений: 1,512
|
![]()
может использовать поток?
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...как обычно:
Код:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
![]()
Спасибо за ответы.
Попробовал вынести метод put_CurrentPosition в отдельный поток, но это не принесло никаких изменений. Во время загрузки данных, приложение перестает получать от Windows какие-либо сообщения, т.к. DirectShow не возвращает результат на прошлое сообщение. После небольших изменений, пробовал вызывать метод Abort у IGraphBuilder. Это ничего не дало. При вызове метода IMediaControl - Stop из отдельного потока, происходит зависание и в нем. Структура приложения построена таким образом, что в случае зависания DirectShow не зависает основное приложение. Для каждого экземпляра DirectShow создается отдельный поток со своим окном и обработчиком сообщений, созданным при помощи WinApi. Поток с DirectShow и основное приложение отлично синхронизируются и в случае зависания первого, второе отлично работает. Но существует проблема с перемоткой некоторых видео, о которых я писал в первом посте. Все бы ничего, пусть бы себе висело пока не отвиснет само и не освободит ресурсы, но во время этого зависания происходит загрузка данных из интернета (канал не резиновый =( ). Вот и хочется остановить эту уже не нужную загрузку. Может стоит уже начинать смотреть в исходники фильтров Lav? Или может есть способ избежать такого зависания? |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...избежать, смотреть скорее исходники. Можно и ведь и отслеживать своеобразный таймаут между началом действия пользователя (изменением положения ползунка) и зависанием потока, и в случае чего прибивать граф.
p.s.: кстати, если не секрет, где взяли этот фильтр LAV?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
![]()
Фильтр расположен на Google Code http://code.google.com/p/lavfilters/
UPD Реализовать проверку зависания в течении некоторого времени конечно можно, но опять же, не получится остановить граф и освободить память. PS Разработчик фильтра, как я понял, не уделяет особого внимания на LAV Splitter, т.к. я еще в январе писал о таймауте открытия файлов. В итоге пришлось самому перекомпилировать проект с необходимыми изменениями. Последний раз редактировалось kangreon; 22.06.2013 в 16:11. |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...а пробовали сразу в nil интерфейсы, без Stop?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 305
|
![]()
Попробовал интерфейсы в nil и в конце CoUninitialize. Не помогло.
Спасибо за ответы. Буду пытаться найти решение проблемы в исходниках фильтра. UPD Частично проблему удалось решить изменением кода фильтра. Изменил время ожидания сообщения с постоянно на 20 сек. и в случае превышения таймаута, управление возвращается основному приложению, в котором уже останавливается воспроизведение. Данные больше не загружаются, но освободить память не получается, т.к. зависает на методе Stop. Последний раз редактировалось kangreon; 23.06.2013 в 02:08. |
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
20 секунд многовато для пользователя, 5-10 в самый раз.
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
![]() |
![]() |
![]() |
#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 |