PBToolboxAI v3 ← Site

video — u_pbt_video #

← Referência dos componentes · Índice do guia

Leitor de vídeo: um ficheiro do posto — servido em fluxo pela DLL, um filme longo começa de imediato — ou um URL, com a barra de transporte do componente, que segue o tema: reprodução, procura, tempo, silêncio, volume. Legendas WebVTT, cartaz antes da reprodução, ciclo, velocidade, enquadramento, captura da imagem atual em PNG. Tudo o que o utilizador faz na barra, a sua aplicação sabe.

▶ Ver ao vivo — Aplicação de demonstração, mosaico Video player: o filme, o código que o controla e esta página, lado a lado (ligação à Internet necessária para o filme de exemplo).


Em resumo #

Userobjectu_pbt_video
Classe de items— (componente sem items)
Serve paraUm filme de formação na aplicação, o vídeo de um produto, a repetição de uma gravação, um ciclo de apresentação num stand
PrincípioUm <video> do motor WebView2: todos os formatos que descodifica (mp4, webm, ogv, m4v). A barra é do componente; os seus gestos passam pelos mesmos verbos que as suas chamadas, logo os mesmos eventos
DependênciaO runtime WebView2, já exigido pela biblioteca — nada mais

Início rápido #

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

Tudo o que se define é uma propriedade (is_source, ii_volume, ib_loop…), lida em direto no componente; tudo o que se faz é um método (of_play, of_pause, of_stop, of_seek, of_capture); tudo o que acontece é um evento (ue_started, ue_ended, ue_progress…). Um ficheiro ausente não é uma exceção: ue_failed di-lo, e a mensagem aparece sobre a imagem.


Propriedades #

PropriedadeTipoPredefiniçãoFunção
is_sourcestring""O filme: um ficheiro do posto (qualquer caminho, em fluxo) ou um URL http(s). Defini-lo pára o que tocava; ib_autoplay decide se o novo arranca sozinho. Um filme de qualquer tamanho, também numa aplicação de 32 bits: a DLL serve-o por fatias, nunca o ficheiro inteiro de uma vez; um filme que o motor não consegue descodificar é assinalado por ue_failed
ib_autoplaybooleanfalseArranca o filme assim que is_source é definido; senão espera por of_play, pela barra ou pelo teclado, e mostra is_poster
ib_mutedbooleanfalseCorta o som, volume mantido; o botão da barra e a tecla M também o definem
ii_volumeinteger100Volume em percentagem, 0 a 100; também o cursor da barra e as setas cima/baixo
ib_loopbooleanfalseRepete o filme em ciclo até of_stop; um filme em ciclo nunca dispara ue_ended
ii_rateinteger100Velocidade em percentagem, 25 a 400: 50 = metade, 200 = dobro, o som segue
is_stretchstring"uniform"Enquadramento: STRETCH_NONE, STRETCH_FILL, STRETCH_UNIFORM, STRETCH_UNIFORMTOFILL — os quatro modos de uma imagem
ib_controlsbooleantrueA barra de transporte do componente, com o tema. false esconde-a: a sua janela controla o filme
is_posterstring""O cartaz mostrado antes do filme: ficheiro, URL ou pack.dll:NOME, como a origem de uma imagem. Um prefixo mono:/tint:/white:/black: recolore uma imagem monocromática ao tema
is_subtitlesstring""Um ficheiro de legendas, local ou URL: WebVTT (.vtt) ou SubRip (.srt, convertido pela DLL). Uma faixa; of_add_subtitles empilha várias
is_subtitle_langstring""A faixa de legendas mostrada (um idioma de of_add_subtitles); vazio = nenhuma
ii_fpsinteger25Imagens por segundo do filme, para of_step_frames
ib_remember_positionbooleanfalseLembra onde cada filme foi deixado e retoma aí no próximo of_play da mesma fonte
is_theme_stylestringfluentEstilo visual do componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara ou escura (constantes THEME_MODE_*)
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque do tema)
is_tooltipstring""Tooltip simples apresentado ao passar sobre o componente
is_super_tooltip_titlestring""Título do tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido (aceita marcação enriquecida)
is_super_tooltip_imagestring""Imagem do tooltip enriquecido
ib_enabledbooleantruefalse: imagem escurecida, barra e teclado inertes; o seu código continua a comandar
ib_scrub_previewbooleantrueUma bolha de tempo segue o cursor sobre a barra (true, por omissão), com o capítulo se houver. false oculta-a

Um clique na imagem pausa, um segundo retoma. Teclado, quando o filme tem o foco: Espaço ou K reproduzir/pausa, ←/→ cinco segundos, ↑/↓ volume, M silêncio, Início/Fim.


Métodos #

