Загрузка mp4 из ресурсов

Maksim

Поклонник кармы
Местный
Сообщения
102
Розыгрыши
0
Решения
1
Репутация
134
Реакции
126
Баллы
738
Интересует как можно сделать реализацию в C# проигрывания mp4 видео через Nuget либу WMPLib с Windows Form без сохранения на диск?
Есть какой то вариант без BoxedApp и других VM проигрывания на Windows Form?
Может есть какой то вариант загрузить в память и проиграть из неё, а после закрытия приложения выгрузить?

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

default_npc

Постоялец
Проверенный
Сообщения
1 040
Розыгрыши
0
Решения
22
Репутация
1 166
Реакции
1 080
Баллы
1 105
Может есть какой то вариант загрузить в память и проиграть из неё, а после закрытия приложения выгрузить?
я конечно может не понял конечную цель, из поста не совсем понятно что ты делаешь, но если тебе надо просто видео проиграть, то почему бы не встроить его с ютуб? формы это умеют
 

Maksim

Поклонник кармы
Местный
Сообщения
102
Розыгрыши
0
Решения
1
Репутация
134
Реакции
126
Баллы
738
я конечно может не понял конечную цель, из поста не совсем понятно что ты делаешь, но если тебе надо просто видео проиграть, то почему бы не встроить его с ютуб? формы это умеют
Не хотелось бы использовать внешние проигрыватели.
Цель на заднем фоне Windows Form проигрывать видео с логотипом используя WMPLib из Nuget.
Если сохранить на диск из ресурсов все работает, но файл только мешает.
Можно конечно сохранять его в temp папку, но хотелось бы из памяти напрямую прочитать.
Просто искал все возможные варианты, но нет толком информации по этому вопросу.
 

default_npc

Постоялец
Проверенный
Сообщения
1 040
Розыгрыши
0
Решения
22
Репутация
1 166
Реакции
1 080
Баллы
1 105
Просто искал все возможные варианты, но нет толком информации по этому вопросу.
создай на цуберфоруме подобный тред
наш форум конечно вне конкуренции, но там обитает большая куча бородатых программистов и девелоперов, вероятность получить ответ на верно заданный вопрос - 95%
 

kick

Магистр Йода
Administrator
Сообщения
6 683
Розыгрыши
14
Репутация
5 277
Реакции
5 544
Баллы
2 688
Интересует как можно сделать реализацию в C# проигрывания mp4 видео через Nuget либу WMPLib с Windows Form без сохранения на диск?

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

Maksim

Поклонник кармы
Местный
Сообщения
102
Розыгрыши
0
Решения
1
Репутация
134
Реакции
126
Баллы
738
WinForms уже давно объявлены легаси и устарели. WPF на самом деле простой, стоит только перешагнуть через понимание MVVM и окажется, что даже проще разрабатывать, чем на винформах, к тому же есть .
Да и вообще уже развивается WinUI 3, которая всё унифицируется и дальше. Немного инфографики по этому поводу, к тому же WPF так же уже устарел как и UWP, хотя WPF самый популярный, поэтому просто берём avalonia.
Посмотреть вложение 37489
Хотя они объявлены и легаси но оптимизацию свою они получили .
Но зачем на устаревшем делать?
Есть свои причины делать не на wpf, потому что приложение на net framework 2.0 :)
Просто у большинства из коробки уже стоит net framework 2.0, выше возможно не у всех установлено.
Как будет времени больше, сделаю на С++ с GDI, но пока что C#.
 

kick

Магистр Йода
Administrator
Сообщения
6 683
Розыгрыши
14
Репутация
5 277
Реакции
5 544
Баллы
2 688
Есть свои причины делать не на wpf, потому что приложение на net framework 2.0 :)
Не вижу причин морально устаревшее. А делать на 2.0 это значит поддерживать хрюшу, но нет 3 спокойно поддерживает как и соответственно WPF.
Просто у большинства из коробки уже стоит net framework 2.0, выше возможно не у всех установлено.
Ну давайте тогда писать под Win98? Не ну а что у многих он стоит ещё. Не вижу проблем сделать информацию и перекидывание в случае чего на сайт майков и выкачать оттуда.
Как будет времени больше, сделаю на С++ с GDI, но пока что C#.
Какая разница? И если так то может сразу на фортране он то точно у всех будет? А может сразу на ассемблере? Вот тут то 100% не прогадать. И чем это будет отличаться от шарпового приложения? Тогда уж с QT делать.
 

