PBToolboxAI v3 ← Site

video — u_pbt_video #

← Riferimento dei componenti · Sommario della guida

Lettore video: un file della postazione — servito in flusso dalla DLL, un film lungo parte subito — o un URL, con la barra di trasporto del componente, che segue il tema: riproduzione, ricerca, tempo, muto, volume. Sottotitoli WebVTT, locandina prima della riproduzione, ciclo, velocità, inquadratura, cattura del fotogramma corrente in PNG. Tutto ciò che l'utente fa sulla barra, la tua applicazione lo sa.

▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Video player: il film, il codice che lo pilota e questa pagina, fianco a fianco (connessione Internet necessaria per il film di esempio).


In breve #

Userobjectu_pbt_video
Classe degli item— (componente senza item)
Serve perUn film di formazione nell'applicazione, il video di un prodotto, la rilettura di una registrazione, un ciclo di presentazione su uno stand
PrincipioUn <video> del motore WebView2: tutti i formati che decodifica (mp4, webm, ogv, m4v). La barra è del componente; i suoi gesti passano per gli stessi verbi delle tue chiamate, quindi gli stessi eventi
DipendenzaIl runtime WebView2, già richiesto dalla libreria — nient'altro

Avvio rapido #

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

Tutto ciò che regoli è una proprietà (is_source, ii_volume, ib_loop…), letta dal vivo sul componente; tutto ciò che fai è un metodo (of_play, of_pause, of_stop, of_seek, of_capture); tutto ciò che accade è un evento (ue_started, ue_ended, ue_progress…). Un file mancante non è un'eccezione: ue_failed lo dice, e il messaggio appare sull'immagine.


Proprietà #

ProprietàTipoPredefinitoRuolo
is_sourcestring""Il film: un file della postazione (qualsiasi percorso, in flusso) o un URL http(s). Impostarlo ferma ciò che stava suonando; ib_autoplay decide se il nuovo parte da solo. Un film di qualsiasi dimensione, anche in un'applicazione a 32 bit: la DLL lo trasmette a fette, mai l'intero file in una volta; un film che il motore non sa decodificare è segnalato da ue_failed
ib_autoplaybooleanfalseAvvia il film appena is_source è impostato; altrimenti attende of_play, la barra o la tastiera, e mostra is_poster
ib_mutedbooleanfalseToglie l'audio, volume conservato; anche il pulsante della barra e il tasto M lo impostano
ii_volumeinteger100Volume in percentuale, 0 a 100; anche il cursore della barra e le frecce su/giù
ib_loopbooleanfalseRipete il film in ciclo fino a of_stop; un film in ciclo non solleva mai ue_ended
ii_rateinteger100Velocità in percentuale, 25 a 400: 50 = metà, 200 = doppia, l'audio segue
is_stretchstring"uniform"Inquadratura: STRETCH_NONE, STRETCH_FILL, STRETCH_UNIFORM, STRETCH_UNIFORMTOFILL — le quattro modalità di un'immagine
ib_controlsbooleantrueLa barra di trasporto del componente, a tema. false la nasconde: la tua finestra pilota il film
is_posterstring""La locandina mostrata prima del film: file, URL o pack.dll:NOME, come la sorgente di un'immagine. Un prefisso mono:/tint:/white:/black: ricolora un'immagine monocroma sul tema
is_subtitlesstring""Un file di sottotitoli, locale o URL: WebVTT (.vtt) o SubRip (.srt, convertito dalla DLL). Una traccia; of_add_subtitles ne accumula diverse
is_subtitle_langstring""La traccia di sottotitoli mostrata (una lingua di of_add_subtitles); vuoto = nessuna
ii_fpsinteger25Immagini al secondo del film, per of_step_frames
ib_remember_positionbooleanfalseRicorda dove ogni film è lasciato e riprende lì al prossimo of_play della stessa sorgente
is_theme_stylestringfluentStile visivo del componente (costanti THEME_STYLE_*)
is_theme_modestringlightVariante chiara o scura (costanti THEME_MODE_*)
il_theme_accentlong-1Colore d'accento di questo componente (-1 = accento del tema)
is_tooltipstring""Tooltip semplice mostrato al passaggio del mouse sul componente
is_super_tooltip_titlestring""Titolo del tooltip avanzato (prevale su is_tooltip)
is_super_tooltip_textstring""Testo del tooltip avanzato (markup avanzato accettato)
is_super_tooltip_imagestring""Immagine del tooltip avanzato
ib_enabledbooleantruefalse: immagine attenuata, barra e tastiera inerti; il tuo codice comanda ancora
ib_scrub_previewbooleantrueUna bolla di tempo segue il cursore sulla barra di scorrimento (true, predefinito), col capitolo se ce ne sono. false la nasconde

Un clic sull'immagine mette in pausa, un secondo riprende. Tastiera, quando il film ha il focus: Spazio o K riproduci/pausa, ←/→ cinque secondi, ↑/↓ volume, M muto, Inizio/Fine.


