@Bullet_Cat
Учусь писать код на С# и C++

Как вшить .mp4 файл в .exe С++?

Есть программа которая воспроизводит видео:
#include<windows.h>

void main()
{
	ShellExecute(0, 0, L"Video.mp4", 0, 0, SW_SHOW);
	
	exit(0);
}


Но вместе с .exe файлом надо таскать mp4 файл. Есть ли возможность засунуть mp4 файл внутрь .exe файла?
  • Вопрос задан
  • 216 просмотров
Решения вопроса 1
Надо добавить файл в ресурсы. Затем при старте программы скопировать файл во временную папку, а при завершении - удалить из этой папки файл.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
perfect_genius
@perfect_genius
Неостановимый генератор идей по улучшению мира
Можно подождать появления в языке #embed или же использовать его из Си. Пока не все компиляторы поддерживают.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
На данный момент вы вызываете внешний плеер, причём не важно, какой — системный ассоциированный с расширением MP4. Не забудьте, что в такой ситуации внешнего плеера уже не будет, придётся налаживать свой.

1. ОС-зависимые ресурсы (например, ресурсы Windows). Поскольку тут у вас и так WinAPI, этот способ вполне катит.
2. Обёртка Qt или чего-то другого над этими ресурсами: где они есть, ресурсы, а где нет, простые массивы. Использовать, если и без того используете Qt.
3. Склеить EXE-файл с MP4. Главное — придумать способ разделить их обратно (например, добавить четыре байта длины в конце).
4. Преобразовать MP4 в байтовый массив, вставить в какой-то CPP.
5. Вариант 4, но более быстрый в компиляции: Использовать ожидаемую функцию Си #embed.
Ответ написан
Комментировать
@rPman
Используя пайпы. В зависимости от используемой ОС, можно создавать файл, содержимое которого будет определяться вашим запущенным приложением. Приложение соответственно будет извлекать файл из своих ресурсов (можно просто разместить в .data секции) и отправлять его в пайп.

Пайп это такой файл, который на диске не занимает места (кроме собственно его имени), все записи которого одним процессом могут быть прочитаны другим (там даже буфера нет на это). Недостатки - это файл-поток, по нему нельзя перемещаться seek, т.е. к примеру mp4 по уму таким образом можно разместить, а вот avi (точнее RIFF) - нет, так как при открытии проигрыватели пытаются прочитать конец файла.

В windows есть механизм (требует admin доступа) регистрации своего windows filesystem filter driver, на более продвинутом уровне позволяет фактически симулировать файловую систему

upd. еще проще, открывать сторонний плеер по http ссылке, а приложение запускает http веб сервер, отдающий файлы из ресурсов. Правда не все плееры умеют работать с сетью (смутно помню что штатный winxp не умел и нужно было скачивать media player у майкрософта)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы