To quote Remy Lebeau (TeamB):
Çalma medya
TMediaPlayer doğal olmayan herhangi bir dosya sistemi veri kaynaklarını uygulamıyor
, böylece kendi özel codec'i uygulamak zorunda kalacak/ortam Ancak, kaynak verilerini (ve oynat) kaynak olarak kullanabilirsiniz. TMediaPlayer'ın kendi DosyaAdı bir dosya sistemi üzerinde mevcut olup olmadığını umurumda değil . Sadece TMediaCodecManager sınıfına erişmek için uygun bir TMedia nesnesini geri almak ve DosyaName'nin hangi kaynaktan geldiği kaynağından veri çalmasını ister.
FMX.Media.TMedia'dan türetilen özel bir sınıf oluşturun ve gerektiğinde soyut yöntemlerini uygulayın (DoPlay(), DoStop(), GetDuration(), vb.). Bu sınıfı, gerçek medya verilerine erişir ve oynatır, böylece istediğiniz DosyaAdı'nı geçirebilir ve gerektiğinde kaynak akışınızı yükleyebilir/erişebilir. Örnekler için varsayılan TMedia uygulamalarında 'a bakın (FMX.Media.Win.TWindowsMedia, FMX.Media.Mac.TQTMedia, vb.).
FMX.Media.TCustomMediaCodec türetilmiş bir özel sınıf oluşturun ve özel TMedia sınıfının bir örneğini döndürmek için onun soyut CreateFromFile() yöntemini uygulamak. Daha sonra bu sınıfı program başlangıcında FMX.Media.TMediaCodecManager.RegisterMediaCodecClass() kullanarak kaydedebilirsiniz. Bu hile, 'un bir dosya uzantısını kullanarak sınıfa kayıt olmanız gerektiğinden, gerçek bir dosya için benzersiz ve karıştırılamayacak bir şey olan bir şey seçin. Örneğin
:
unit PlayMediaFromResource;
uses
..., FMX.Media;
type
TMyResourceMedia = class(TMedia)
...
protected
function GetDuration: TMediaTime; override;
function GetCurrent: TMediaTime; override;
procedure SetCurrent(const Value: TMediaTime); override;
function GetVideoSize: TPointF; override;
function GetMediaState: TMediaState; override;
function GetVolume: Single; override;
procedure SetVolume(const Value: Single); override;
procedure UpdateMediaFromControl; override;
procedure DoPlay; override;
procedure DoStop; override;
public
constructor Create(const AFileName: string); override;
destructor Destroy; override;
end;
TMyResourceMediaCodec = class(TCustomMediaCodec)
public
function CreateFromFile(const AFileName: string): TMedia; override;
end;
function TMyResourceMediaCodec.CreateFromFile(const AFileName: string): TMedia;
begin
Result := TMyResourceMedia.Create(AFileName);
end;
constructor TMyResourceMedia.Create(const AFileName: string);
var
ResName: string;
begin
ResName := ChangeFileExt(AFileName, ''); // strip off '.myres' file extension
// load resource identified by ResName as needed...
end;
....
initialization
TMediaCodecManager.RegisterMediaCodecClass('.myres', 'My Resource Stream',
TMediaType.Audio, TMyResourceMediaCodec);
Sonra bunu yapabilirsiniz:
MediaPlayer1.FileName := 'MyResourceName.myres';
MediaPlayer1.Play;
end;
-
Ya da sadece bir dosyaya kaynak kaydedebilirsiniz
ise Bir şekilde kaynağı bir dosyaya kaydedebilir ve o zaman her şey çok daha kolay. Sadece TMediaPlayer ürününü kullanabilirsiniz.
Oynatmayı bitirdiğinizde dosyayı silmeyi unutmayın, aksi takdirde diski doldurursunuz.
http://codeverge.com/embarcadero.delphi.firemonkey/tmediaplayer-and-resource-files/1059748 –
Bu işe yaramıyor. Örneğin bu sınıfla ilgili tonlarca hata alıyorum. – danshat
"Tonlarca hata alıyorum", devam etmemiz için çok şey vermiyor. Bunu sıralamak için iyi şanslar. –