MétodoFunção
of_play ( ) → longReproduz is_source de onde está: do início da primeira vez, da pausa depois (ue_resumed). Devolve 0 uma vez enviado, -1 se o componente não está criado
of_play (string as_source) → longDefine is_source e reproduz: a mesma chamada do leitor de sons. Devolve 0 uma vez enviado, -1 sem componente
of_pause ( ) → longSuspende o filme onde está; of_play retoma-o. Devolve 0 uma vez enviado, -1 sem componente
of_stop ( )Pára o filme e volta ao início; segue-se ue_stopped
of_seek (long al_ms) → longPosiciona-se num ponto do filme, em milissegundos, em reprodução ou não; um ficheiro local procura de imediato. Devolve 0 uma vez enviado, -1 sem componente
of_is_playing ( ) → booleanVerdadeiro enquanto um filme está em curso — pausa incluída, não terminou
of_is_paused ( ) → booleanVerdadeiro enquanto o filme está suspenso — por of_pause, pela barra ou pelo teclado
of_duration ( ) → longDevolve o número de milissegundos que o filme dura, 0 enquanto desconhecido
of_position ( ) → longDevolve o número de milissegundos reproduzidos desde o início; ue_progress também o traz a cada segundo
of_capture (string as_path) → longGuarda a imagem mostrada agora em PNG ; espera pela primeira imagem descodificada (10 s no máximo), por isso pode seguir-se diretamente a of_play. Devolve 0 uma vez escrita, -4 sem filme, sem imagem a tempo, ou quando um filme de outro site recusa os seus píxeis, -5 num caminho vazio ou não gravável
of_fullscreen (boolean ab_on) → longO filme em TODO o monitor (a DLL move o controlo para uma janela própria; a sua janela não é tocada), ou de volta. Duplo clique, o botão da barra, Escape. Devolve 0, -1 se o componente não estiver criado
of_is_fullscreen ( ) → booleanVerdadeiro enquanto o filme cobre o monitor
of_add_marker (long al_ms, string as_label) → longUm MARCADOR na barra: um traço clicável, e ue_marker_reached quando o filme o passa. Devolve 0, -5 numa posição negativa, -1 se o componente não estiver criado
of_clear_markers ( ) → longRemove todos os marcadores. Devolve 0, -1 se o componente não estiver criado
of_marker_count ( ) → longDevolve o número de marcadores
of_play_range (long al_from_ms, long al_to_ms) → longToca UM segmento: no fim, ue_ended, ou com ib_loop o segmento recomeça. Devolve 0, -5 em limites sem sentido, -1 se o componente não estiver criado
of_clear_range ( ) → longLiberta o filme do seu segmento. Devolve 0, -1 se o componente não estiver criado
of_step_frames (long al_frames) → longAvança ou recua al_frames imagens (ii_fps) e pausa; teclas . e , sobre a imagem. Devolve 0, -1 se o componente não estiver criado
of_add_source (string as_source) → longAcrescenta um filme à LISTA DE REPRODUÇÃO: o primeiro torna-se is_source, os seguintes encadeiam-se sozinhos (ue_source_changed). Devolve 0, -5 numa fonte vazia, -1 se o componente não estiver criado
of_add_source (string as_source, string as_subtitles) → longAcrescenta um filme COM o seu ficheiro de legendas (.vtt ou .srt, convertido pela DLL): a legenda pertence a esse filme e aparece só quando ele toca. A forma simples e sem ambiguidade de legendar uma lista. Devolve 0, -5 numa fonte vazia
of_clear_playlist ( ) → longEsvazia a lista; o filme em curso continua. Devolve 0, -1 se o componente não estiver criado
of_next ( ) / of_previous ( ) → longO filme seguinte ou anterior da lista. Devolve 0, -1 se o componente não estiver criado
of_playlist_count ( ) → longDevolve o número de filmes da lista
of_playlist_index ( ) → longDevolve o índice (a partir de 1) do filme da lista em curso, 0 fora da lista
of_add_subtitles (string as_lang, string as_source) → longUma faixa de legendas por idioma: .vtt, ou .srt convertido pela DLL. O botão CC da barra percorre-as. Devolve 0, -5 numa fonte vazia, -1 se o componente não estiver criado
of_subtitle_count ( ) → longDevolve o número de faixas de legendas
of_remembered_position ( ) → longDevolve o número de milissegundos onde is_source foi deixado (ib_remember_position), 0 caso contrário
of_has_output ( ) → booleanVerdadeiro se o posto tem saída áudio
of_add_chapter (long al_ms, string as_title) → longUm CAPÍTULO (índice): ue_chapter_changed quando a leitura entra. of_go_chapter salta (1-based), of_next_chapter / of_previous_chapter percorrem, of_chapter_count / of_chapter_index / of_chapters leem, of_clear_chapters esvazia. Devolve 0, -5 se negativo
of_clear_chapters ( ) → longRemove todos os capítulos; a barra e a bolha de pré-visualização esquecem-nos. Devolve 0, -1 se não criado
of_go_chapter (long al_index) → longSalta para o capítulo al_index (1-based, pela ordem de of_add_chapter) e lê a partir daí; ue_seeked segue. Devolve 0, -5 para um número inferior a 1
of_next_chapter ( ) → longSalta para o capítulo a seguir à posição atual; ue_seeked segue. Do último capítulo nada se move. Devolve 0, -1 se não criado
of_previous_chapter ( ) → longSalta para o capítulo anterior àquele onde está a leitura; ue_seeked segue. Do primeiro capítulo nada se move. Devolve 0, -1 se não criado
of_chapter_count ( ) → longDevolve o número de capítulos do filme (of_add_chapter), 0 sem nenhum
of_chapter_index ( ) → longDevolve o número (1-based) do capítulo onde está a leitura, 0 antes do primeiro ou sem capítulos. Lido ao vivo
of_chapters (ref long al_ms[], ref string as_titles[]) → longPreenche os capítulos por ordem — a posição de cada um em ms em al_ms, o título em as_titles — para construir um menu seu. Devolve o número, 0 sem capítulos
of_picture_in_picture (boolean ab_on) → longO filme numa janela flutuante própria (true) ou de volta (false); ue_pip_changed segue. of_is_pip diz se flutua, of_pip_available se o posto permite. Devolve 0, -1 se não criado
of_is_pip ( ) → booleanVerdadeiro enquanto o filme flutua na sua janela Picture-in-Picture; falso de novo quando o utilizador a fecha
of_pip_available ( ) → booleanVerdadeiro se o motor e o posto permitem o Picture-in-Picture: perguntar antes de oferecer o botão

