Help - Search - Member List - Calendar
Full Version: VCD player ?
Форумы RDA > Технический раздел > Общие вопросы
anton
privet vsem ,

koroche seichas ya ispol'zuu WinDVD dlya proigrovaniya VCD, no vot takaya ne zadacha poluchaetsya, on pochemu to mnogie moi VCD ne chochet igrat' ,tak vot sam vopros, kakoi eshe est' choroshiy, ne bol'shoi , player, kotoriy proigroval VCD automatom , nu ili cherez commandnuu stroku "player d:\" tipa tak ... ?

spasibo ...

------------------
ICQ# 20553228

RDA Chat : irc.othersideirc.net
channel #RDA
OR
http://www.antonr.com/rda/jpilot
Everybody is welcome :)

-=aCXRo=-
2 anton: ne chitaet VCDshki s Dat failom kotorij previshaet razmer balvanki da?
esli da u menja ta zhe problema
vobshe ja svoi VCDshki s media playerom igraju..prosto Dat fail ukazivaju i on playit...
anton
aCXRo : mozhet i iz-za etogo, ne vdaval'sya v podrobnosti kak to ... da ya s sasami2k ich igrau , no delo v tom, chto mne nuzhen player kotoriy igral bi , esli bi ya megu ukazal prosto kakoi drive igrat', a ne celiy put' k dat file'u...
Dangeros
WMP-lucij player na svete -igraet vse i kogda tolko zahocesh.Spasibo Billu!
HPV
WMP - самый тормозный player, который мне встречался
anton
nu WMP tak sebe, na low end ... tol'ko kak back-up playes mozhno ispol'zovat'
Dangeros
WPM(starij- samij bereznij k sistemnim resursam. To cto kacetsvo proigrovanija u nego nize-eto sovsem drugoi vopros.Kazetsta, cto vi ni ucenj to ponjaLI NAMEK K BILLU
Nu kanecno anton -ja toze ego ispolzuju kak pleayr takim ze obrazom-no on deistvitelno umeet otkrivatj sve formati esli konecno prisutstuet codeci i nikogda niglucit.
mik
anton, на крайний случай можно написать хоть bat файл, типа:

code:

rem **** playvcd.bat

if exist %1\mpegav\avseq01.dat Goto PlayVCD

rem (play non-vcd command line here)
goto End

:PlayVCD
"C:\Program Files\Windows Media Player\mplayer2.exe" %1\mpegav\avseq01.dat

:End


и запускать его с параметром: playvcd d:

anton
mik:

da ya itak eto bi cherez programmu delal bi, no problema v tom , chto inogda vo pervich tam mozhet bit' neskol'ko AVSEQ0*.dat , vo vtorich inogda tam voobshe drugoe imya tipa MUSIC01.DAT ...

mik
В принципе это тоже поправимо. Можно использовать факт, что все они имеют расширение .dat и лежат в папке mpegav. Надо динамически построить списочек и запускать по очереди. Если хочешь, у меня есть образец кода для C++ Builder.
anton
mik , davai , budem ochen' blagodarni , kak raz na etom i pishem
mik
code:

void __fastcall PlayDat(AnsiString DriveLetter)
{
// DriveLetter is a letter assigned to CD drive
AnsiString mask = DriveLetter + ":\\Mpegav\\*.dat";
TSearchRec sr;
TStringList *dat_list = new TStringList();

try
{
if (FindFirst(mask, faAnyFile, sr) == 0)
{
dat_list->Add(DriveLetter + ":\\Mpegav\\" + sr.Name);

while (FindNext(sr) == 0)
dat_list->Add(DriveLetter + ":\\Mpegav\\" + sr.Name);

FindClose(sr);

// all .dat files are in the dat_list now
// you may launch player with WinExec, ShellExecute or CreateProcess API functions
// see notes below for further considerations
}

}
__finally
{
delete dat_list;
}
}

//---------------------------------------------------------------------------

/*

Notes
=====
Если .dat файл только один, то все просто, запусти player и забудь:

ShellExecute(NULL,
"open",
"C:\\Program Files\\Windows Media Player\\mplayer2.exe",
dat_list->Strings[0].c_str(),
"",
SW_SHOWDEFAULT);


Если файлов несколько, ситуация немного сложнее, перед тем, как запускать очередной, надо подождать, пока не закончится предыдущий.
Для этого можно использовать API CreateProcess():

for (int i = 0; i < dat_list->Count; i++)
{
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));
StartupInfo.cb = sizeof(STARTUPINFO);

PROCESS_INFORMATION ProcessInfo;

AnsiString mplayer = "C:\\Program Files\\Windows Media Player\\mplayer2.exe " + dat_list->Strings[i];

if(CreateProcess(NULL,
mplayer.c_str(),
NULL,
NULL,
TRUE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&StartupInfo,
&ProcessInfo))
{
DWORD dwExitStatus = STILL_ACTIVE;

// loop until media player closes
do
{
if (!GetExitCodeProcess(ProcessInfo.hProcess, &dwExitStatus))
break;
Application->ProcessMessages();
} while (dwExitStatus == STILL_ACTIVE);

// close handles
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
}
}

Однако этот путь не очень хорош, поскольку каждый раз надо ждать, пока юзер закроет media player.
Поэтому проще создать временный плейлист и использовать его:

char TempDir[MAX_PATH + 1];
TempDir[MAX_PATH] = '\0';
GetTempPath(MAX_PATH, TempDir); //GetTempPath() API function returns Windows temp dir with final backslash already appended

dat_list->SaveToFile(AnsiString(TempDir) + "temp.m3u");

ShellExecute(NULL,
"open",
"C:\\Program Files\\Windows Media Player\\mplayer2.exe",
(AnsiString(TempDir) + "temp.m3u").c_str(),
"",
SW_SHOWDEFAULT);

*/


anton
spasibo bol'shoe , posmotrim


slushai , a mozhet ti eshe znaesh kak schvatit' event kogda cd vstavlyaetsya ?

Earl Aries
XING
anton
ne, mne nuzhno zapuskat' svou progu kogda ya vstavlyau v CD-Rom Data/Video/DVD/Audio/MP3 CD ... dlya kazhdogo type'a raznuu progu ... mozhet kto znaet o takoi utiliti
mik
quote:
Originally posted by anton:
slushai , a mozhet ti eshe znaesh kak schvatit' event kogda cd vstavlyaetsya ?

Это пока не приходилось. Надо покопаться в доках микрософта.

mik
anton, вот что обнаружилось.
Надо ловить WM_DEVICECHANGE. Если у него wParam == DBT_DEVICEARRIVAL, то lParam указывает на структуру DEV_BROADCAST_HDR, откуда все можно об устройстве узнать - размер, логическое имя диска и пр. Таким же образом можно отловить и удаление CD.
b-x
anton, посмотри еще сюда:
http://www.geocities.com/SiliconValley/Software/3691/DivxOS/

и сюда:
http://www.media-box.org/ .

Может быть, пригодится...

anton
vsem spasibo, posmotru, proveru

anton
mda ... ili ya chto to ne pravil'no delau ili eshe chto, no vot eto yavno ne chochet rabotat' : (


tagMSG *Msg;


while(true)
{
while(PeekMessage(Msg,NULL,0,0,0))
{
TranslateMessage(Msg);
if (Msg->message == WM_DEVICECHANGE)
{
Application->MessageBox("jjjj","lll",1);

}
}
}

mik
anton, держи работающий код. Сам писал, так что проверено - мин нет.
В Builder'е для отлова одиночных messag'ей лучше всего использовать макро BEGIN_MESSAGE_MAP - END_MESSAGE_MAP

code:

1) Create new application in Builder
2) Place TMemo component on the form Form1
3) Copy message handler declaration and implementation from the code below
*
*
************************* Unit1.h *******************************
*
*
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
private: // User declarations
void __fastcall WMDeviceChange(TMessage &Msg); // this is declaration for WM_DEVICECHANGE message handler
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_DEVICECHANGE, TMessage, WMDeviceChange)
END_MESSAGE_MAP(TForm)
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
********************** End of Unit1.h ***************************
*
*================================================================
*
*
*
************************ Unit1.cpp ******************************
*
*
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <dbt.h> // <<<<-------- DO NOT FORGET TO INCLUDE THIS!!!!!!!!
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//
// This function is executed every time when WM_DEVICECHANGE message arrives from Windows
//
void __fastcall TForm1::WMDeviceChange(TMessage &Msg)
{
PDEV_BROADCAST_HDR pdbch; // structure that contains information about the device affected by a WM_DEVICECHANGE
PDEV_BROADCAST_VOLUME pdbcv; // structure that contains information about a logical volume

switch (Msg.WParam)
{
case DBT_DEVICEARRIVAL: // system detected a new device
pdbch = (PDEV_BROADCAST_HDR)(Msg.LParam);
if (pdbch->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
pdbcv = (PDEV_BROADCAST_VOLUME) pdbch;
if (pdbcv->dbcv_flags == DBTF_MEDIA)
{
// pdbcv->dbcv_unitmask identifies which logical drive
// Each bit in the mask corresponds to one logical drive.
// Bit 0 represents drive A, bit 1 drive B, and so on
// On my system CD-ROM is drive F: so I will check this
if (pdbcv->dbcv_unitmask & 0x20) // drive F:
Memo1->Lines->Add("Disk was inserted in drive F:");
}
}
break;
case DBT_DEVICEREMOVECOMPLETE: // device is gone
pdbch = (PDEV_BROADCAST_HDR)(Msg.LParam);
if (pdbch->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
pdbcv = (PDEV_BROADCAST_VOLUME) pdbch;
if (pdbcv->dbcv_flags == DBTF_MEDIA && pdbcv->dbcv_unitmask & 0x20) // drive F:
Memo1->Lines->Add("Disk was removed from drive F:");
}
break;
default:
break;
}
}
//---------------------------------------------------------------------------
********************* End of Unit1.cpp **************************


Dangeros
2anton-mozet bitj ja osibajus nu slucaino nasel takuju progu:Autoplay Menu Studio v3.0.0.2-sudja po opisaniju ona pozvolaet cerz GNU delatj to cto trebuetsa.
Nasel v http://kickme.to/freegamez4all
Pramoi link na skacivanije:http://members.tripod.lycos.co.kr/sx60nthzgr/ams3002.zip
Izvinite esli eto ne to!
Earl Aries
quote:
Originally posted by Dangeros:

2anton-mozet bitj ja osibajus nu slucaino nasel takuju progu:Autoplay Menu Studio v3.0.0.2-sudja po opisaniju ona pozvolaet cerz GNU delatj to cto trebuetsa.
Nasel v http://kickme.to/freegamez4all
Pramoi link na skacivanije:http://members.tripod.lycos.co.kr/sx60nthzgr/ams3002.zip
Izvinite esli eto ne to!


ошибаешься

anton
Dangeros : spasibo, no mne kazhetsya ti oshibaeshsya, eta shtuka sozdaet te autorun menu dlya samogo cd
b-x
Anton,

а вот глянь-ка еще сюда:
http://www.bitrix.ru/logmon/

и сюда:
http://insomniasoft.hypermart.net/ASYNCRON.HTML

Может это те программки, которые тебе нужны.

Есть еще одна программка (к сожалению, не помню ее страничку):

AutoCDrive - драйвер для подмены функции Windows, автоматически запускающей
программу при вставке CD-ROM в устройство чтения дисков:

1. После установки AutoCDrive Windows не запускает автоматически программу,
предусмотренную производителем диска CD-ROM.
2. При первом использовании CD-ROM выводится окно открытия файла, в котором
следует указать программу (или иной документ), который будет впоследствии
запускаться при вставке этого CD-ROM в устройство. Так же в следующем окне
можно указать необходимые параметры командной строки для запуска, или просто
закрыть окно без указания параметров.
3. После выполнения этих действий, CD-ROM "прописывается" в реестре Windows и
при дальнейшем использовании будет узнан AutoCDrive и запустится программа или
откроется документ, соответствующий серийному номеру вставленного CD-ROM.
4. AutoCDrive запускается автоматически при загрузке операционной системы и
отслеживает встаку и изъятие дисков в устройстве. В это время на панели задач
отображается значок, нажав на который можно вызвать меню, в котором выбрать
нужное действие, а именно:
а) запустить программу (документ) при вставленном диске;
б) изменить параметры автозапуска (вновь "прописать" CD-ROM);
в) отключить AutoCDrive на время или
г) закрыть программу до следующего запуска системы.

