网站首页 > 技术教程 正文
简介
在本Angular教程中,我们将学习如何在Angular 10/9应用程序中嵌入视频播放器以播放视频, 并支持使用 ngx-videogular 包定制的播放列表和视频支付控件。HTML 5的视频播放器提供了许多选项来创建许多现代浏览器都支持的自定义播放器。我们可以根据需要轻松地使用视频标签属性来创建视频播放器。
对于小于Angular 9的版本,您可以使用Videogular2软件包,但对于最新的Angular 9+ 版本,则需要使用新的ngx-videogular软件包。这些ngx-videogular依赖包使用HTML 5视频播放器, 为使用者提供易于使用和令人激动的布局,从而使视频嵌入非常快速。使用此功能, ngx-videogular 提供许多必需的功能, 例如:
- 播放列表控件。
- 音频播放器支持。
- 同一屏幕上有多个玩家。
- 速度控制选项。
- 播放器中的实时媒体流。
创建一个新的Angular应用
运行一下ng命令创建新的Angular应用
$ ng new angular-video-player-app
# ? Would you like to add Angular routing? Yes
# ? Which stylesheet format would you like to use? SCSS
进入项目目录
$ cd angular-video-player-app
运行应用程序
$ ng serve --open
安装ngx-videogular组件
运行以下命令安装ngx-videogular软件包
$ npm install ngx-videogular --save
导入Icon和style
更新angular.json文件中的样式数组
...
"build": {
...
"styles": [
"./node_modules/@videogular/ngx-videogular/fonts/videogular.css",
"src/styles.scss"
],
"scripts": []
},
...
},
...
更新应用程序模块
想要使用Videogular2组件,我们将导入所需的模块。大约有四个模块, 但是您可以根据应用程序要 求导入。
打开app.module.ts文件并更新,如下所示:
// app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { VgCoreModule, } from '@videogular/ngx-videogular/core';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
?
VgCoreModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
简单的视频播放器
要创建一个简单的视频播放器, 请添加 <vg-player>带有 <video>和[ngMedia]="media" 指令的HTML 5标签的组件。
在<video>标记内,定义视频文件的 <source/> 。
<div class="player-wrapper">
<h3>Simple Video Player</h3>
<vg-player>
<video #media [vgMedia]="media" id="singleVideo" preload="auto" controls>
<source src="http://static.videogular.com/assets/videos/videogular.mp4" type="video/mp4">
<source src="http://static.videogular.com/assets/videos/videogular.ogg" type="video/ogg">
<source src="http://static.videogular.com/assets/videos/videogular.webm" type="video/webm">
</video>
</vg-player>
</div>
这将创建一个简单的视频播放器,具体如下:
具有自定义控件和图标的视频播放器
Videogular视频播放器通过添加各种组件来支持自定义播放器控件,例如速度控制,状态,播放/暂停按钮, 视频缓冲区和播放栏,静音和音量按钮。
导入模块
要使用这些组件,我们需要在app.module.ts文件中导入 VgControlsModule、VgOverlayPlayModule 、VgBufferingModule模块。
// app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { VgCoreModule, } from '@videogular/ngx-videogular/core';
?
import { VgControlsModule } from '@videogular/ngx-videogular/controls';
import { VgOverlayPlayModule } from '@videogular/ngx-videogular/overlay-play';
import { VgBufferingModule } from '@videogular/ngx-videogular/buffering';
?
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
?
VgCoreModule,
VgControlsModule,
VgOverlayPlayModule,
VgBufferingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
更新组件模块
在应用程序组件模板中,添加以下组件以呈现视频播放器自定义控件
<div class="player-wrapper">
?
<h3>Video Player with Controls</h3>
?
<vg-player>
<vg-overlay-play></vg-overlay-play>
<vg-buffering></vg-buffering>
?
<vg-scrub-bar>
<vg-scrub-bar-current-time></vg-scrub-bar-current-time>
<vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>
</vg-scrub-bar>
?
<vg-controls>
<vg-play-pause></vg-play-pause>
<vg-playback-button></vg-playback-button>
?
<vg-time-display vgProperty="current" vgFormat="mm:ss"></vg-time-display>
?
<vg-scrub-bar style="pointer-events: none;"></vg-scrub-bar>
?
<vg-time-display vgProperty="left" vgFormat="mm:ss"></vg-time-display>
<vg-time-display vgProperty="total" vgFormat="mm:ss"></vg-time-display>
?
<vg-track-selector></vg-track-selector>
<vg-mute></vg-mute>
<vg-volume></vg-volume>
?
<vg-fullscreen></vg-fullscreen>
</vg-controls>
?
<video #media [vgMedia]="media" id="singleVideo" preload="auto">
<source src="http://static.videogular.com/assets/videos/videogular.mp4" type="video/mp4">
<source src="http://static.videogular.com/assets/videos/videogular.ogg" type="video/ogg">
<source src="http://static.videogular.com/assets/videos/videogular.webm" type="video/webm">
?
<track kind="subtitles" label="English" src="assets/subs/pale-blue-dot.vtt" srclang="en" default>
<track kind="subtitles" label="Espa?ol" src="assets/subs/pale-blue-dot-es.vtt" srclang="es">
?
</video>
</vg-player>
?
</div>
这将宣染具有自定义图标和播放器布局的视频播放器.
具有智能控制和播放列表的视频播放器
播放器下添加事件侦析器和播放列表。
<div class="player-wrapper">
?
<vg-player (onPlayerReady)="onPlayerReady($event)">
<vg-overlay-play></vg-overlay-play>
<vg-buffering></vg-buffering>
?
<vg-scrub-bar>
<vg-scrub-bar-current-time></vg-scrub-bar-current-time>
<vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>
</vg-scrub-bar>
?
<vg-controls>
<vg-play-pause></vg-play-pause>
<vg-playback-button></vg-playback-button>
<vg-time-display vgProperty="current" vgFormat="mm:ss"></vg-time-display>
<vg-time-display vgProperty="total" vgFormat="mm:ss"></vg-time-display>
<vg-mute></vg-mute>
<vg-volume></vg-volume>
<vg-fullscreen></vg-fullscreen>
</vg-controls>
?
<video #media [vgMedia]="media" [src]="currentItem.src" id="singleVideo" preload="auto" crossorigin>
</video>
</vg-player>
?
<ul>
<li class="playlist-item" *ngFor="let item of playlist; let $index = index"
(click)="onClickPlaylistItem(item, $index)" [class.selected]="item === currentItem">
{{ item.title }}
</li>
</ul>
</div>
使用播放列表对象和播放器方法更新类组件
import { Component } from '@angular/core';
?
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
name = "Angular";
playlist = [
{
title: 'Pale Blue Dot',
src: 'http://static.videogular.com/assets/videos/videogular.mp4',
type: 'video/mp4'
},
{
title: 'Big Buck Bunny',
src: 'http://static.videogular.com/assets/videos/big_buck_bunny_720p_h264.mov',
type: 'video/mp4'
},
{
title: 'Elephants Dream',
src: 'http://static.videogular.com/assets/videos/elephants-dream.mp4',
type: 'video/mp4'
}
];
?
currentIndex = 0;
currentItem = this.playlist[this.currentIndex];
api;
?
constructor() {
}
?
onPlayerReady(api) {
this.api = api;
this.api.getDefaultMedia().subscriptions.loadedMetadata.subscribe(this.playVideo.bind(this));
this.api.getDefaultMedia().subscriptions.ended.subscribe(this.nextVideo.bind(this));
}
?
nextVideo() {
this.currentIndex++;
if (this.currentIndex === this.playlist.length) {
this.currentIndex = 0;
}
this.currentItem = this.playlist[this.currentIndex];
}
?
playVideo() {
this.api.play();
}
?
onClickPlaylistItem(item, index: number) {
this.currentIndex = index;
this.currentItem = item;
}
}
为播放列表添加SCSS样式, 并将 selected类添加到当前视频中。
.player-wrapper {
max-width: 500px;
margin: auto;
?
video {
width: 100%;
}
}
ul {
padding: 0px;
?
li.playlist-item {
padding: 10px;
list-style: none;
background: #e6e6e6;
margin-bottom: 2px;
cursor: pointer;
}
?
li.playlist-item.selected {
background-color: #ccc;
}
}
具有播放列表的播放器如下所示:
结论
使用ngx-videogular包在Angular 10/9应用程序中实现视频播放器如此简单。有许多选项和组件可以修改视频播放器的行为。
参考
https://github.com/sliceofbytes/ngx-videogular
- 上一篇: 16k Star!一个开源的命令行视频播放器
- 下一篇: 浏览器播放rtsp视频流解决方案
猜你喜欢
- 2024-11-24 2023-04-21:用go语言重写ffmpeg的metadata.c示例。
- 2024-11-24 Ubuntu20编译FFmpeg4(非常简单)
- 2024-11-24 基于 FFmpeg 的播放器 demo
- 2024-11-24 2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧
- 2024-11-24 2023-02-25:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420S
- 2024-11-24 2023-02-24:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420S
- 2024-11-24 2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息
- 2024-11-24 搭载Android11的ZidooM6预览版
- 2024-11-24 2023-03-21:音视频解混合(demuxer)为MP3和H264,用go语言编写
- 2024-11-24 3分钟快速实现Flutter当中播放视频方案 支持Android iOS 通用
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)