PDA

Просмотр полной версии : Загрузка mp4 из ресурсов


Maksim
21.06.2021, 09:49
Интересует как можно сделать реализацию в C# проигрывания mp4 видео через Nuget либу WMPLib с Windows Form без сохранения на диск?

Есть какой то вариант без BoxedApp и других VM проигрывания на Windows Form?

Может есть какой то вариант загрузить в память и проиграть из неё, а после закрытия приложения выгрузить?

П.С: да есть wpf где проигрывание из ресурсов напрямую, но лучше на windows form.

default_npc
21.06.2021, 10:05
Может есть какой то вариант загрузить в память и проиграть из неё, а после закрытия приложения выгрузить?


я конечно может не понял конечную цель, из поста не совсем понятно что ты делаешь, но если тебе надо просто видео проиграть, то почему бы не встроить его с ютуб? формы это умеют

Maksim
21.06.2021, 10:08
я конечно может не понял конечную цель, из поста не совсем понятно что ты делаешь, но если тебе надо просто видео проиграть, то почему бы не встроить его с ютуб? формы это умеют


Не хотелось бы использовать внешние проигрыватели.

Цель на заднем фоне Windows Form проигрывать видео с логотипом используя WMPLib из Nuget.

Если сохранить на диск из ресурсов все работает, но файл только мешает.

Можно конечно сохранять его в temp папку, но хотелось бы из памяти напрямую прочитать.

Просто искал все возможные варианты, но нет толком информации по этому вопросу.

default_npc
21.06.2021, 10:35
Просто искал все возможные варианты, но нет толком информации по этому вопросу.


создай на цуберфоруме подобный тред

наш форум конечно вне конкуренции, но там обитает большая куча бородатых программистов и девелоперов, вероятность получить ответ на верно заданный вопрос - 95%

kick
21.06.2021, 19:30
Интересует как можно сделать реализацию в C# проигрывания mp4 видео через Nuget либу WMPLib с Windows Form без сохранения на диск?



How to: Embed Windows Media Player on a Form (https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/bb383953(v=vs.90)?redirectedfrom=MSDN)

docs.microsoft.com


