Сейчас на форуме: Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Сделать чтобы shmedia.dll показывала случайный кадр видео
Посл.ответ Сообщение

Ранг: 52.1 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 05 июня 2008 05:19
· Личное сообщение · #1

При режиме "Эскиз страниц" проводника shell расширения выдирают из файлов превью, с видео файлами работает библиотека shmedia.dll - она выдирает первый кадр; хочу сделать, чтобы показывала случайный (в Vist'е вроде-бы тоже случайные кадры показывают).

Нашел функцию-обработчик, которая вызывается проводником для каждого файла - 5CFDA53F, из нее вызывается 5CFDA376, вроде она непосредственно выдирает кадры, там идут обращения к qedit.dll - это все на базе OLE, имен функций нет (и интернета чтобы скачивать символы у меня нет), чет не получается разобраться.

Может кто поможет?



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 05 июня 2008 08:18
· Личное сообщение · #2

Wyfinger Видео-файлы имеют разные форматы. shmedia.dll скорее всего вызывает сложную "кухню" : определение расширения файла и вызов нужного кодека. Некоторые плееры(виндовый в т.ч.) вообще не умеют играть видео из середины, т.ч. придется писать свою DLL Это не очень сложно, но и не так просто.
Случайные по-моему показывать плохо, т.к. превью-картинка нужна чтобы ориентироваться в куче видео, а если каждый день там будут новые картинки, то человек запутается.
Да вспомнил : там все сложнее. Кадр выдирается один раз и его суют в Thumbs.db



Ранг: 35.3 (посетитель)
Активность: 0.01=0.01
Статус: Участник

Создано: 05 июня 2008 09:59 · Поправил: Gauri
· Личное сообщение · #3

tundra37 пишет:
Да вспомнил : там все сложнее. Кадр выдирается один раз и его суют в Thumbs.db

Поставь галочку "Не кэшировать эскизы" (Do not cache thumbnails) в свойствах папки - Thumbs.db создаваться не будет.
А я себе вообще отключил это выдирание кадров (в реестре в ветке CLSID), а то при файлах с жутко нестандартными кодеками explorer.exe дох.
И информационности в первом кадре мало - он или чёрный, или с мусором. Вот не случайный, а, к примеру, сотый или тысячный - другое дело.



Ранг: 52.1 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 05 июня 2008 10:00
· Личное сообщение · #4

2 tundra37
Писать свою просто лень, ну и интересно все-таки.
Понятно, что нужно сначала определить кодек, в shmedia это делается при помощи интерфейса IAVIStream.
Но мне кажется так или иначе должна быть функция вроде getfirstframe или seek/getframe.
Думаю имея символы можно было бы скорее разобраться.




Ранг: 467.7 (мудрец), 5thx
Активность: 0.270
Статус: Участник
Иной :)

Создано: 05 июня 2008 13:00 · Поправил: [HEX]
· Личное сообщение · #5

Wyfinger
Ну тогда уж чтобы получить случайный кадр тебе нужно будет узнать сколько всего кадров в ролике и уже в пределах этого числа и прыгать. Иначе будет какая нить попа еcли прыгнешь на несуществующий кадр.

-----
Computer Security Laboratory




Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 05 июня 2008 13:26
· Личное сообщение · #6

Gauri пишет:
а то при файлах с жутко нестандартными кодеками explorer.exe дох.

Во во.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 05 июня 2008 13:31
· Личное сообщение · #7

Почему бы не использовать XnView, например, или ACDSee? Или нравится именно обычный Проводник? Еще меня удивляет глупость проггеров Мелкософта. Вот выше говорили, что Explorer часто падает при показе эскизов с кривыми кодеками. Причем падает вся оболочка. Могли бы сделать некоторый EXE, который бы занимался открытием и извлечением кадра и выдавал бы результат в STDOUT. А оболочка бы это принимала. Ничего бы не падало...

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 июня 2008 15:50
· Личное сообщение · #8

Tim
всё бы висло



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 05 июня 2008 19:24
· Личное сообщение · #9

Tim Ну мескософт все предусмотрел по своему - хотите чтобы не грохался - запускайте окна проводника в отдельных процесах(есть такая настройка). Правда потом на 512 оперативы работать невозможно.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 52.1 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 06 июня 2008 00:13
· Личное сообщение · #10

2 [HEX]
shmedia импортирует еще функции из avifil32.dll где есть функция GetLength, используется для получения всплывающей подсказки. Я прикидывал ее использовать.

2 Tim
Зачем использовать что-то сторонее, когда есть удобный explorer, ну и конечно здесь "важно сделать это самому".
Кстати если виснит эксплорер, так это не он виноват, а кривые кодеки. С другой стороны в MSDN есть пара статей про ошибки в shell компонентах, короче оба виноваты.
Меня лично бесит то, что они всюду используют COM, вот здесь к примеру можно было бы спокойно обойтись обычной dll, и не было бы проблем с именами функций. Сейчас у меня есть адреса, есть еще заголовки qedit.h - но я не могу сопоставить адреса с именами.

Я пока копаю, но и на Вашу помощь расчитываю.


 eXeL@B —› Программирование —› Сделать чтобы shmedia.dll показывала случайный кадр видео
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати