Einzelnen Beitrag anzeigen

CHackbart

Registriert seit: 22. Okt 2012
252 Beiträge
 
#5

AW: Fairplay Apple

  Alt 18. Aug 2021, 19:55
Klar,

anbei der Code zum Hinzufügen von DRM Infos an den AVPlayer. Ich dachte, ich hab dir das schon via PM zugesandt.

Damit du DRM geschützte Inhalte lesen kannst musst du noch den Player anpassen. Für FMX.Media.Mac.pas sieht das so aus:

Delphi-Quellcode:
constructor TMacMedia.Create(const AFileName: string);
var
  LURL: NSUrl;
  LAbsoluteFileName: string;
  LAsset: AVURLAsset;
begin
  inherited Create(AFileName);
  AVMediaTypeAudio; // Force load the framework
  if FileExists(FileName) then
  begin
    if ExtractFilePath(FileName).IsEmpty then
      LAbsoluteFileName := TPath.Combine(TPath.GetHomePath, FileName)
    else
      LAbsoluteFileName := FileName;
    LURL := TNSUrl.Wrap(TNSUrl.OCClass.fileURLWithPath(StrToNSStr(LAbsoluteFileName)));
  end
  else
    LURL := StrToNSUrl(FileName);
  if LURL = nil then
    raise EFileNotFoundException.Create(SSpecifiedFileNotFound);
  FPixelBufferBitmap := TBitmap.Create;
  LAsset := TAVURLAsset.Wrap(TAVURLAsset.OCClass.URLAssetWithURL(LURL, nil));
  if LAsset.hasProtectedContent then
   ContentKeyManager.addContentKeyRecipient(LAsset);

  FPlayerItem := TAVPlayerItem.Wrap(TAVPlayerItem.OCClass.playerItemWithAsset(LAsset));
  FPlayerItem.retain;
  FPlayer := TAVPlayer.Wrap(TAVPlayer.OCClass.playerWithPlayerItem(FPlayerItem));
  FPlayer.retain;
  FPlayerLayer := TAVPlayerLayer.Wrap(TAVPlayerLayer.OCClass.playerLayerWithPlayer(FPlayer));
  FPlayerLayer.retain;
  FPlayerLayer.setVideoGravity(CocoaNSStringConst(libAVFoundation, 'AVLayerVideoGravityResizeAspectFill'));
  FPlayerLayer.setAutoresizingMask(kCALayerWidthSizable or kCALayerHeightSizable);
  FVideoView := TNSView.Create;
  FVideoView.retain;
  FVideoView.setWantsLayer(True);
  FVideoView.layer.addSublayer(FPlayerLayer);
  SetupVideoOutput;
end;
Die ContentManager Klasse hat zwei Callbacks die implementiert werden müssen. Zum einen musst du das Zertifikat als TMemoryStream liefern und danach den Request für den Contentkey an deinen Server liefern und das Ergebnis, dann zurück an Fairplay geben. Das funktioniert auf MacOS und iOS. Im englischsprachigen Bereich von Delphi-Praxis steht einiges darüber hier: https://en.delphipraxis.net/topic/53...layer-and-drm/

Christian
Miniaturansicht angehängter Grafiken
1629312582588.jpg  
Angehängte Dateien
Dateityp: zip UFairplay.pas.zip (3,4 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat