Мне кажется, что проблема не столько в том, как использовать библиотеку DirectShow ( специально разработан для этого `DirectShow.Net Forum ), а в том, как использовать встроенный ресурс.
Я столкнулся с чем-то похожим несколько лет назад на контрактной работе, когда работодатель беспокоился, что какой-то клиент может украсть его конфиденциальную информацию. Моя информация была в сотнях PDF-документов, но идея работает и с видеофайлами.
Вот как я решил эту проблему:
Сначала поместите видеофайл в свой список ресурсов: я использую Visual Studio
, поэтому я захожу в Свойства Project
, нажимаю вкладку Ресурсы, выбираю опцию «Файлы», затем выбираю Add Resource
> Add Existing File...
Добавьте следующие два namespaces
в файл кода, который вы будете использовать:
using System.IO;
using System.Diagnostics;
- Наконец, где вы хотите воспроизвести видеофайл, просто сделайте что-то похожее на следующее:
Process player = null;
string tempFile = "~clip000.dat";
try {
File.WriteAllBytes(tempFile, Properties.Resources.MyMovie_AVI);
player = Process.Start(tempFile);
player.WaitForExit();
} finally {
File.Delete(tempFile);
}
Скорее всего, вы будете вызывать не метод Process.Start
, а соответствующий метод DirectShow
. Идея все та же: Извлеките свои ресурсы в виде массива byte
, запишите их в новый, временный файл, используйте файл, а затем удалите этот файл, когда закончите.
Обязательно поместите оператор Delete
в блок finally
, чтобы в случае возникновения ошибок или закрытия пользователем программы во время воспроизведения файла ваше приложение по-прежнему очищало старый файл.
EDIT:
Я думаю, что это может быть жизнеспособным способом сделать это:
using (MemoryStream ms = new MemoryStream(Properties.Resources.MyMovie_AVI)) {
// Now you have to find a way in `DirectShow` to use a Stream
}