我使用 -slave 命令(ftp://ftp2.mplayerhq.hu/MPlayer/DOCS/tech/slave.txt)在 Windows 中使用管道完成了对 mplayer 的控制,但我不知道如何在 MacOS 中执行此操作。因为 MacOS 开发对我来说是新的,所以,我的脑海里仍然有 Windows 的概念。所以,我决定在 OSX 中也使用 Pipe。这是我创建管道的代码:
uses
Macapi.ObjectiveC,Macapi.ObjCRuntime,
Macapi.Foundation;
var
LArray: array of Pointer;
LArgs: NSArray;
LTask: NSTask;
LPipe: NSPipe;
fileHandler: NSFileHandle;
function RawStr(const Str: string): Pointer;
begin
Result := TNSString.OCClass.stringWithUTF8String(PAnsiChar(UTF8String(Str)));
end;
procedure runInMacOSX;
var
data : NSData;
nsText : NSString;
begin
LArgs := TNSArray.Create;
setlength(LArray, 2);
LArray[0] := RawStr('/test.avi');
LArray[1] := RawStr('-slave');
LArgs := TNSArray.Wrap(TNSArray.Alloc.initWithObjects(@(LArray[0]), 2));
LTask := TNSTask.Wrap(TNSTask.Alloc.init);
LPipe := TNSPipe.Create;
fileHandler := TNSFileHandle.Create;
LTask.setLaunchPath(NSStr('/mplayer'));
LTask.setArguments(LArgs);
LTask.setStandardOutput((LPipe as ILocalObject).GetObjectID);
fileHandler := LPipe.fileHandleForReading;
LTask.launch;
end;
在按钮 1 中,我执行 runInMacOSX: "/mplayer -slave /test.avi" 并正确执行。但是在按钮 2 中,我想通过发送“暂停”命令来暂停 mplayer。我被困:
var
a: NSData;
str: NSString;
begin
str := TNSString.Wrap(TNSString.OCClass.stringWithUTF8String(PAnsiChar('pause')));
a := str.dataUsingEncoding(NSUTF8StringEncoding);
LPipe.fileHandleForWriting.writeData(a);
我怎么解决这个问题?谢谢