Maksim

Поклонник кармы
Местный
Сообщения
102
Розыгрыши
0
Решения
1
Репутация
134
Реакции
126
Баллы
738
Не вижу причин морально устаревшее. А делать на 2.0 это значит поддерживать хрюшу, но нет 3 спокойно поддерживает как и соответственно WPF.

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

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

òbi

-
Партнер
Сообщения
601
Розыгрыши
8
Решения
7
Репутация
1 228
Реакции
554
Баллы
863
Maksim, а такой вот вариант?)

создаем на сайте файл video.html
HTML:
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <style>
            video {
                width: 100%;
                height: auto;
            }
        </style>
    </head>
    <body>
        <video autoplay loop>
            <source src="https://domain.ru/uploads/videos/intro.mp4" type="video/mp4">
            <source src="https://domain.ru/uploads/videos/intro.ogv" type="video/ogg">
            <source src="https://domain.ru/uploads/videos/intro.webm" type="video/webm">
            <object data="https://domain.ru/uploads/videos/intro.swf" type="application/x-shockwave-flash">
                <param name="movie" value="https://domain.ru/uploads/videos/intro.swf">
            </object>
            Your browser doesn't support HTML5 video tag.
            Если видео не поддерживается, наверно сможем показать тут картинку)
        </video>
    </body>
</html>

при загрузки формы (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

результат
1624296355979.png
 

Maksim

Поклонник кармы
Местный
Сообщения
102
Розыгрыши
0
Решения
1
Репутация
134
Реакции
126
Баллы
738
Вариант с браузером хороший, но буду искать решение чтобы и на windows form можно было проиграть видео из ресурсов без сохранения на диск.
В крайнем случае если не найду решение, сделаю пусть уже на диск сохраняет в temp папку и удаляет при закрытии лаунчера. :Coffee:
В будущем сделаю уже не на C#.
 

Daan Raven

Выдающийся
Проверенный
Сообщения
923
Розыгрыши
0
Решения
1
Репутация
1 037
Реакции
437
Баллы
1 473
Эм, ну так сделай через ресурс, как и хотел.

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

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

Maksim

Поклонник кармы
Местный
Сообщения
102
Розыгрыши
0
Решения
1
Репутация
134
Реакции
126
Баллы
738
Эм, ну так сделай через ресурс, как и хотел.

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

Похожим образом делается и на плюсах, только там винапиха юзается (еще бы).
Это я знаю, но это не работает с видео файлами.
В моем случае WMPLib и mp4
 

Daan Raven

Выдающийся
Проверенный
Сообщения
923
Розыгрыши
0
Решения
1
Репутация
1 037
Реакции
437
Баллы
1 473
Ну WMPLib-ой это точно не сделать. Если нужно делать под систему, на которой 2-ой фреймворк - это максимум, что можно выжать, то просто лучше писать уже сразу на плюсах, так как в любом случае от нативной либки, поддерживающей mp4 тут не обойтись. Как говорится: если долбиться в жопу, то уже сразу по жесткому.
 

Maksim

Поклонник кармы
Местный
Сообщения
102
Розыгрыши
0
Решения
1
Репутация
134
Реакции
126
Баллы
738
Ну WMPLib-ой это точно не сделать. Если нужно делать под систему, на которой 2-ой фреймворк - это максимум, что можно выжать, то просто лучше писать уже сразу на плюсах, так как в любом случае от нативной либки, поддерживающей mp4 тут не обойтись. Как говорится: если долбиться в жопу, то уже сразу по жесткому.
В общем сделаю пока что копированием mp4 на диск, потом будет времени больше сделаю на С++.
Другой вариант использовать VM и все собрать в 1, но с этим могут быть ложные срабатывания антивирусов как в случае с темидой.
Чтобы лишнее в приложении не таскать за собой так как WMPLib без исходников, закинул все через ILMerge.
 
Сверху Снизу