anton
b-x: spasibo za linki ... AutoCDDrive ne to chto nado , t.k. on dlya kazhdogo cd propisivaet, a ne dlya gruppi CD ...

Log Monitor poleznaya shtuka no ne dumau chto v etom ee mozhno ochen' chorosho primenit' ...

a vot asyncron mi posmotrim , spasibo

mik
anton, а что, мой вариант у тебя не пошёл?
anton
уммм ... что то я его пропустил , сегодня посмотрю , спасибо.
anton
mik , огромное тебе спасибо за все твои коды ... очень помог ... теперь я вот думаю как узнать , какой ето сд ... вот что я придумал , плз критикуйте ...

VCD : если директория MPEGAV присутсвует в корне ...


MP3: если *.m3u есть в корне или же в первой директории одни mp3

Divx: если на диске один avi file ... если больше чем один , то даем userу выбор ...

DVD: ну точную структуру не помню, но вроде если есть *.vob ...

вроде все

b-x
anton,

Если (точнее, когда) у тебя получится - поделись результатом, пожалуйста!

anton
b-x: вот , держи , только имей ввиду : никакого интерфайса и писал новичек
www.antonr.com/cd/cd-autorun.zip
b-x
anton, спасибо, но это, похоже, не для меня - каких-то библиотек твоя программа требует, работать не хочет. Может, это у меня руки кривые, да и времени не было разбираться, но как-то сложно это все. Я уж лучше пока по старинке, мышой потыкаю...
anton
a ... tebe celuu programmku nuzhno , rabotaushuu ?

seichas sdelaem ... ya ee eshe dorabotal , vrode vse ok rabotaet teper'

anton
vse, zakachal , na tot zhe address : )


1. znachit tak , ona v tray'e ne sidit, pryachetsya srazu zhe, mozhno vikluchit' cherez ctrl-alt-del "cd-autorun"

2. programma bila sdelanna iskluchitel'no dlya menya, poetomu nikakich navorotov ... esli chto , mogu chto podpravit' personal'no ...

3. v "players.cfg" , stoyat nazvaniya diskov, ich menyat' nel'zya, divx2 znachit na odnom diske neskol'ko AVI ...

4. mozhno vse ostal'noe ispravlyat: kakoi vopros sprashivaetsya i kakuu programmu zapuskat' ...

5. esli dobavish parametr %1 k koncu zapuskaemogo file'a , to tuda pri zapuske dobavitsya bukva cd-rom'a (tipa "d:\").

6. ne zabivaiti vikluchat' programmu pered redaktirovaniem players.cfg ...


nu vrode kak i vse, eshe raz povtoryau , delal dlya sebya, tak chto immeite vvidu

Earl Aries
для себя тоже надо стараться
b-x
anton, спасибо, попробую!
Kostya
A если по простому? http://www.geocities.com/ainsht/VCD_PLAY.zip

[This message has been edited by Kostya (edited 10 July 2001).]

b-x
Kostya, а "по-простому" оно ж DIVX не играет, поди? Приду домой - проверю...

[This message has been edited by b-x (edited 10 July 2001).]

[This message has been edited by b-x (edited 10 July 2001).]

Kostya
Не, не играет. Он только VCD (MPEG2) умеет.

[This message has been edited by Kostya (edited 11 July 2001).]

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2025 Invision Power Services, Inc.