Hallo,
ich versuche gerade ein Video von Youtube mit VideoBass.dll (+ Bass.dll) abzuspielen. Ich will dafür nicht die Einbettenfunktion von Youtube nutzen, da die nicht bei allen Video aktiviert ist, sondern über http://www.youtube.com/get_video?video_id=(ID)&t=(Key) abrufen. Das funktioniert aber nur zum Teil. Wenn ich die Adresse für die .flv-Videodatei übergib, spielt er es einwandfrei ab, ausser das Vorspulen und die Erkennung der Videolänge nicht funktioniert. Wenn ich aber die Adresse für das High Qualitiy Video im mp4-Format eingebe, zeigt es mir zwar die Video Breite und Höhe an, aber stürzt dann ab (MP4-Datei von Festplatte spielt er aber ab). Die Adresse selber ist richtig, denn wenn ich sie im VLC-Player eingebe, funktiert das Abspielen der MP4-Datei und auch dir FLV-Datei. Auch erkennt der VLC-Player die länge und man kann sogar verspulen. Wie mach ich das jetzt mit Delphi? Erstens mal, dass er das MP4 abspielt und zweitens, dass man vorspulen kann?
Versucht habe ich schon Folgendes:
Das MP4-Video mit delphi runterzuladen bis so ca. 20% fertig sind und die Datei mit BassVideo aufzurufen. Währendessen lass ich den Download weiterlaufen. Das funktioniert auch, problem dabei ist, dass BassVideo, nachdem es 20% des Videos abgespielt hat, einfach stoppt, obwohl die Datei mitlerweilen schon fertig geladen ist.
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var info: TBassVideoInfo;
begin
//Videoformat erkennen
if Pos('&fmt=',Edit8.Text)<> 0 then streamlocation:='C:\stream.mp4' else streamlocation:='C:\stream.flv';
//Datei puffern
HTTPGet4.URL:=Edit8.Text;
HTTPGet4.FileName:=streamlocation;
HTTPGet4.GetFile;
while Puffer<20 do //Warte, bis 20% gepuffert sind
begin
Label8.Caption:='Puffering... '+IntToStr(Puffer);
Application.ProcessMessages;
end;
Bass_Init(-1, 44100, 0, 0, nil);
BassVideo_Init();
chan := BassVideo_StreamCreateFile(PChar(streamlocation), BASSVIDEO_AUTO_RESIZE or BASS_SAMPLE_LOOP, 0, @myVideoProc, nil);
if chan=0 then
begin
showmessage('error');
HTTPGet4.Abort;
exit;
end;
BassVideo_GetInfo(chan,info);
Form2.ClientHeight:=info.height;
Form2.ClientWidth:=info.width;
if chan>0 then Bass_SetVolume(progressbar1.Position / 100);
Form2.Show;
BassVideo_Play(chan); //Starte wiedergabe
end;
Am liebsten wärs mir ohne Download direkt vom Webserver zu spielen, so wie es VLC-Player auch kann, aber notfalls würde mir die Methode mit der Pufferung auch genügen.
(PS: Mit DSPack hab ichs auch schon probiert, jedoch ebenfalls ohne erfolg)