Здравствуйте. Есть у меня видео файл сохраненный в своем контейнере. Доступ осуществляется через Stream. Каким образом можно его проигрывать DirectShow???
В примерах такого не вижу… все только файлы читают. А как передать ему тот же файл но как Stream не понятно. Может кто знает??
https://basicsprog.ucoz.ru/publ/6-1-0-39
Сам не пробовал, но там пишут, что работает.
//создаем поток из файла для чтения
FileStream := TFileStream.Create('video1.avi', fmOpenRead);
//получаем дескриптор потока
FileStreamHandle := FileStream.Handle;
//получаем размер
ResSize := FileStream.Size;
//выделяем память
GetMem(Mem, ResSize);
//читаем данные в память
ReadFile(FileStreamHandle, Mem^, ResSize, BytesRead, nil);
//освобождаем поток
CloseHandle(FileStreamHandle);
Код кривой, но принцип понятен. Точнее, это просто кривая загрузка файла из ресурсов. А суть в этих строчках:
// Создаем поток для нашего source фильтра
Stream := TBCMemFileStream.Create(Mem, ResSize, KBPerSec);
hr := S_OK;
Reader := TBCMemFileReader.Create(Stream, pmt, hr);
// Make sure we don't accidentally go away!
Reader._AddRef;
Тут они какой-то TBCMemFileReader
юзают, а потом передают его в Граф.
Очень забавно. Это видимо какой то кастомный фильтр. Ну да … технически это наверное рабочий вариант. Если только раскурить разработку фильтров для мертвой технологии. ))