Освобождение видео файла после проигрывания
От: SeVa  
Дата: 18.05.06 09:20
Оценка:
При помощи DirectShow создаю граф, открываю файл проигрываю его, закрываю, удаляю правильно все объекты в том числе и graphBuilder, пытаюсь удалить файл он как-то хитро удаляется доступа к нему после удаления нет но файл виден в Explorer. Исчезает файл только после закрытия всего приложения. Причём таким образом ведут себя все файлы открытые в приложении. Смотрел примеры из DirectSDK там тоже самое, файлы как бы не полностью освобождены.

Смотрел на GraphEdit, открывал так файлы в нём, тоже самое, пока не закроешь приложение файлы нормально удалить нельзя.

Хотя BSPlayer например нормально себя ведёт, как только я закрыл файл и начал проигрывать другой то можно удалять файл и он сразу удаляется.

Подскажите что можно сделать чтобы можно было удалить файл сразу после проигрывания, при этом не закрывая само приложение. Обискал весь инет, видел подобные вопросы но ответов на них нет либо есть тупые типа "Сделай release GraphBuilder", что совсем не помагает.
Re: Освобождение видео файла после проигрывания
От: Денис Майдыковский Россия http://www.maydyk.com
Дата: 18.05.06 09:30
Оценка:
Здравствуйте, SeVa, Вы писали:

SV>Подскажите что можно сделать чтобы можно было удалить файл сразу после проигрывания, при этом не закрывая само приложение. Обискал весь инет, видел подобные вопросы но ответов на них нет либо есть тупые типа "Сделай release GraphBuilder", что совсем не помагает.


А ты уверен что файл "держит" именно твоё приложение? Для проверки используй утилиту handle от systemtools.
Re: Освобождение видео файла после проигрывания
От: Аноним  
Дата: 18.05.06 09:31
Оценка:
Тупо, но если проигрываемые файлы маленькие (допустим пара мегабайт), то можно проигрываемый файл сначала скопировать во ввременную папку (поверх заранее определённого файла) и проигрывать оттуда (напрмер в temp/copy_file.avi), тогда исходный файл никак к проигрываемому привязан не будет.
Возможные грабли : при втором копировании может не получиться переписать предыдущий файл по той же причине почему не получается его удалить. Надо пробовать.

Андрей.
Re[2]: Освобождение видео файла после проигрывания
От: SeVa  
Дата: 18.05.06 09:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тупо, но если проигрываемые файлы маленькие (допустим пара мегабайт), то можно проигрываемый файл сначала скопировать во ввременную папку (поверх заранее определённого файла) и проигрывать оттуда (напрмер в temp/copy_file.avi), тогда исходный файл никак к проигрываемому привязан не будет.

А>Возможные грабли : при втором копировании может не получиться переписать предыдущий файл по той же причине почему не получается его удалить. Надо пробовать.

А>Андрей.


Файлы большие по 100 — 700 метров.

Не знаю даже что дделать, перепробовал все примеры и всё подряд, нормально работают тока BSPlayer, а вот например Windows media player 10.0 точно так же лочит эти файлы.(можете сами попробовать открыть несколько файлов а потом не закрывая плеера попробуйте их удалить из Far)

Просто думаю если BSPlayer как-то их освобождает то значит можно как-то это сделать.

Ещё заметил одну вещь если проигрываешь MPEG2 файлы то всё отлично все сразу освобождают его и можно удалять а вот остальные типы, фиг.
Re: Освобождение видео файла после проигрывания
От: SeVa  
Дата: 19.05.06 08:25
Оценка:
Здравствуйте, SeVa, Вы писали:

SV>При помощи DirectShow создаю граф, открываю файл проигрываю его, закрываю, удаляю правильно все объекты в том числе и graphBuilder, пытаюсь удалить файл он как-то хитро удаляется доступа к нему после удаления нет но файл виден в Explorer. Исчезает файл только после закрытия всего приложения. Причём таким образом ведут себя все файлы открытые в приложении. Смотрел примеры из DirectSDK там тоже самое, файлы как бы не полностью освобождены.


SV>Смотрел на GraphEdit, открывал так файлы в нём, тоже самое, пока не закроешь приложение файлы нормально удалить нельзя.


SV>Хотя BSPlayer например нормально себя ведёт, как только я закрыл файл и начал проигрывать другой то можно удалять файл и он сразу удаляется.


SV>Подскажите что можно сделать чтобы можно было удалить файл сразу после проигрывания, при этом не закрывая само приложение. Обискал весь инет, видел подобные вопросы но ответов на них нет либо есть тупые типа "Сделай release GraphBuilder", что совсем не помагает.



Всё пролема решена, надо использовать AVI/WAV FileSource он нормально освобождает файл. При этом надо проверить что подаваемый файл сможет открыть AVI/WAV FileSource, для этого надо использовать библиотеку avifil32.dll и метод AVIFileOpen, если смогли открыть файл то это не какой-нить mpeg иможно создавать AVI/WAV FileSource и добавлять его в граф.

P.S. Windows Media Player(не освобождающий файл полностью) оказался тупее чем BSPlayer(освобождающий файл полностью).

Всем спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.