Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TMemoryStream über ActiveX an NetStream Objekt in Flash Applikation (https://www.delphipraxis.net/181949-tmemorystream-ueber-activex-netstream-objekt-flash-applikation.html)

gabneo 19. Sep 2014 17:24

TMemoryStream über ActiveX an NetStream Objekt in Flash Applikation
 
Hallo liebe Delphi Gemeinde,

es gibt da einen weißen Fleck auf meiner Wissenslandkarte den ich gerne erschließen würde.
Und zwar möchte ich einen TMemoryStream mit Videodaten an ein "NetStream" Objekt, dass in einer Flash-Applikation die in meinem Wrapper läuft, übergeben. Dazu könnte man möglicherweise "fertige" Wrapper verwenden (z.B. Almediadev Smartflash, f-in-box, delphiflash).
Aber, ich habe den Hauptteil der Funktionalität nach meinen Bedürfnissen bereits umgesetzt und möchte zudem genau verstehen wie es funktioniert :wink:
Leider finde ich auch in der ShockwaveFlashObjects_TLB dazu keine Anhaltspunkte (kann sein das ich sie übersehe).

1. Hat jemand eine Idee wie ich den TMemoryStream an die SWF senden und mit dem NetStream diesen auffangen kann?
2. Wie funktioniert das mit dem Vor- und Zurückspulen bzw. muss ich mich darum kümmern?
3. Ist das Thema AMF / Delphi - kbmMW (extensive AMF0/AMF3 support) der richtige Einstieg?

Vielen Dank!

[EDIT]Leider ist auf der Seite der Flashanwendung NetStream.appendBytes(bytes); keine Option -> ist nicht aufwärtskompatibel zu H.264 codierten Videoformaten wie z.B. *.f4v Dateien sondern erwartet *.flv.[/EDIT]
[EDIT 2]Gerade frisch entdeckt auf der Internetseite von Adobe ist eine Beschreibung wie ich das NetStream Objekt für einen H.264 codiertes Video empfangsbereit machen kann. In Verbindung mit "Pascal librtmp" (torry) könnte ich einen RTMP Server auf localhost eröffnen...aber das finde ich extrem unästhetisch![/EDIT 2]

gabneo 20. Sep 2014 11:22

AW: TMemoryStream über ActiveX an NetStream Objekt in Flash Applikation
 
Bei stackoverflow scheint es eine Umsetzung in C++ zu geben...leider verstehe ich die Lösung nicht. Der von Flash "erwartete" Stream scheint ersetzt zu werden?!
Kann mir jemand bei der Übersetzung ins Delphi helfen?

TiGü 22. Sep 2014 10:07

AW: TMemoryStream über ActiveX an NetStream Objekt in Flash Applikation
 
Zitat:

Zitat von gabneo (Beitrag 1273267)
Kann mir jemand bei der Übersetzung ins Delphi helfen?

Was hast du denn bisher und woran scheitert es zur Zeit?

gabneo 22. Sep 2014 11:22

AW: TMemoryStream über ActiveX an NetStream Objekt in Flash Applikation
 
Vielen Dank für die Antwort. Es hat sich herausgestellt, dass die C++ Lösung ein anderes Ziel verfolgt, nämlich die Flash Datei selbst aus einem Stream heraus zu öffnen. Das ist jedoch gar kein Problem.
Derzeit habe ich, sofern ich das richtig sehe, folgenden einzigen Lösungsweg:

1. Die Flash Anwendung meldet per ExternalAPI/ExternalInterface dass sie das nächste Video benötigt.
2. Der RTMP Server in meiner Applikation antwortet mit dem Stream des Videos.
3. Wird "gespult" meldet die Flash Anwendung per ExternalAPI/ExternalInterface die neue Zielzeit woraufhin die Delphi Anwendung im Stream an die korrekte Stelle springt.
4. Bei Ende des Videos (Darstellung des letzten Bytes) meldet die Delphi Anwendung das Ende des Videos an die Flash Anwendung mal wieder per ExternalAPI/ExternalInterface.

(Alternativ)
Im Processmonitor kann man sehen wie der NetStream (Flash) arbeitet.
Code:
Time               Process Name            PID   Operation                  Path                  Result      Detail
11:50:13,1568031   flashplayer_15_sa.exe   824   IRP_MJ_CREATE            C:\...\src\Movies\video   SUCCESS   Desired Access: Generic Read, Disposition: Open, Options: Sequential Access, Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, AllocationSize: n/a, OpenResult: Opened
11:50:13,1581439   flashplayer_15_sa.exe   824   FASTIO_QUERY_INFORMATION   C:\...\src\Movies\video   SUCCESS   Type: QueryStandardInformationFile, AllocationSize: 25.378.816, EndOfFile: 25.377.805, NumberOfLinks: 1, DeletePending: False, Directory: False
11:50:13,1581571   flashplayer_15_sa.exe   824   FASTIO_QUERY_INFORMATION   C:\...\src\Movies\video   SUCCESS   Type: QueryStandardInformationFile, AllocationSize: 25.378.816, EndOfFile: 25.377.805, NumberOfLinks: 1, DeletePending: False, Directory: False
11:50:13,1581676   flashplayer_15_sa.exe   824   IRP_MJ_READ               C:\...\src\Movies\video   SUCCESS   Offset: 0, Length: 16.384, Priority: Normal
11:50:13,1583294   flashplayer_15_sa.exe   824   FASTIO_QUERY_INFORMATION   C:\...\src\Movies\video   SUCCESS   Type: QueryStandardInformationFile, AllocationSize: 25.378.816, EndOfFile: 25.377.805, NumberOfLinks: 1, DeletePending: False, Directory: False
11:50:13,1583397   flashplayer_15_sa.exe   824   FASTIO_QUERY_INFORMATION   C:\...\src\Movies\video   SUCCESS   Type: QueryStandardInformationFile, AllocationSize: 25.378.816, EndOfFile: 25.377.805, NumberOfLinks: 1, DeletePending: False, Directory: False
11:50:13,1584312   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 16.384, Length: 16.384
11:50:13,1585006   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 32.768, Length: 16.384
11:50:13,1585775   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 49.152, Length: 16.384
11:50:13,1586619   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 65.536, Length: 16.384
11:50:13,1586904   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 96.311, Length: 16.384
11:50:13,1588183   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 112.695, Length: 16.384
11:50:13,1596645   flashplayer_15_sa.exe   824   FASTIO_QUERY_INFORMATION   C:\...\src\Movies\video   SUCCESS   Type: QueryStandardInformationFile, AllocationSize: 25.378.816, EndOfFile: 25.377.805, NumberOfLinks: 1, DeletePending: False, Directory: False
11:50:13,1596735   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 0, Length: 16.384
11:50:13,1596873   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 128.168, Length: 16.384
11:50:13,1597285   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 510, Length: 16.384
11:50:13,1597504   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 132.457, Length: 17.193
11:50:13,1597639   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 96.682, Length: 16.384
11:50:13,1597756   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 222.560, Length: 16.384
...
11:52:10,1706265   flashplayer_15_sa.exe   824   FASTIO_READ               C:\...\src\Movies\video   SUCCESS   Offset: 25.358.444, Length: 16.384
Vielleicht könnte man die in den Arbeitsspeicher geladenen Daten durch eigene ersetzen...aber ich finde das noch hässlicher als einen RTMP Server aufzusetzen. Außerdem fangen dann Antivirenprogramme an zu maulen.

PS: Die Entwickler der Komponenten antworten leider nicht ob ihre Komponente TMemoryStream -> ByteArray/NetStream kann...sonst hätte ich mir mittlerweile einfach eine Komponente dafür gekauft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz