please, help! Delphi and libvlc.dll output stream to file

This forum is about all development around libVLC.
orskavto
New Cone
New Cone
Posts: 4
Joined: 17 Jan 2019 07:39

please, help! Delphi and libvlc.dll output stream to file

Postby orskavto » 17 Jan 2019 08:31

Hello!
libvlc.dll ver3.0.6.0 windows
i use an example: https://wiki.videolan.org/Using_libvlc_with_Delphi/
The original example works fine, but I need to add a video entry to the file.
I was looking for a special function for this, but it turned out that the only way to write to the file is to use the Command Line.
I'm trying to do this:

Code: Select all

... libvlc_new : function(argc : Integer; argv : PAnsiChar) : Plibvlc_instance_t; cdecl; ... procedure Tlibvlc.StartPlay(AdressKamer:AnsiString; PanelHandle:Pointer); const argv : PAnsiChar = '--sout="#duplicate{dst=std{access=file,mux=ps,dst=''d:\file.mpg''}, dst=display}"'; begin vlcInstance := libvlc_new(1, argv); ....
different string combinations. but I get the error Access violation:
Image

It was possible to get rid of errors(@argv instead of argv):

Code: Select all

vlcInstance := libvlc_new(1, @argv); vlcMedia := libvlc_media_new_location(vlcInstance, 'rtsp://admin:456@192.168.1.50/mpeg4cif'); vlcMediaPlayer := libvlc_media_player_new_from_media(vlcMedia); libvlc_media_release(vlcMedia); libvlc_media_player_set_hwnd(vlcMediaPlayer, PanelHandle); libvlc_media_player_play(vlcMediaPlayer);
however, the video is displayed on the panel

orskavto
New Cone
New Cone
Posts: 4
Joined: 17 Jan 2019 07:39

Re: please, help! Delphi and libvlc.dll output stream to file

Postby orskavto » 08 Feb 2019 04:59

Пишу ответ на свой вопрос для всех кто столкнулся с этой проблемой:

Code: Select all

libvlc_new(0, nil); - только так
ну не принимает она аргументов, возможно когда-то планировалось что будет принимать.
да оно вам и не надо.
а как-же отправить поток в файл?
Да очень просто:

Code: Select all

var VCLInfo: TShellExecuteInfo; //Информация о процессе F: TFileStream; .... FillChar(VCLInfo, SizeOf(VCLInfo), 0); VCLInfo.cbSize := SizeOf(TShellExecuteInfo); with VCLInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(Setting.VLCfile); {ParamString can contain theapplication parameters.} getMPGfileName; lpParameters := PChar('-I rc '+rtsp://user:password@192.168.1.50/mpeg4cif+' --sout=file/ts:'+fFullFileNameIncSubdir+' --control=rc --rc-host '+Setting.HostRP+':'+IntToStr(Setting.PortRP)); nShow := SW_HIDE; // nShow := SW_SHOWNORMAL; end; VCL_Open:=ShellExecuteEx(@VCLInfo); //Запускаем VLC VCLInfo.hProcess - тут хендл процесса нужен например чтоб убить процесс если тот по хорошему закрываться не захочет а управляем всем через --control=rc --rc-host '+Setting.HostRP+':'+IntToStr(Setting.PortRP) и чтоб его не видно было делаем : -I rc и nShow := SW_HIDE; не забываем проверять что у нас на выходе иногда, VLC типа пишет поток в файл но файл оказывается пустым поэтому через 3-5 секунд после старта проверяем размер файла: F:=TFileStream.Create(fFullFileNameIncSubdir, fmShareDenyNone); FSize:=F.Size; //узнаем размер выходного файла F.Free;
На первый взгляд геморойная реализация
но с другой стороны- VLC сделает все за вас, вам просто нужно проверять его работу.
вы скажете, ну вот зря тока юнит под библиотеку писали....
а вот и не зря.
при проигрывании записаных файлов я пытался уйти от VLC в сторону TMediaPlayer... но ребята, я вам так скажу:
иногда TMediaPlayer при попытке проиграть файл выдает грабли....
именно поэтому я отказался от TMediaPlayer и вернулся снова к VLC

orskavto
New Cone
New Cone
Posts: 4
Joined: 17 Jan 2019 07:39

Re: please, help! Delphi and libvlc.dll output stream to file

Postby orskavto » 08 Feb 2019 05:08

Но ... при проигрывании возникает гемор

Code: Select all

libvlc_media_player_set_hwnd(vlcMediaPlayer, PanelHandle); // тут мы из TPanel делаем экран
после этого события от TPanel такие как например щелчек мышки к нам больше не приходят :(
а мы так хотели например по двойному клику разворачивать окошко на весь экран а при повторном дубл клике сворачивать его.
Ну или еще делать с Tpanel какие недь чудеса.
В общем не ленимся не теряем время, а сразу пишем идем в сторону SetWindowsHookEx для мышки
темболее в инете полно примеров


Return to “Development around libVLC”

Who is online

Users browsing this forum: No registered users and 12 guests