Eventos #

EventoQuando
ue_started (long al_duration_ms)O filme começa realmente; o comprimento quando o ficheiro o diz, 0 caso contrário
ue_ended (boolean ab_truncated)O filme terminou por si; ab_truncated verdadeiro quando o limite demo o cortou
ue_failed (string as_message)O filme não pôde ser reproduzido: ficheiro ausente, formato não descodificável, URL muda; a mensagem aparece também sobre a imagem
ue_stopped ( )of_stop cortou um filme em curso
ue_paused ( ) / ue_resumed ( )O filme é suspenso, depois retoma — pelo seu código, pela barra ou pelo teclado indistintamente
ue_progress (long al_position_ms, long al_duration_ms)Uma vez por segundo durante a reprodução: o que uma barra de progresso sua precisa, sem timer
ue_seeked (long al_position_ms)O UTILIZADOR moveu a posição (barra, setas, marcador); nunca of_seek
ue_volume_changed (long al_percent)O utilizador rodou o volume; nunca ii_volume
ue_rate_changed (long al_percent)O utilizador escolheu uma velocidade na barra; nunca ii_rate
ue_subtitles_changed (string as_lang)O utilizador percorreu as legendas (CC); vazio = nenhuma
ue_fullscreen_changed (boolean ab_on)O filme passou a ecrã inteiro, ou voltou
ue_marker_reached (long al_ms, string as_label)O filme passa um marcador
ue_source_changed (long al_index, string as_source)A lista de reprodução passa a outro filme
ue_chapter_changed (long al_index, string as_title)A leitura entra noutro capítulo (of_add_chapter): o seu número (1-based, 0 antes do primeiro) e o título
ue_pip_changed (boolean ab_on)O filme entra (true) ou sai (false) da janela Picture-in-Picture — por of_picture_in_picture ou pelo utilizador que a fecha

Ecrã inteiro, marcadores, segmento, imagem a imagem #

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

Lista de reprodução, legendas, retoma, formatos #

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

Exemplos #

Um ciclo de apresentação silencioso, sem 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")

Os seus botões e uma barra de progresso #

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

Uma miniatura do filme para um relatório #

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

Boas práticas #

Herdado da base comum #

Estes membros existem em todos os componentes visuais — não são próprios deste. São detalhados uma só vez, nos capítulos transversais; esta tabela apenas diz onde os ler.

MembrosFunçãoDetalhado em
of_resetRepor o componente a zero3.6 Repor um componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsAtalhos de teclado do componente3.5 Os atalhos de teclado
of_is_created · of_is_ready · of_get_last_errorSe nasceu, se está pronto, o que falhou3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar a renderização como imagem3.8 Exportar a representação como imagem
of_set_redrawAgrupar as alterações num único repinte3.10 Boas práticas
of_preload_iconsÍcones mostrados sem atrasoApresentação instantânea: of_icon
of_set_translationTraduzir uma legenda do componente5.2 Adaptar uma etiqueta: of_set_translation
of_focus_webviewDar o foco ao componente6.4 Teclado e focus
of_print · of_print_to_pdfImprimir, ou escrever um PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar uma propriedade pelo nome3.1 O motor de propriedades

← Referência dos componentes · Índice do guia