基于webassembly的H265视频播放器前端Angular学习笔记1:从使用Angular创建WebWorker开始

基于webassembly的H265视频播放器前端Angular学习笔记1:从使用Angular创建WebWorker开始

本文基于开源项目decoder_wasm使用Angular开发的前端页面项目,对项目整理结构进行的改动,并使用Typescript重写大部分js源码,便于维护。
着重学习Angular框架下Worker,Wasm的使用,本人非前端开发从业人员,页面简陋请见谅。

Worker创建与使用

Angular CLI 创建worker类

先看文档 https://angular.cn/cli/generate#webworker

webWorker
ng generate webWorker <name> [options]
ng g webWorker <name> [options]
Creates a new generic web worker definition in the given or default project.
在给定项目或默认项目中创建新的通用web worker定义。

<name>
The name of the worker. 
web worker的名字

使用Angular CLI 创建Angular环境并创建Worker

$ ng new AngularTest
...
$ ng generate module WorkerTest                 
CREATE src/app/worker-test/worker-test.module.ts (196 bytes)

$ ng generate component WorkerTest --skipTests=true 
CREATE src/app/worker-test/worker-test.component.scss (0 bytes)
CREATE src/app/worker-test/worker-test.component.html (26 bytes)
CREATE src/app/worker-test/worker-test.component.ts (295 bytes)
UPDATE src/app/app.module.ts (494 bytes)

$ ng generate webWorker worker-test/WorkerTest
CREATE tsconfig.worker.json (212 bytes)
CREATE src/app/worker-test/worker-test.worker.ts (157 bytes)
UPDATE angular.json (3901 bytes)

生成代码
src/app/worker-test/worker-test.worker.ts

/// <reference lib="webworker" />

addEventListener('message', ({ data }) => {
  const response = `worker response to ${data}`;
  postMessage(response);
});

使用创建的Worker

删除app.component.html中例子代码
src/app/app.component.html

<router-outlet></router-outlet>

加个路由
app-routing.module.ts

import { WorkerTestComponent } from './worker-test/worker-test.component';
const routes: Routes = [
  { path: 'worker', component: WorkerTestComponent }
];

组件中创建worker

import { Component, OnInit, OnDestroy } from '@angular/core';

@Component({
  selector: 'app-worker-test',
  templateUrl: './worker-test.component.html',
  styleUrls: ['./worker-test.component.scss']
})
export class WorkerTestComponent implements OnInit, OnDestroy {
  private worker?: Worker = undefined;
  constructor() { }

  public runWorker(): void {
    if (typeof Worker !== 'undefined') {
      this.worker = new Worker('./worker-test.worker', { type: 'module' });
      this.worker.onmessage = ({ data }) => {
        console.log(`WorkerMessage:${data}`);
      };
      this.worker.postMessage(`Hello`);
    } else {
      // Web Workers are not supported in this environment.
      // You should add a fallback so that your program still executes correctly.
    }
  }

  private stopWorker() {
    if (this.worker) {
      this.worker.terminate();
      this.worker = undefined;
    }
  }

  ngOnInit(): void {
    this.runWorker();
  }
  ngOnDestroy(): void {
    this.stopWorker();
  }

}

打开网址: http://localhost:4200/worker
查看控制台输出

Angular is running in the development mode. Call enableProdMode() to enable the production mode.
worker-test.component.ts:16 WorkerOnMessage:worker response to Hello
client:52 [WDS] Live Reloading enabled.

基本的播放器Worker播放环境搞定.

接下来会使用worker下载视频视频片段,下一篇介绍

微信:yjkhtddx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值