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. 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, ogv, m4v). 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("films\training.mp4")
// A URL plays the same way
uo_video.of_play("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(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 http(s)-URL. 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 |
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 URL: WebVTT (.vtt) oder SubRip (.srt, von der DLL konvertiert). Eine Spur; of_add_subtitles stapelt mehrere |
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 | fluent | Visueller Stil der Komponente (Konstanten THEME_STYLE_*) |
is_theme_mode | string | light | Helle oder dunkle Variante (Konstanten THEME_MODE_*) |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent 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; 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 |
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, -1, 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. Gibt 0 zurück, -1 ohne Komponente |
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_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 als 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, ohne rechtzeitiges Bild oder wenn ein Film einer anderen Site seine Pixel verweigert, -5 bei leerem oder nicht beschreibbarem Pfad |
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. Doppelklick, die Schaltfläche der Leiste, Escape. Gibt 0 zurück, -1 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, -1 wenn die Komponente nicht erzeugt ist |
of_clear_markers ( ) → long | Entfernt alle Marken. Gibt 0 zurück, -1 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, -1 wenn die Komponente nicht erzeugt ist |
of_clear_range ( ) → long | Befreit den Film von seinem Abschnitt. Gibt 0 zurück, -1 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. Gibt 0 zurück, -1 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, die nächsten folgen von selbst (ue_source_changed). Gibt 0 zurück, -5 bei leerer Quelle, -1 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, -1 wenn die Komponente nicht erzeugt ist |
of_next ( ) / of_previous ( ) → long | Der nächste oder vorige Film der Liste. Gibt 0 zurück, -1 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, von der DLL konvertiert. Die CC-Schaltfläche der Leiste schaltet sie durch. Gibt 0 zurück, -5 bei leerer Quelle, -1 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, 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, -1 wenn nicht erzeugt |
of_go_chapter (long al_index) → long | Springt zum Kapitel al_index (1-basiert, in der Reihenfolge von of_add_chapter) und spielt von dort; ue_seeked folgt. Gibt 0, -5 bei einer Nummer unter 1 |
of_next_chapter ( ) → long | Springt zum Kapitel nach der aktuellen Position; ue_seeked folgt. Vom letzten Kapitel aus bewegt sich nichts. Gibt 0, -1 wenn nicht erzeugt |
of_previous_chapter ( ) → long | Springt zum Kapitel vor dem, in dem sich die Wiedergabe befindet; ue_seeked folgt. Vom ersten Kapitel aus bewegt sich nichts. Gibt 0, -1 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ü. 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. of_is_pip sagt, ob er schwebt, of_pip_available, ob der Arbeitsplatz es erlaubt. Gibt 0, -1 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) | Der Film konnte nicht spielen: fehlende Datei, nicht dekodierbares Format, stumme URL; die Meldung erscheint auch auf dem Bild |
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 |
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) | Der BENUTZER hat die Position bewegt (Leiste, Pfeile, Marke); nie of_seek |
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_fullscreen_changed (boolean ab_on) | Der Film ging in den Vollbildmodus oder kam zurück |
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 |
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 |
ue_pip_changed (boolean ab_on) | Der Film betritt (true) oder verlässt (false) das Picture-in-Picture-Fenster — durch of_picture_in_picture oder durch den Benutzer, der es schließt |
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 holt den Film zurück.ue_fullscreen_changedsagt es in beide Richtungen. - 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. Was nur der Benutzer tun kann, meldet ein eigenes Ereignis:
ue_seeked,ue_volume_changed,ue_rate_changed(die Geschwindigkeitsschaltfläche, 0,5× bis 2×),ue_subtitles_changed(die CC-Schaltfläche). Was Ihr Code tut, weiß er bereits:of_seeklöst nichts aus.
// Chapters on the bar, then one extract in a loop
uo_video.of_add_marker(2000, "Intro")
uo_video.of_add_marker(5000, "The bunny")
uo_video.ib_loop = true
uo_video.of_play_range(2000, 8000)
// Surveillance : back one picture at a time
uo_video.ii_fps = 30
uo_video.of_step_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. - Mehrere Untertitelspuren.
of_add_subtitles(Sprache, Datei)pro Sprache;is_subtitle_langwählt, die CC-Schaltfläche der Leiste schaltet durch. Eine.srtwird von der DLL beim Ausliefern nach WebVTT konvertiert: nichts auf Ihrer Seite zu konvertieren. - 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), ogv (Theora) und die Audioformate (mp3, wav, ogg, flac, aac, m4a). Kein H.265/HEVC ohne die Windows-Erweiterung, kein altes AVI, WMV, MKV, MOV: die Komponente lehnt sie namentlich ab (
ue_failednennt die Endung) statt einen schwarzen Bildschirm zu zeigen. Kein HLS, kein DASH: eine IP-Kamera geht über einen mp4- oder webm-Stream. - Mehrere Tonspuren. Chromium verbirgt sie hinter einem Flag: nicht verfügbar.
// A playlist with two subtitle tracks, the position remembered
uo_video.ib_remember_position = true
uo_video.of_add_subtitles("en", "film.en.vtt")
uo_video.of_add_subtitles("fr", "film.fr.srt") // .srt : converted by the DLL
uo_video.is_subtitle_lang = "fr"
uo_video.of_add_source("intro.mp4")
uo_video.of_add_source("lesson-1.mp4")
uo_video.of_play()
Beispiele #
Eine stumme Präsentationsschleife ohne Leiste #
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("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 #
uo_video.of_play("films\training.mp4")
uo_video.of_pause()
uo_video.of_seek(15000) // the frame at 0:15
// of_capture waits for the picture itself (10 s at most) : no timer to write
if uo_video.of_capture("report\training.png") <> 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 |