video — u_pbt_video #
← Komponentenreferenz · Inhalt des Handbuchs
Videoplayer: eine Datei des Arbeitsplatzes — von der DLL gestreamt, ein langer Film startet sofort — oder eine URL, mit der eigenen Transportleiste der Komponente, die dem Thema folgt: Wiedergabe, Suche, Zeit, Stumm, Lautstärke. WebVTT-Untertitel, Poster vor der Wiedergabe, Schleife, Geschwindigkeit, Zuschnitt, Aufnahme des aktuellen Bilds als PNG oder JPEG. Was der Benutzer auf der Leiste tut, weiß Ihre Anwendung.
▶ Live ansehen — Demoanwendung, Kachel Video player: der Film, der Code, der ihn steuert, und diese Seite nebeneinander (Internetverbindung für den Beispielfilm nötig).
Auf einen Blick #
| Userobject | u_pbt_video |
| Item-Klasse | — (Komponente ohne Items) |
| Wofür | Ein Schulungsfilm in der Anwendung, ein Produktvideo, die Wiedergabe einer Aufzeichnung, eine Präsentationsschleife am Stand |
| Prinzip | Ein <video> der WebView2-Engine: jedes Format, das sie dekodiert (mp4, webm, m4v, mov, mkv). Die Leiste gehört der Komponente; ihre Gesten laufen über dieselben Verben wie Ihre Aufrufe, also dieselben Ereignisse |
| Abhängigkeit | Die WebView2-Runtime, die die Bibliothek ohnehin braucht — sonst nichts |
Schnellstart #
// A film of the workstation, streamed by the DLL : starts at once
uo_video.is_poster = "img\packimages.dll:PNG/COVER" // shown until the film starts
uo_video.is_subtitles = "films\training.vtt"
uo_video.of_play(/*source*/ "films\training.mp4")
// A URL plays the same way
uo_video.of_play(/*source*/ "https://www.w3schools.com/html/mov_bbb.mp4")
// The user pauses from the bar, or your code does : either way ue_paused fires
uo_video.of_pause()
uo_video.of_seek(/*ms*/ 90000) // to 1:30, in milliseconds
Alles, was Sie einstellen, ist eine Eigenschaft (is_source, ii_volume, ib_loop…), live von der Komponente gelesen; alles, was Sie tun, ist eine Methode (of_play, of_pause, of_stop, of_seek, of_capture); alles, was geschieht, ist ein Ereignis (ue_started, ue_ended, ue_progress…). Eine fehlende Datei ist keine Ausnahme: ue_failed sagt es, und die Meldung erscheint auf dem Bild.
Eigenschaften #
| Eigenschaft | Typ | Standard | Rolle |
|---|---|---|---|
is_source | string | "" | Der Film: eine Datei des Arbeitsplatzes (beliebiger Pfad, gestreamt) oder eine https-URL. Eine http://-Adresse wird abgelehnt (ue_failed, REASON_INSECURE): die Engine stuft sie auf https hoch und scheitert — laden Sie den Film zuerst herunter (restclient, of_download). Formate: mp4, webm, m4v, mov (ein iPhone- oder Kamerafilm in H.264), mkv und die Audioformate; avi, wmv und flv werden an ihrem Namen abgelehnt (REASON_FORMAT). Das Setzen stoppt das Laufende; ib_autoplay entscheidet, ob der neue von selbst startet. Ein Film beliebiger Größe, auch in einer 32-Bit-Anwendung: die DLL streamt ihn in Scheiben, nie die ganze Datei auf einmal; einen Film, den die Engine nicht dekodieren kann, meldet ue_failed. Ein NEUER Film lässt zurück, was zum alten gehörte: seinen Abschnitt, seine Untertitel, Marken und Kapitel (vor jedem Film gesetzt, warten sie auf den ersten); ein Film der Wiedergabeliste behält seine eigenen Untertitel |
ib_autoplay | boolean | false | Startet den Film, sobald is_source gesetzt ist; sonst wartet er auf of_play, die Leiste oder die Tastatur und zeigt is_poster |
ib_muted | boolean | false | Schaltet den Ton stumm, Lautstärke bleibt; auch der Leistenknopf und die Taste M setzen es |
ii_volume | integer | 100 | Lautstärke in Prozent, 0 bis 100; auch der Schieber der Leiste und die Pfeile auf/ab |
ib_loop | boolean | false | Spielt den Film in Schleife bis of_stop; ein Schleifenfilm löst nie ue_ended aus |
ii_rate | integer | 100 | Geschwindigkeit in Prozent, 25 bis 400: 50 = halb, 200 = doppelt, der Ton folgt |
is_stretch | string | "uniform" | Zuschnitt: STRETCH_NONE, STRETCH_FILL, STRETCH_UNIFORM, STRETCH_UNIFORMTOFILL — die vier Modi eines Bilds |
ib_controls | boolean | true | Die Transportleiste der Komponente, im Thema. false blendet sie aus: Ihr Fenster steuert den Film |
is_poster | string | "" | Das Poster vor dem Film: Datei, URL oder pack.dll:NAME, wie die Quelle eines Bilds. Ein Präfix mono:/tint:/white:/black: färbt ein einfarbiges Bild aufs Thema um |
is_subtitles | string | "" | Eine Untertiteldatei, lokal oder https-URL: WebVTT (.vtt) oder SubRip (.srt, konvertiert — UTF-8, UTF-16 oder die ANSI-Codepage des Arbeitsplatzes). Eine URL wird von der Komponente HERUNTERGELADEN: ihr Server muss CORS erlauben (GitHub, ein CDN tun es); eine Ablehnung oder eine http://-URL meldet ue_subtitles_failed, und der Film läuft weiter. Eine Spur; of_add_subtitles stapelt mehrere. Sie gehört zum Film: ein neues is_source entfernt sie |
is_subtitle_lang | string | "" | Die gezeigte Untertitelspur (eine Sprache aus of_add_subtitles); leer = keine |
ii_fps | integer | 25 | Bilder pro Sekunde des Films, für of_step_frames |
ib_remember_position | boolean | false | Merkt sich, wo jeder Film verlassen wurde, und setzt beim nächsten of_play derselben Quelle dort fort |
is_theme_style | string | "" | Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen |
is_theme_mode | string | "" | Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der des Designs) |
is_tooltip | string | "" | Einfacher Tooltip beim Überfahren der Komponente |
is_super_tooltip_title | string | "" | Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip) |
is_super_tooltip_text | string | "" | Text des erweiterten Tooltips (Rich-Markup zulässig) |
is_super_tooltip_image | string | "" | Bild des erweiterten Tooltips |
ib_enabled | boolean | true | false: abgedunkeltes Bild, Leiste und Tastatur inaktiv — außer Escape im Vollbild: man kann es immer verlassen; Ihr Code steuert weiterhin |
ib_scrub_preview | boolean | true | Eine Zeitblase folgt dem Cursor über der Suchleiste (true, Standard), mit dem Kapitel, wenn vorhanden. false blendet sie aus |
ib_pause_when_hidden | boolean | true | Pausiert den Film, wenn die Komponente AUSGEBLENDET wird (eine andere Seite eines PBToolboxAI-Tabs oder -Docks, PBT_SetVisible): ue_paused folgt, und der Film wartet auf of_play, er setzt nie von selbst fort. false lässt ihn laufen (eine Monitorwand). Ein NATIVES PowerBuilder-Tab benachrichtigt die Komponente nicht: rufen Sie of_pause in seinem SelectionChanged auf |
Ein Klick auf das Bild pausiert, ein zweiter setzt fort. Tastatur, wenn der Film den Fokus hat: Leertaste oder K Wiedergabe/Pause, ←/→ fünf Sekunden, ↑/↓ Lautstärke, M stumm, Pos1/Ende.
Methoden #
| Methode | Rolle | |
|---|---|---|
of_play ( ) → long | Spielt is_source von dort, wo er steht: beim ersten Mal von Anfang, danach ab der Pause (ue_resumed). Gibt 0 nach dem Senden zurück, -2, wenn die Komponente nicht erzeugt ist | |
of_play (string as_source) → long | Setzt is_source und spielt sie: derselbe Aufruf wie beim Sound player. Gibt 0 nach dem Senden zurück, -1 ohne Komponente | |
of_pause ( ) → long | Hält den Film an Ort und Stelle an; of_play setzt fort. Gibt 0 zurück, -1 ohne Komponente | |
of_stop ( ) | Stoppt den Film und springt an den Anfang; ue_stopped folgt | |
of_seek (long al_ms) → long | Springt zu einer Position des Films, in Millisekunden, laufend oder nicht; eine lokale Datei sucht sofort. ue_seeked folgt, wie bei der Leiste. Gibt 0 zurück, -2 wenn die Komponente nicht erzeugt ist | |
of_is_playing ( ) → boolean | Wahr, solange ein Film läuft — pausiert eingeschlossen, er ist nicht zu Ende | |
of_is_paused ( ) → boolean | Wahr, solange der Film angehalten ist — durch of_pause, die Leiste oder die Tastatur | |
of_is_buffering ( ) → boolean | Wahr, solange der Film LÄUFT, aber auf seine Daten wartet — die Zeit, die ue_buffering angekündigt hat. Aus der Komponente gelesen, nie aus einer Kopie | |
of_duration ( ) → long | Gibt die Anzahl Millisekunden zurück, die der Film dauert, 0 solange unbekannt | |
of_position ( ) → long | Gibt die seit Beginn gespielten Millisekunden zurück; ue_progress liefert sie auch jede Sekunde | |
of_capture (string as_path) → long | Speichert das jetzt gezeigte Bild in Filmgröße: of_capture(as_path, 0). Die ENDUNG wählt das Format: .jpg oder .jpeg schreibt ein JPEG, alles andere ein PNG; wartet auf das erste dekodierte Bild (höchstens 10 s), kann also direkt auf of_play folgen. Gibt 0 nach dem Schreiben zurück, -4 ohne Film, mit einem Film, der nicht laden konnte, ohne rechtzeitiges Bild, wenn ein Film einer anderen Site seine Pixel verweigert oder wenn die Datei nicht geschrieben werden kann, -5 bei leerem Pfad oder einem, der vom aktuellen Ordner abhängt (\x, C:x), -2 wenn die Komponente nicht erzeugt ist; nach einer negativen Rückgabe sagt of_get_last_error, warum. Ein relativer Pfad wird in den Ordner geschrieben, in dem die Anwendung gestartet ist (der aktuelle Ordner beim Laden der Bibliothek, in der IDE wie kompiliert derselbe) | |
of_capture (string as_path, long al_max_width) → long | Dieselbe Aufnahme, VERKLEINERT auf al_max_width Pixel Breite (Höhe proportional): das Vorschaubild eines 4K-Films ist kein 4K-Bild. 0 behält die Filmgröße. Dieselben Rückgaben wie of_capture(as_path) | |
of_fullscreen (boolean ab_on) → long | Der Film auf dem GANZEN Monitor (die DLL verschiebt das Steuerelement in ein eigenes Fenster; Ihr Fenster bleibt unberührt), oder zurück. Über allem, solange es das aktive Fenster ist: Alt+Tab zu einer anderen Anwendung bringt diese nach vorn, und die Rückkehr zu Ihrer Anwendung legt den Film wieder über alles. Doppelklick, die Schaltfläche der Leiste, Escape, Alt+F4. Escape verlässt es auch, wenn ib_enabled falsch ist. Diese Gesten und dieser Aufruf lösen ue_fullscreen_changed aus (of_is_fullscreen liest es). Gibt 0 zurück, -2 wenn die Komponente nicht erzeugt ist | |
of_is_fullscreen ( ) → boolean | Wahr, solange der Film den Monitor bedeckt | |
of_add_marker (long al_ms, string as_label) → long | Eine MARKE auf der Leiste: ein klickbarer Strich, und ue_marker_reached, wenn der Film sie passiert. Gibt 0 zurück, -5 bei negativer Position, -2 wenn die Komponente nicht erzeugt ist | |
of_clear_markers ( ) → long | Entfernt alle Marken. Gibt 0 zurück, -2 wenn die Komponente nicht erzeugt ist | |
of_marker_count ( ) → long | Gibt die Zahl der Marken zurück | |
of_play_range (long al_from_ms, long al_to_ms) → long | Spielt EINEN Abschnitt: an seinem Ende ue_ended, oder mit ib_loop beginnt der Abschnitt erneut. Gibt 0 zurück, -5 bei sinnlosen Grenzen, -2 wenn die Komponente nicht erzeugt ist | |
of_clear_range ( ) → long | Befreit den Film von seinem Abschnitt. Gibt 0 zurück, -2 wenn die Komponente nicht erzeugt ist | |
of_step_frames (long al_frames) → long | Bewegt um al_frames Bilder (ii_fps), zurück bei negativ, und pausiert; Tasten . und , auf dem Bild. ue_seeked folgt, wie bei den Tasten. Gibt 0 zurück, -2 wenn die Komponente nicht erzeugt ist | |
of_add_source (string as_source) → long | Fügt einen Film zur WIEDERGABELISTE hinzu: der erste wird is_source (über einem vorher gesetzten Film, außer er LÄUFT: dann folgt die Liste ihm an seinem Ende), die nächsten folgen von selbst (ue_source_changed für jeden folgenden Film, und für den ersten, wenn dieser Aufruf ihn lädt). Gibt 0 zurück, -5 bei leerer Quelle, -2 wenn die Komponente nicht erzeugt ist | |
of_add_source (string as_source, string as_subtitles) → long | Fügt einen Film MIT seiner Untertiteldatei hinzu (.vtt oder .srt, von der DLL konvertiert): der Untertitel gehört zu diesem Film und wird nur gezeigt, wenn er läuft. Der einfache, eindeutige Weg, eine Wiedergabeliste zu untertiteln. Gibt 0 zurück, -5 bei leerer Quelle | |
of_clear_playlist ( ) → long | Leert die Liste; der laufende Film geht weiter. Gibt 0 zurück, -2 wenn die Komponente nicht erzeugt ist | |
of_next ( ) / of_previous ( ) → long | Der nächste oder vorige Film der Liste; of_playlist_index sagt, wo sie steht, und ue_source_changed folgt. Gibt 0 zurück, -2 wenn die Komponente nicht erzeugt ist | |
of_playlist_count ( ) → long | Gibt die Zahl der Filme in der Liste zurück | |
of_playlist_index ( ) → long | Gibt den Index (ab 1) des laufenden Listenfilms zurück, 0 außerhalb der Liste | |
of_add_subtitles (string as_lang, string as_source) → long | Eine Untertitelspur pro Sprache: .vtt, oder .srt konvertiert, vom Arbeitsplatz oder einer https-URL (heruntergeladen: CORS nötig, siehe ue_subtitles_failed). Die CC-Schaltfläche der Leiste schaltet sie durch. Gibt 0 zurück, -5 bei leerer Quelle, einer schon gesetzten Sprache des Films (zuerst of_remove_subtitles) oder einer mit / oder ` | , -2` wenn die Komponente nicht erzeugt ist |
of_remove_subtitles (string as_lang) → long | Entfernt die Spur einer Sprache vom gezeigten Film (und vom Film der Liste, der läuft: sie kommt bei of_previous nicht zurück). Die Spur von is_subtitles heißt default. Gibt 0 zurück, -5 für eine Sprache, die der Film nicht trägt, -2 wenn die Komponente nicht erzeugt ist | |
of_subtitle_count ( ) → long | Gibt die Zahl der Untertitelspuren zurück | |
of_remembered_position ( ) → long | Gibt die Zahl der Millisekunden zurück, bei der is_source verlassen wurde (ib_remember_position), sonst 0 | |
of_has_output ( ) → boolean | Wahr, wenn der Arbeitsplatz eine Audioausgabe hat | |
of_add_chapter (long al_ms, string as_title) → long | Ein KAPITEL (Inhaltsverzeichnis): ue_chapter_changed, wenn die Wiedergabe eintritt. of_go_chapter springt (1-basiert), of_next_chapter / of_previous_chapter durchlaufen (jeder Sprung löst ue_seeked und ue_chapter_changed aus), of_chapter_count / of_chapter_index / of_chapters lesen, of_clear_chapters leert. Gibt 0, -5 bei negativ | |
of_clear_chapters ( ) → long | Entfernt alle Kapitel; Leiste und Vorschaublase vergessen sie. Gibt 0, -2 wenn nicht erzeugt | |
of_go_chapter (long al_index) → long | Springt zum Kapitel al_index (1-basiert, in der Reihenfolge von of_add_chapter); of_chapter_index liest es sofort, und ue_seeked dann ue_chapter_changed folgen, wie bei einem Klick auf die Leiste. Gibt 0, -5 bei einer Nummer unter 1 oder über of_chapter_count(), -2 wenn die Komponente nicht erzeugt ist | |
of_next_chapter ( ) → long | Springt zum Kapitel nach der aktuellen Position; of_chapter_index liest es sofort, und ue_seeked dann ue_chapter_changed folgen. Vom letzten Kapitel aus bewegt sich nichts. Gibt 0, -2 wenn nicht erzeugt | |
of_previous_chapter ( ) → long | Springt zum Kapitel vor dem, in dem sich die Wiedergabe befindet; of_chapter_index liest es sofort, und ue_seeked dann ue_chapter_changed folgen. Vom ersten Kapitel aus bewegt sich nichts. Gibt 0, -2 wenn nicht erzeugt | |
of_chapter_count ( ) → long | Gibt die Zahl der Kapitel des Films zurück (of_add_chapter), 0 ohne | |
of_chapter_index ( ) → long | Gibt die Nummer (1-basiert) des Kapitels zurück, in dem sich die Wiedergabe befindet, 0 vor dem ersten oder ohne Kapitel. Live gelesen | |
of_chapters (ref long al_ms[], ref string as_titles[]) → long | Füllt die Kapitel der Reihe nach — die Position jedes in ms in al_ms, seinen Titel in as_titles — für ein eigenes Menü; ein Titel darf jedes Zeichen enthalten. Gibt die Zahl zurück, 0 ohne Kapitel | |
of_picture_in_picture (boolean ab_on) → long | Der Film in einem eigenen schwebenden Fenster (true) oder zurück (false); ue_pip_changed folgt, wie wenn der Benutzer das kleine Fenster schließt. of_is_pip sagt, ob er schwebt, of_pip_available, ob der Arbeitsplatz es erlaubt. Gibt 0, -2 wenn nicht erzeugt | |
of_is_pip ( ) → boolean | Wahr, solange der Film in seinem Picture-in-Picture-Fenster schwebt; wieder falsch, sobald der Benutzer es schließt | |
of_pip_available ( ) → boolean | Wahr, wenn Engine und Arbeitsplatz Picture-in-Picture überhaupt erlauben: vor dem Anbieten der Schaltfläche fragen |
Ereignisse #
| Ereignis | Wann |
|---|---|
ue_started (long al_duration_ms) | Der Film startet wirklich; die Länge, wenn die Datei sie nennt, sonst 0 |
ue_ended (boolean ab_truncated) | Der Film ist von selbst zu Ende; ab_truncated wahr, wenn die Demo-Grenze ihn abschnitt |
ue_failed (string as_message, string as_reason) | Der Film konnte nicht spielen. as_reason sagt es in einem Wort, das Ihr Code prüft: REASON_INSECURE (eine http://-Quelle), REASON_FORMAT (avi, wmv, flv oder ein Format, das die Engine für unspielbar erklärt), REASON_UNSUPPORTED (fehlende Datei oder nicht dekodierbarer Container), REASON_DECODE, REASON_NETWORK, REASON_NO_SOURCE, REASON_FAILED; as_message ist der auf dem Bild gezeigte Text |
ue_stopped ( ) | of_stop hat einen laufenden Film abgebrochen |
ue_paused ( ) / ue_resumed ( ) | Der Film wird angehalten, dann fortgesetzt — durch Ihren Code, die Leiste oder die Tastatur gleichermaßen; auch wenn die Komponente ausgeblendet wird (ib_pause_when_hidden) |
ue_progress (long al_position_ms, long al_duration_ms) | Einmal pro Sekunde während der Wiedergabe: was eine eigene Fortschrittsleiste braucht, ohne Timer |
ue_seeked (long al_position_ms) | Die Position hat sich bewegt: der Benutzer (Leiste, Pfeile, Marke) oder Ihr Code — of_seek, of_step_frames und die Kapitelfunktionen lösen es ebenfalls aus, wie die Geste |
ue_volume_changed (long al_percent) | Der Benutzer hat die Lautstärke gedreht; nie ii_volume |
ue_rate_changed (long al_percent) | Der Benutzer hat auf der Leiste eine Geschwindigkeit gewählt; nie ii_rate |
ue_subtitles_changed (string as_lang) | Der Benutzer hat die Untertitel durchgeschaltet (CC); leer = keine |
ue_muted_changed (boolean ab_on) | Der Benutzer hat den Ton stummgeschaltet (true) oder wieder eingeschaltet (false) — der Lautsprecher der Leiste, die Taste M; nie ib_muted |
ue_fullscreen_changed (boolean ab_on) | Der Film ist in den Vollbildmodus gewechselt oder zurückgekehrt: Doppelklick, die Schaltfläche, Escape, Alt+F4 oder of_fullscreen. of_reset löst es nie aus |
ue_marker_reached (long al_ms, string as_label) | Der Film passiert eine Marke |
ue_source_changed (long al_index, string as_source) | Die Wiedergabeliste wechselt zu einem anderen Film: von selbst, nachdem der vorige geendet hat, oder durch of_next, of_previous und das erste of_add_source |
ue_chapter_changed (long al_index, string as_title) | Die Wiedergabe tritt in ein anderes Kapitel (of_add_chapter): seine Nummer (1-basiert, 0 vor dem ersten) und sein Titel; auch wenn der Benutzer oder Ihr Code (of_go_chapter, of_next_chapter, of_previous_chapter) dorthin springt |
ue_pip_changed (boolean ab_on) | Der Film ist in das Picture-in-Picture-Fenster gewechselt (true) oder hat es verlassen (false): der Benutzer hat es geschlossen, die Engine hat den Film von selbst dorthin gelegt, oder of_picture_in_picture hat es verlangt (of_is_pip liest es) |
ue_subtitles_failed (string as_lang, string as_reason) | Eine Untertiteldatei konnte nicht geladen werden: eine https-URL, deren Server CORS verweigert oder einen Fehler antwortet (REASON_NETWORK, REASON_NOT_FOUND), eine http://-URL (REASON_INSECURE). Die Spur wird entfernt, der Film läuft weiter |
ue_buffering (boolean ab_on) | Der Film LÄUFT, muss aber länger als eine Viertelsekunde auf seine Daten warten (true) — ein langsames Netz, ein Sprung weit in einen Film einer URL: ein Ring in der Akzentfarbe des Themes dreht sich auf dem Bild — dann endet das Warten (false): der Film läuft weiter oder wurde angehalten, gestoppt, ersetzt oder ist fehlgeschlagen. of_reset löst es nie aus |
Vollbild, Marken, Abschnitt, Bild für Bild #
- Vollbild.
of_fullscreen(true), ein Doppelklick auf das Bild oder die letzte Schaltfläche der Leiste. Die DLL verschiebt das Steuerelement in ein eigenes Fenster, das den Monitor bedeckt; Ihr PowerBuilder-Fenster bleibt unberührt, und Escape (oder Alt+F4) holt den Film zurück. Über allem bleibt es nur, solange es das aktive Fenster ist: Alt+Tab zu einer anderen Anwendung bringt diese nach vorn, und die Rückkehr zu Ihrer Anwendung legt den Film wieder über alles. Escape verlässt es auch, wennib_enabledfalsch ist.ue_fullscreen_changedmeldet jeden Wechsel in beide Richtungen: diese Gesten des Benutzers ebenso wieof_fullscreen. - Marken.
of_add_marker(ms, Beschriftung)setzt einen Strich auf die Leiste: der Benutzer sieht ihn, fährt ihn an (die Beschriftung), klickt ihn (der Film springt dorthin,ue_seeked), undue_marker_reachedkommt, wenn der Film ihn passiert. Kapitel einer Schulung, zu prüfende Stellen, gefundene Mängel. - Abschnitt.
of_play_range(von, bis)spielt nur einen Ausschnitt; mitib_loopwiederholt es ihn bisof_clear_range. - Bild für Bild.
of_step_frames(±n)bewegt um n Bilder beiii_fpspro Sekunde und pausiert; die Tasten . und , tun dasselbe. Die Engine nennt die Bildrate eines Films nicht: Sie tun es. - Die Leiste spricht. Jede Geste hat ihr Ereignis:
ue_seeked,ue_volume_changed,ue_rate_changed(die Geschwindigkeitsschaltfläche, 0,5× bis 2×),ue_subtitles_changed(die CC-Schaltfläche),ue_muted_changed(der Lautsprecher, die Taste M). Eine von Ihrem Code verlangte Bewegung löst dasselbe aus wie die Geste:of_seek,of_step_framesund die Kapitelfunktionen lösenue_seekedaus. Ein von Ihrem Code gesetzter WERT bleibt stumm, wieSetItem:ii_volume,ii_rate,is_subtitle_lang,ib_muted.
// Chapters on the bar, then one extract in a loop
uo_video.of_add_marker(/*ms*/ 2000, /*label*/ "Intro")
uo_video.of_add_marker(/*ms*/ 5000, /*label*/ "The bunny")
uo_video.ib_loop = true
uo_video.of_play_range(/*from_ms*/ 2000, /*to_ms*/ 8000)
// Surveillance : back one picture at a time
uo_video.ii_fps = 30
uo_video.of_step_frames(/*frames*/ -1)
Wiedergabeliste, Untertitel, Fortsetzen, Formate #
- Wiedergabeliste.
of_add_sourcestapelt Filme; der erste wirdis_source, die nächsten folgen von selbst am Ende jedes Films,ue_source_changednennt jeden Wechsel.of_nextundof_previousvon Hand, mit demselben Ereignis:of_playlist_indexsagt, wo die Liste steht. - Was zu einem Film gehört. Sein Abschnitt, seine Untertitel, Marken und Kapitel: ein neues
is_sourcelässt sie zurück (vor jedem Film gesetzt, warten sie auf den ersten). Die Wiedergabeliste behält ihre eigenen: der anof_add_source(Film, Untertitel)gegebene Untertitel kommt mit seinem Film zurück. - Mehrere Untertitelspuren.
of_add_subtitles(Sprache, Datei)pro Sprache,of_remove_subtitles(Sprache)entfernt eine;is_subtitle_langwählt, die CC-Schaltfläche der Leiste schaltet durch. Eine.srtwird beim Ausliefern in WebVTT konvertiert: bei Ihnen ist nichts zu konvertieren. Ein Untertitel perhttps-URL wird von der Komponente heruntergeladen: ihr Server muss CORS erlauben, sonst meldetue_subtitles_failedes und der Film läuft ohne ihn weiter. - Fortsetzen.
ib_remember_position = true: wo ein Film verlassen wird (Pause, Stopp), merkt sich die Engine auf diesem Arbeitsplatz, pro Benutzer, und das nächsteof_playderselben Quelle setzt dort fort. Ein zu Ende gesehener Film beginnt von vorn. - Formate. Was WebView2 dekodiert: mp4 (H.264, AAC), webm (VP8, VP9, AV1), mov (das H.264 eines iPhones oder einer Kamera), mkv (eine OBS-Aufnahme) und die Audioformate (mp3, wav, ogg, opus, flac, aac, m4a). Kein H.265/HEVC ohne die Windows-Erweiterung (ein HEVC-
.movendet inue_failed, das die Endung nennt), weder AVI, WMV noch FLV: die Komponente lehnt sie an ihrem Namen ab (REASON_FORMAT) statt eines schwarzen Bildschirms. Weder HLS noch DASH: eine IP-Kamera läuft über einen mp4- oder webm-Stream. Nurhttps: einehttp://-Intranetadresse wird abgelehnt (REASON_INSECURE) — laden Sie den Film zuerst herunter (restclient,of_download) oder liefern Sie ihn über eine Freigabe\\server\…. - Mehrere Tonspuren. Chromium verbirgt sie hinter einem Flag: nicht verfügbar.
// A playlist, each film WITH its subtitles, the position remembered
uo_video.ib_remember_position = true
uo_video.of_add_source(/*source*/ "intro.mp4", /*subtitles*/ "intro.en.vtt")
uo_video.of_add_source(/*source*/ "lesson-1.mp4", /*subtitles*/ "lesson-1.en.srt") // .srt : converted by the DLL
uo_video.of_play()
// A second language for the film on screen : it stays with that film
uo_video.of_add_subtitles(/*lang*/ "fr", /*source*/ "intro.fr.vtt")
uo_video.is_subtitle_lang = "fr"
Beispiele #
Eine stumme Präsentationsschleife ohne Leiste #
// A silent showcase film, in a loop, without its bar
uo_video.ib_controls = false
uo_video.ib_muted = true
uo_video.ib_loop = true
uo_video.is_stretch = u_pbt_video.STRETCH_UNIFORMTOFILL
uo_video.of_play(/*source*/ "films\showcase.mp4")
Eigene Knöpfe und eine Fortschrittsleiste #
// cb_play.clicked
if uo_video.of_is_paused() or not uo_video.of_is_playing() then uo_video.of_play() else uo_video.of_pause()
// uo_video.ue_progress : once a second, no timer needed
hpb_progress.Position = al_position_ms * 100 / Max(al_duration_ms, 1)
Ein Vorschaubild des Films für einen Bericht #
// Stop the film on the picture to keep
uo_video.of_play(/*source*/ "films\training.mp4")
uo_video.of_pause()
uo_video.of_seek(/*ms*/ 15000) // the frame at 0:15
// of_capture waits for the picture itself (10 s at most) : no timer to write.
// A .jpg path writes a JPEG ; 320 : a thumbnail 320 pixels wide.
// A relative path goes to the folder the application started in.
if uo_video.of_capture(/*path*/ "C:\Reports\training.jpg", /*max_width*/ 320) < 0 then MessageBox("Capture", uo_video.of_get_last_error())
Bewährte Praxis #
- Eine Datei des Arbeitsplatzes statt einer URL, wann immer möglich: von der DLL gestreamt startet sie sofort, sucht ohne Neuladen, und
of_capturedarf ihre Pixel lesen — was ein Film einer anderen Site verweigert. - Skripten Sie
ue_failedbei jedem Film, dessen Pfad von Daten abhängt: es ist Ihr einziges Netz, und die Meldung steht bereits am Bildschirm. - Setzen Sie
ib_autoplaynur für eine Präsentationsschleife: ein Film, der mit Ton von selbst startet, überrascht den Benutzer; sonst genügen Poster und Wiedergabeknopf. ue_progressersetzt einen Timer: einmal pro Sekunde, Position und Länge, nur während der Wiedergabe.
Vom gemeinsamen Sockel geerbt #
Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.
| Mitglieder | Rolle | Beschrieben in |
|---|---|---|
of_reset | Die Komponente zurücksetzen | 3.6 Eine Komponente zurücksetzen: of_reset() |
of_register_shortcut · of_clear_shortcuts | Tastenkürzel der Komponente | 3.5 Tastenkombinationen |
of_is_created · of_is_ready · of_get_last_error | Ob sie entstanden ist, ob sie bereit ist, was fehlschlug | 3.7 Diagnose |
of_save_as_png · of_save_as_jpg | Die Darstellung als Bild exportieren | 3.8 Die Darstellung als Bild exportieren |
of_set_redraw | Änderungen zu einem einzigen Neuzeichnen bündeln | 3.10 Best Practices |
of_preload_icons | Symbole ohne Verzögerung | Sofortige Anzeige: of_icon |
of_set_translation | Eine Beschriftung der Komponente übersetzen | 5.2 Eine Beschriftung anpassen: of_set_translation |
of_focus_webview | Der Komponente den Fokus geben | 6.4 Tastatur und Fokus |
of_print · of_print_to_pdf | Drucken oder ein PDF schreiben | 6.9 Drucken |
of_set_property · of_get_property · of_component_name | Eine Eigenschaft über ihren Namen steuern | 3.1 Die Eigenschaften-Engine |