PBToolboxAI v3 ← Site

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 #

Userobjectu_pbt_video
Item-Klasse— (Komponente ohne Items)
WofürEin Schulungsfilm in der Anwendung, ein Produktvideo, die Wiedergabe einer Aufzeichnung, eine Präsentationsschleife am Stand
PrinzipEin <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ängigkeitDie 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 #

EigenschaftTypStandardRolle
is_sourcestring""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_autoplaybooleanfalseStartet den Film, sobald is_source gesetzt ist; sonst wartet er auf of_play, die Leiste oder die Tastatur und zeigt is_poster
ib_mutedbooleanfalseSchaltet den Ton stumm, Lautstärke bleibt; auch der Leistenknopf und die Taste M setzen es
ii_volumeinteger100Lautstärke in Prozent, 0 bis 100; auch der Schieber der Leiste und die Pfeile auf/ab
ib_loopbooleanfalseSpielt den Film in Schleife bis of_stop; ein Schleifenfilm löst nie ue_ended aus
ii_rateinteger100Geschwindigkeit in Prozent, 25 bis 400: 50 = halb, 200 = doppelt, der Ton folgt
is_stretchstring"uniform"Zuschnitt: STRETCH_NONE, STRETCH_FILL, STRETCH_UNIFORM, STRETCH_UNIFORMTOFILL — die vier Modi eines Bilds
ib_controlsbooleantrueDie Transportleiste der Komponente, im Thema. false blendet sie aus: Ihr Fenster steuert den Film
is_posterstring""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_subtitlesstring""Eine Untertiteldatei, lokal oder URL: WebVTT (.vtt) oder SubRip (.srt, von der DLL konvertiert). Eine Spur; of_add_subtitles stapelt mehrere
is_subtitle_langstring""Die gezeigte Untertitelspur (eine Sprache aus of_add_subtitles); leer = keine
ii_fpsinteger25Bilder pro Sekunde des Films, für of_step_frames
ib_remember_positionbooleanfalseMerkt sich, wo jeder Film verlassen wurde, und setzt beim nächsten of_play derselben Quelle dort fort
is_theme_stylestringfluentVisueller Stil der Komponente (Konstanten THEME_STYLE_*)
is_theme_modestringlightHelle oder dunkle Variante (Konstanten THEME_MODE_*)
il_theme_accentlong-1Akzentfarbe dieser Komponente (-1 = Akzent des Designs)
is_tooltipstring""Einfacher Tooltip beim Überfahren der Komponente
is_super_tooltip_titlestring""Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip)
is_super_tooltip_textstring""Text des erweiterten Tooltips (Rich-Markup zulässig)
is_super_tooltip_imagestring""Bild des erweiterten Tooltips
ib_enabledbooleantruefalse: abgedunkeltes Bild, Leiste und Tastatur inaktiv; Ihr Code steuert weiterhin
ib_scrub_previewbooleantrueEine 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 #

MethodeRolle
of_play ( ) → longSpielt 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) → longSetzt is_source und spielt sie: derselbe Aufruf wie beim Sound player. Gibt 0 nach dem Senden zurück, -1 ohne Komponente
of_pause ( ) → longHä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) → longSpringt 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 ( ) → booleanWahr, solange ein Film läuft — pausiert eingeschlossen, er ist nicht zu Ende
of_is_paused ( ) → booleanWahr, solange der Film angehalten ist — durch of_pause, die Leiste oder die Tastatur
of_duration ( ) → longGibt die Anzahl Millisekunden zurück, die der Film dauert, 0 solange unbekannt
of_position ( ) → longGibt die seit Beginn gespielten Millisekunden zurück; ue_progress liefert sie auch jede Sekunde
of_capture (string as_path) → longSpeichert 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) → longDer 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 ( ) → booleanWahr, solange der Film den Monitor bedeckt
of_add_marker (long al_ms, string as_label) → longEine 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 ( ) → longEntfernt alle Marken. Gibt 0 zurück, -1 wenn die Komponente nicht erzeugt ist
of_marker_count ( ) → longGibt die Zahl der Marken zurück
of_play_range (long al_from_ms, long al_to_ms) → longSpielt 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 ( ) → longBefreit den Film von seinem Abschnitt. Gibt 0 zurück, -1 wenn die Komponente nicht erzeugt ist
of_step_frames (long al_frames) → longBewegt 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) → longFü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) → longFü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 ( ) → longLeert die Liste; der laufende Film geht weiter. Gibt 0 zurück, -1 wenn die Komponente nicht erzeugt ist
of_next ( ) / of_previous ( ) → longDer nächste oder vorige Film der Liste. Gibt 0 zurück, -1 wenn die Komponente nicht erzeugt ist
of_playlist_count ( ) → longGibt die Zahl der Filme in der Liste zurück
of_playlist_index ( ) → longGibt den Index (ab 1) des laufenden Listenfilms zurück, 0 außerhalb der Liste
of_add_subtitles (string as_lang, string as_source) → longEine 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 ( ) → longGibt die Zahl der Untertitelspuren zurück
of_remembered_position ( ) → longGibt die Zahl der Millisekunden zurück, bei der is_source verlassen wurde (ib_remember_position), sonst 0
of_has_output ( ) → booleanWahr, wenn der Arbeitsplatz eine Audioausgabe hat
of_add_chapter (long al_ms, string as_title) → longEin 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 ( ) → longEntfernt alle Kapitel; Leiste und Vorschaublase vergessen sie. Gibt 0, -1 wenn nicht erzeugt
of_go_chapter (long al_index) → longSpringt 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 ( ) → longSpringt 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 ( ) → longSpringt 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 ( ) → longGibt die Zahl der Kapitel des Films zurück (of_add_chapter), 0 ohne
of_chapter_index ( ) → longGibt 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[]) → longFü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) → longDer 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 ( ) → booleanWahr, solange der Film in seinem Picture-in-Picture-Fenster schwebt; wieder falsch, sobald der Benutzer es schließt
of_pip_available ( ) → booleanWahr, wenn Engine und Arbeitsplatz Picture-in-Picture überhaupt erlauben: vor dem Anbieten der Schaltfläche fragen

Ereignisse #

EreignisWann
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 #

// 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 #

// 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 #

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.

MitgliederRolleBeschrieben in
of_resetDie Komponente zurücksetzen3.6 Eine Komponente zurücksetzen: of_reset()
of_register_shortcut · of_clear_shortcutsTastenkürzel der Komponente3.5 Tastenkombinationen
of_is_created · of_is_ready · of_get_last_errorOb sie entstanden ist, ob sie bereit ist, was fehlschlug3.7 Diagnose
of_save_as_png · of_save_as_jpgDie Darstellung als Bild exportieren3.8 Die Darstellung als Bild exportieren
of_set_redrawÄnderungen zu einem einzigen Neuzeichnen bündeln3.10 Best Practices
of_preload_iconsSymbole ohne VerzögerungSofortige Anzeige: of_icon
of_set_translationEine Beschriftung der Komponente übersetzen5.2 Eine Beschriftung anpassen: of_set_translation
of_focus_webviewDer Komponente den Fokus geben6.4 Tastatur und Fokus
of_print · of_print_to_pdfDrucken oder ein PDF schreiben6.9 Drucken
of_set_property · of_get_property · of_component_nameEine Eigenschaft über ihren Namen steuern3.1 Die Eigenschaften-Engine

← Komponentenreferenz · Inhalt des Handbuchs