Metodi #

MetodoRuolo
of_play ( ) → longRiproduce is_source da dov'è: dall'inizio la prima volta, dalla pausa poi (ue_resumed). Rende 0 una volta inviato, -1 se il componente non è creato
of_play (string as_source) → longImposta is_source e lo riproduce: la stessa chiamata del lettore audio. Rende 0 una volta inviato, -1 senza componente
of_pause ( ) → longSospende il film dov'è; of_play lo riprende. Rende 0 una volta inviato, -1 senza componente
of_stop ( )Ferma il film e torna al suo inizio; segue ue_stopped
of_seek (long al_ms) → longSi posiziona in un punto del film, in millisecondi, in riproduzione o no; un file locale cerca subito. Rende 0 una volta inviato, -1 senza componente
of_is_playing ( ) → booleanVero finché un film è in corso — pausa compresa, non è finito
of_is_paused ( ) → booleanVero finché il film è sospeso — da of_pause, dalla barra o dalla tastiera
of_duration ( ) → longRende il numero di millisecondi che dura il film, 0 finché sconosciuto
of_position ( ) → longRende il numero di millisecondi letti dall'inizio; anche ue_progress lo porta ogni secondo
of_capture (string as_path) → longSalva l'immagine mostrata ora in PNG ; attende la prima immagine decodificata (10 s al massimo), quindi può seguire direttamente of_play. Rende 0 una volta scritta, -4 senza film, senza immagine in tempo, o quando un film di un altro sito rifiuta i suoi pixel, -5 su un percorso vuoto o non scrivibile
of_fullscreen (boolean ab_on) → longIl film su TUTTO il monitor (la DLL sposta il controllo in una finestra sua; la tua finestra non è toccata), o di ritorno. Doppio clic, il pulsante della barra, Esc. Rende 0, -1 se il componente non è creato
of_is_fullscreen ( ) → booleanVero finché il film copre il monitor
of_add_marker (long al_ms, string as_label) → longUn MARCATORE sulla barra: un segno cliccabile, e ue_marker_reached quando il film lo supera. Rende 0, -5 su una posizione negativa, -1 se il componente non è creato
of_clear_markers ( ) → longRimuove tutti i marcatori. Rende 0, -1 se il componente non è creato
of_marker_count ( ) → longRende il numero di marcatori
of_play_range (long al_from_ms, long al_to_ms) → longSuona UN segmento: alla fine ue_ended, o con ib_loop il segmento riparte. Rende 0, -5 su limiti senza senso, -1 se il componente non è creato
of_clear_range ( ) → longLibera il film dal suo segmento. Rende 0, -1 se il componente non è creato
of_step_frames (long al_frames) → longAvanza o arretra di al_frames immagini (ii_fps) e mette in pausa; tasti . e , sull'immagine. Rende 0, -1 se il componente non è creato
of_add_source (string as_source) → longAggiunge un film alla PLAYLIST: il primo diventa is_source, i successivi si susseguono da soli (ue_source_changed). Rende 0, -5 su una sorgente vuota, -1 se il componente non è creato
of_add_source (string as_source, string as_subtitles) → longAggiunge un film CON il suo file di sottotitoli (.vtt o .srt, convertito dalla DLL): il sottotitolo appartiene a quel film e appare solo quando viene riprodotto. Il modo semplice e senza ambiguità di sottotitolare una playlist. Rende 0, -5 su una sorgente vuota
of_clear_playlist ( ) → longSvuota la lista; il film in corso continua. Rende 0, -1 se il componente non è creato
of_next ( ) / of_previous ( ) → longIl film successivo o precedente della lista. Rende 0, -1 se il componente non è creato
of_playlist_count ( ) → longRende il numero di film della lista
of_playlist_index ( ) → longRende l'indice (da 1) del film della lista in corso, 0 fuori lista
of_add_subtitles (string as_lang, string as_source) → longUna traccia di sottotitoli per lingua: .vtt, o .srt convertito dalla DLL. Il pulsante CC della barra le scorre. Rende 0, -5 su una sorgente vuota, -1 se il componente non è creato
of_subtitle_count ( ) → longRende il numero di tracce di sottotitoli
of_remembered_position ( ) → longRende il numero di millisecondi in cui is_source è stato lasciato (ib_remember_position), 0 altrimenti
of_has_output ( ) → booleanVero se la postazione ha un'uscita audio
of_add_chapter (long al_ms, string as_title) → longUn CAPITOLO (sommario): ue_chapter_changed quando la riproduzione vi entra. of_go_chapter salta (1-based), of_next_chapter / of_previous_chapter li scorrono, of_chapter_count / of_chapter_index / of_chapters li leggono, of_clear_chapters li svuota. Rende 0, -5 se negativo
of_clear_chapters ( ) → longRimuove tutti i capitoli; la barra e la bolla di anteprima li dimenticano. Rende 0, -1 se non creato
of_go_chapter (long al_index) → longSalta al capitolo al_index (1-based, nell'ordine di of_add_chapter) e riproduce da lì; ue_seeked segue. Rende 0, -5 per un numero inferiore a 1
of_next_chapter ( ) → longSalta al capitolo dopo la posizione corrente; ue_seeked segue. Dall'ultimo capitolo nulla si muove. Rende 0, -1 se non creato
of_previous_chapter ( ) → longSalta al capitolo prima di quello in cui si trova la riproduzione; ue_seeked segue. Dal primo capitolo nulla si muove. Rende 0, -1 se non creato
of_chapter_count ( ) → longRende il numero di capitoli del film (of_add_chapter), 0 senza
of_chapter_index ( ) → longRende il numero (1-based) del capitolo in cui si trova la riproduzione, 0 prima del primo o senza capitoli. Letto dal vivo
of_chapters (ref long al_ms[], ref string as_titles[]) → longRiempie i capitoli in ordine — la posizione di ciascuno in ms in al_ms, il titolo in as_titles — per costruire un menu tuo. Rende il numero, 0 senza capitoli
of_picture_in_picture (boolean ab_on) → longIl film in una finestra flottante propria (true) o indietro (false); ue_pip_changed segue. of_is_pip dice se flotta, of_pip_available se la postazione lo permette. Rende 0, -1 se non creato
of_is_pip ( ) → booleanVero finché il film flotta nella sua finestra Picture-in-Picture; di nuovo falso quando l'utente la chiude
of_pip_available ( ) → booleanVero se il motore e la postazione permettono il Picture-in-Picture: da chiedere prima di offrire il pulsante

Eventi #

EventoQuando
ue_started (long al_duration_ms)Il film parte davvero; la lunghezza quando il file la dice, 0 altrimenti
ue_ended (boolean ab_truncated)Il film è finito da sé; ab_truncated vero quando il limite demo l'ha tagliato
ue_failed (string as_message)Il film non ha potuto suonare: file mancante, formato non decodificabile, URL muto; il messaggio appare anche sull'immagine
ue_stopped ( )of_stop ha tagliato un film in corso
ue_paused ( ) / ue_resumed ( )Il film è sospeso, poi riprende — dal tuo codice, dalla barra o dalla tastiera indifferentemente
ue_progress (long al_position_ms, long al_duration_ms)Una volta al secondo durante la riproduzione: ciò che una tua barra di avanzamento aspetta, senza timer
ue_seeked (long al_position_ms)L'UTENTE ha spostato la posizione (barra, frecce, marcatore); mai of_seek
ue_volume_changed (long al_percent)L'utente ha girato il volume; mai ii_volume
ue_rate_changed (long al_percent)L'utente ha scelto una velocità sulla barra; mai ii_rate
ue_subtitles_changed (string as_lang)L'utente ha scorso i sottotitoli (CC); vuoto = nessuno
ue_fullscreen_changed (boolean ab_on)Il film è passato a schermo intero, o è tornato
ue_marker_reached (long al_ms, string as_label)Il film supera un marcatore
ue_source_changed (long al_index, string as_source)La playlist passa a un altro film
ue_chapter_changed (long al_index, string as_title)La riproduzione entra in un altro capitolo (of_add_chapter): il suo numero (1-based, 0 prima del primo) e il titolo
ue_pip_changed (boolean ab_on)Il film entra (true) o esce (false) dalla finestra Picture-in-Picture — con of_picture_in_picture o dall'utente che la chiude

Schermo intero, marcatori, segmento, fotogramma per fotogramma #

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

Playlist, sottotitoli, ripresa, formati #

// 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()

Esempi #

Un ciclo di presentazione silenzioso, senza barra #

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")

I tuoi pulsanti e una barra di avanzamento #

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

Una miniatura del film per un rapporto #

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())

Buone pratiche #

Ereditato dalla base comune #

Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.

MembriRuoloDescritto in
of_resetRiportare il componente a zero3.6 Riportare un componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsScorciatoie da tastiera del componente3.5 Le scorciatoie da tastiera
of_is_created · of_is_ready · of_get_last_errorSe è nato, se è pronto, cosa è fallito3.7 Diagnostica
of_save_as_png · of_save_as_jpgEsportare il rendering in immagine3.8 Esportare il rendering come immagine
of_set_redrawRaggruppare le modifiche in un solo ridisegno3.10 Buone pratiche
of_preload_iconsIcone mostrate senza ritardoVisualizzazione istantanea: of_icon
of_set_translationTradurre una dicitura del componente5.2 Adattare un'etichetta: of_set_translation
of_focus_webviewDare il focus al componente6.4 Tastiera e focus
of_print · of_print_to_pdfStampare, o scrivere un PDF6.9 Stampare
of_set_property · of_get_property · of_component_namePilotare una proprietà per nome3.1 Il motore delle proprietà

← Riferimento dei componenti · Sommario della guida