Хочу воспроизвести файл в Mplayer для этого
создаю процесс:
- Код: Выделить всё
procedure TMplayerClass.play(index:string);
var Mplayeroptions: String;
begin
if FPlaying then stop;
MplayerProcess:=TProcess.Create(nil);
Mplayeroptions:='-slave -quiet';
MplayerProcess.CommandLine:=MplayerPatch+' '+MplayerOptions+' '+index;
MplayerProcess.Options:= [poUsePipes, poNoConsole];
MplayerProcess.Execute;
if MplayerProcess.Running then
begin
FPlaying:=true;
end;
end;
Если я хочу получить информацию которую выводит Mplayer я использую эту функцию
- Код: Выделить всё
function TMplayerClass.GetProcessOutput: string;
var AStringList: TStringList;
Buffer: string;
BytesAvailable: DWord;
BytesRead:LongInt;
NoMoreOutput: boolean;
begin
AStringList:=TStringList.Create;
try
if GetMPlayerPlaying then begin
repeat
NoMoreOutput := true;
BytesAvailable := MPlayerProcess.Output.NumBytesAvailable;
BytesRead := 0;
while BytesAvailable>0 do
begin
SetLength(Buffer, BytesAvailable);
BytesRead := MPlayerProcess.OutPut.Read(Buffer[1], BytesAvailable);
AStringList.Text := AStringList.Text + copy(Buffer,1, BytesRead);
BytesAvailable := MPlayerProcess.Output.NumBytesAvailable;
NoMoreOutput := false;
end;
until noMoreOutput;
end;
Result:=AStringList.text;
except
result:='';
end;
AStringList.Free;
end;
Когда я запускаю эту функцию непосредственно после запуска mplayer то я получаю то что он выводит в консоль.
Но если послать комманду Mplayer, то GetProcessOutput возвращает пустую строку
комманду посылаю след образом
- Код: Выделить всё
procedure TMplayerClass.SendCommand(cmd: string);
begin
cmd:=cmd+LineEnding;
try
if GetMPlayerPlaying then MplayerProcess.Input.write(cmd[1], length(cmd));
except writeln('Ошибка посылки комманды Mplayer');
end;
end;
Тоесть если я пишу SendCommand('get_time_length'); то при вызове GetProcessOutput я получаю пустую строку...
А мне нужно получить то что выдаст мплеер...
В чем может быть проблема???
система Winxp, lazarus 0.9.25 trunc(16.09.2008) fpc 2.2.2