WinForms уже давно объявлены легаси и устарели. WPF на самом деле простой, стоит только перешагнуть через понимание MVVM и окажется, что даже проще разрабатывать, чем на винформах, к тому же есть Avalonia (https://avaloniaui.net).

Да и вообще уже развивается WinUI 3, которая всё унифицируется и дальше. Немного инфографики по этому поводу, к тому же WPF так же уже устарел как и UWP, хотя WPF самый популярный, поэтому просто берём avalonia.

Хотя они объявлены и легаси но оптимизацию свою они получили What's new in Windows Forms runtime in .NET 5.0 (https://devblogs.microsoft.com/dotnet/whats-new-in-windows-forms-runtime-in-net-5-0/).

Но зачем на устаревшем делать?

Maksim
21.06.2021, 19:34
How to: Embed Windows Media Player on a Form (https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/bb383953(v=vs.90)?redirectedfrom=MSDN)

docs.microsoft.com


WinForms уже давно объявлены легаси и устарели. WPF на самом деле простой, стоит только перешагнуть через понимание MVVM и окажется, что даже проще разрабатывать, чем на винформах, к тому же есть Avalonia (https://avaloniaui.net).
Да и вообще уже развивается WinUI 3, которая всё унифицируется и дальше. Немного инфографики по этому поводу, к тому же WPF так же уже устарел как и UWP, хотя WPF самый популярный, поэтому просто берём avalonia.

Хотя они объявлены и легаси но оптимизацию свою они получили What's new in Windows Forms runtime in .NET 5.0 (https://devblogs.microsoft.com/dotnet/whats-new-in-windows-forms-runtime-in-net-5-0/).
Но зачем на устаревшем делать?


Есть свои причины делать не на wpf, потому что приложение на net framework 2.0

Просто у большинства из коробки уже стоит net framework 2.0, выше возможно не у всех установлено.

Как будет времени больше, сделаю на С++ с GDI, но пока что C#.

kick
21.06.2021, 19:56
Есть свои причины делать не на wpf, потому что приложение на net framework 2.0


Не вижу причин морально устаревшее. А делать на 2.0 это значит поддерживать хрюшу, но нет 3 спокойно поддерживает как и соответственно WPF.



Просто у большинства из коробки уже стоит net framework 2.0, выше возможно не у всех установлено.


Ну давайте тогда писать под Win98? Не ну а что у многих он стоит ещё. Не вижу проблем сделать информацию и перекидывание в случае чего на сайт майков и выкачать оттуда.



Как будет времени больше, сделаю на С++ с GDI, но пока что C#.


Какая разница? И если так то может сразу на фортране он то точно у всех будет? А может сразу на ассемблере? Вот тут то 100% не прогадать. И чем это будет отличаться от шарпового приложения? Тогда уж с QT делать.

Maksim
21.06.2021, 19:58
Не вижу причин морально устаревшее. А делать на 2.0 это значит поддерживать хрюшу, но нет 3 спокойно поддерживает как и соответственно WPF.

Ну давайте тогда писать под Win98? Не ну а что у многих он стоит ещё. Не вижу проблем сделать информацию и перекидывание в случае чего на сайт майков и выкачать оттуда.

Какая разница? И если так то может сразу на фортране он то точно у всех будет? А может сразу на ассемблере? Вот тут то 100% не прогадать. И чем это будет отличаться от шарпового приложения? Тогда уж с QT делать.


Каждый делает на чем хочет, главное чтобы функцию свою выполнял апдейтер / лаунчер.

Можно хоть на golang сделать при желании, но главная проблема сделать проигрывание из памяти mp4 без сохранения на диск из ресурсов.

òbiòbi верифицированный пользователь.
21.06.2021, 21:39
@Maksim (https://forum.antichat.xyz/members/893314/), а такой вот вариант?)

создаем на сайте файл video.html

HTML:




video {
width: 100%;
height: auto;
}

Your browser doesn't support HTML5 video tag.
Если видео не поддерживается, наверно сможем показать тут картинку)



при загрузки формы (webBrowser1 экземпляр System.Windows.Forms.WebBrowser)

C#:



void
MainFormLoad
(
object
sender
,
EventArgs
e
)
{
webBrowser1
.
Url
=
new
Uri
(
"https://domain.ru/video.html"
)
;
}


С# 3.0

.NET Framework 2.0

результат

Maksim
21.06.2021, 21:43
Вариант с браузером хороший, но буду искать решение чтобы и на windows form можно было проиграть видео из ресурсов без сохранения на диск.

В крайнем случае если не найду решение, сделаю пусть уже на диск сохраняет в temp папку и удаляет при закрытии лаунчера.

В будущем сделаю уже не на C#.

Mizuwokiru
21.06.2021, 23:51
Эм, ну так сделай через ресурс, как и хотел.

На VS 2019 вот так:

1. Открываем свойства проекта (ПКМ на проекте в Solution Explorer -> Properties).

2. Переходим на табку Resources.

3. Если файла ресурсов еще нет - там будет гиперлинк с текстом аля "У тебя нет ресурсов, давай создадим, а". Кликаем на него - в итоге создается Resources.resx.

4. В появившемся компоненте нажимаем Add Resource -> Add Existing File..., выбираем файл и переименовываем ресурс, чтобы название сгенерированной переменной, выделенной под этот ресурс, было по стайл гайду.

5. В коде стучимся напрямую к классу Resources - каждый ресурс в нем будет обявлен как internal static. К примеру, я назвал файл DotaAllstarsMapContent (даже не спрашивай, первый файл, который попался под руку ) - стучусь к нему как Resources.DotaAllstarsMapContent.

Похожим образом делается и на плюсах, только там винапиха юзается (еще бы).

How to load text file from Resources in VC++? (https://stackoverflow.com/questions/4344486/how-to-load-text-file-from-resources-in-vc)

I'm writing a DLL in VC++ and I need to use external text file. I have something like this right now: ifstream file; string line; file.open("C:\\Users\\Me\\Desktop\\textfile.txt"); getline(file,

stackoverflow.com

Maksim
21.06.2021, 23:56
Эм, ну так сделай через ресурс, как и хотел.

На VS 2019 вот так:
1. Открываем свойства проекта (ПКМ на проекте в Solution Explorer -> Properties).
2. Переходим на табку Resources.
3. Если файла ресурсов еще нет - там будет гиперлинк с текстом аля "У тебя нет ресурсов, давай создадим, а". Кликаем на него - в итоге создается Resources.resx.
4. В появившемся компоненте нажимаем Add Resource -> Add Existing File..., выбираем файл и переименовываем ресурс, чтобы название сгенерированной переменной, выделенной под этот ресурс, было по стайл гайду.
5. В коде стучимся напрямую к классу Resources - каждый ресурс в нем будет обявлен как internal static. К примеру, я назвал файл DotaAllstarsMapContent (даже не спрашивай, первый файл, который попался под руку ) - стучусь к нему как Resources.DotaAllstarsMapContent.

Похожим образом делается и на плюсах, только там винапиха юзается (еще бы).

How to load text file from Resources in VC++? (https://stackoverflow.com/questions/4344486/how-to-load-text-file-from-resources-in-vc)

I'm writing a DLL in VC++ and I need to use external text file. I have something like this right now: ifstream file; string line; file.open("C:\\Users\\Me\\Desktop\\textfile.txt"); getline(file,

stackoverflow.com



Это я знаю, но это не работает с видео файлами.

В моем случае WMPLib и mp4

Mizuwokiru
22.06.2021, 01:05
Ну WMPLib-ой это точно не сделать. Если нужно делать под систему, на которой 2-ой фреймворк - это максимум, что можно выжать, то просто лучше писать уже сразу на плюсах, так как в любом случае от нативной либки, поддерживающей mp4 тут не обойтись. Как говорится: если долбиться в жопу, то уже сразу по жесткому.

Maksim
22.06.2021, 01:07
Ну WMPLib-ой это точно не сделать. Если нужно делать под систему, на которой 2-ой фреймворк - это максимум, что можно выжать, то просто лучше писать уже сразу на плюсах, так как в любом случае от нативной либки, поддерживающей mp4 тут не обойтись. Как говорится: если долбиться в жопу, то уже сразу по жесткому.


В общем сделаю пока что копированием mp4 на диск, потом будет времени больше сделаю на С++.

Другой вариант использовать VM и все собрать в 1, но с этим могут быть ложные срабатывания антивирусов как в случае с темидой.

Чтобы лишнее в приложении не таскать за собой так как WMPLib без исходников, закинул все через ILMerge.