1

I finished controlling mplayer using pipe in Windows with -slave command (ftp://ftp2.mplayerhq.hu/MPlayer/DOCS/tech/slave.txt) but I don't know how to do that in MacOS. Because MacOS developing is new for me, so, I still have Windows concept in my mind. So, I decided to use Pipe in OSX also. This is my code to create 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;

In button 1, I execute runInMacOSX: "/mplayer -slave /test.avi" and it executed correctly. But in button 2, I'd like to pause the mplayer by sending "pause" command. I got stuck:

var
  a: NSData;
  str: NSString;
begin
  str := TNSString.Wrap(TNSString.OCClass.stringWithUTF8String(PAnsiChar('pause')));
  a := str.dataUsingEncoding(NSUTF8StringEncoding);
  LPipe.fileHandleForWriting.writeData(a);

How can I solve this problem? Thank you

LightBulb
  • 964
  • 1
  • 11
  • 27
Hoang Le
  • 109
  • 3

0 Answers0