从0开始写一个播放器系列-开篇
从0开始写一个播放器系列-开篇
阅读本系列博客所需要具备的知识: js, ts , canvas Api , DOM, webpack, 不懂也没有太大的关系, 我会捎带着写出来, 剩下的自行百度
第一步,梳理所需要的功能以及收集实现方案
首先需要确定需求
既然想要做一个播放器,首先应该具有播放器基本的功能,
- 播放/暂停
- 下一个(如果传入的播放地址为数组)
- 选择清晰度
- 倍速播放
- 音量
- 画中画
- 宽屏
- 网页全屏
- 全屏
- 镜像
上方需求很简单, 通过原生的video控制条和简单的css就可以实现, 但是我们既然要做播放器就不能仅限于基本功能的开发, 所以需要加大一点难度
使用canvas 渲染 video
为什么使用canvas渲染video
表达不准确请各位大佬评论区指出
之前在准备做播放器之前我就知道canvas可以渲染video标签, 有一段时间我也很迷惑, 为什么我打心底觉得要使用canvas渲染video, 知道我开始写这篇博客的时候突然想到了.
各个浏览器之间, video的行为是不同的, 可能会出现怪异行为, 使用canvas封装一次video会很大程度的解决这些怪异行为以及很好的适配移动端
既然使用canvas渲染video标签了, 不搞点事情肯定是对不起canvas标签的, 根据我目前所知的知识, canvas是可以很好的调整整体显示的内容的, 比如说修改每个像素点的RGBA值
所以添加一个实验室功能(可能会影响到性能的功能): 滤镜功能
滤镜功能的作用是每次渲染canvas的时候修改每个像素的RGBA值
滤镜功能引出的思考:
是否需要一个中转canvas来获取ImageData
所以暂定解决方案为, video放到中转canvas中, 利用中转canvas来drawImage
最后, 我觉得一个播放器没有弹幕是没有灵魂的, 所以还要添加弹幕功能
这个播放器期望支持原生html5平台以及vue和react, 所以需要使用原生js或者typescript开发, 又因为Typescript已经趋进于主流, 所以本项目决定使用typescript进行开发
总结一下
播放器需要拥有基本的功能, 使用canvas渲染video标签, 使用中转canvas进行ImageData的获取, 添加滤镜功能, 添加弹幕功能, 使用Typescript进行开发
至此, 需求整理完毕, 下篇博客开始搭建开发环境
因为本人准备边开发播放器边写本系列的博客, 所以更新速度会比较慢, 很多内容都会继续调整, 不足之处望各位海涵
github地址: https://github.com/lidppp/dp-video
本人博客地址: https://www.lidppp.com
从0开始写一个播放器系列-开篇相关推荐
- 用qt帮我写一个播放器,要求实时解码h264
好的,我来帮你写一个基于 Qt 的播放器,它可以实时解码 H.264 视频流. 首先,你需要安装 Qt 开发环境和相关工具,然后打开 Qt Creator 创建一个新项目.在新项目中,你需要添加一些代 ...
- FFmpegSDL教程:用不到1000行代码写一个播放器
序 更新:本教程最近一次更新于2015年2月. FFmpeg是一个创建视频应用,甚至更通用程序的强大音视频工具库.FFmpeg能够完成视频处理过程中解码,编码,封装和解封装所有这些棘手工作.借助它,可 ...
- 免费音乐接口,当时写音乐播放器没资源,今天特意用nodejs写了一个,并布署到了cloudfo......
2019独角兽企业重金招聘Python工程师标准>>> 接口首地址为ttpod.cloudfoundry.com 音乐搜索接口为ttpod.cloudfoundry.com/musi ...
- 制作一个播放器(二)
制作一个播放器(一) 制作一个播放器(二) 接着上一章的热身,咱们继续写播放器.上一篇中咱们用的是句柄的方式来播放视频.实际开发中,我们更多的是把数据给回调出来,这样更好的去显示视频,处理视频.这期, ...
- 使用纯css做一个播放器
首先,贴出成品图,如下: 可以发现播放器的基本形状有了,但是需要精确到每一个方向,不能溢出,就得以如下的方式写,贴出静态代码: html如下: <!DOCTYPE html> <ht ...
- 易语言用多文件对话框写MP3播放器
利用多文件对话框和超级列表框,示范了一个本地MP3播放器. 视频链接: 511遇见易语言教程 教程源码: .版本 2 .支持库 iext .支持库 xplib.程序集 窗口程序集_启动窗口.子程序 _ ...
- Anyplayer 1.0.5 - WordPress万能播放器插件
http://cpiz.net/blog/2010/12/anyplayer-1/ Anyplayer 1.0.5 - WordPress万能播放器插件 原创作品,转载请注明出处 题外话: 08年初写 ...
- 用JavaScript在网页编写一个播放器
今天是教师节,我先祝各位老师节日快乐!!! 今天我和大家分享用JavaScript在网页编写一个播放器. 对于播放器,大家都不陌生,那么要怎么样才能实现它呢? 下面是我做的一个播放器的图 首先我们从上 ...
- 使用IntentService给自己的Android应用写一个文件下载器。
接着上一篇的http://www.cnblogs.com/zhengxt/p/3657833.html,当我们想给自己的APP写一个文件下载器时,可以用重写IntentService来实现. 使用In ...
最新文章
- backup ram不稳定 stm32_STM32学习笔记
- iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观
- Delphi_04_Delphi_Object_Pascal_基本语法_02
- py脚本得到Python的版本
- windows ping 不通虚拟机
- 多图文帖智能封面提取方案
- MySQL 常用运算符
- 换工作,让我里外不是人,到底错在哪儿
- 协同过滤算法的几篇文章PFM/svd/ svd++
- arduino动态刷新显示_Arduino驱动TFT彩色触摸屏-有没有更好的方法?
- Rife算法的Matlab实现
- 优科豪马冬季SUV轮胎G072的性能特点全解
- 免费真实增加网站访问量的方法
- C语言 线程 进程 优先级,C++线程优先级SetThreadPriority的使用实例
- [anjularjs] ui-router嵌套ui-view不刷新问题
- 【电脑开机没反应的常见原因和解决方法】
- 制药企业的发展趋势--行业公司数据调研
- ESP32 寻迹模块测试
- Visual Studio2019完全卸载方法
- java实现三宫格及其扩展_使用css伪类before/after实现 正方形三宫格、正方形六宫格、正方形九宫格...
热门文章
- 让 WebRTC 使用外部的音视频编解码器
- C++继承、虚函数、覆盖、多态、纯虚函数
- 【用C++面向对象的思想以及STL完成贪吃蛇游戏】
- JavaWeb_项目E家园
- Wrod2vec算法实战_3分钟热情学NLP第5篇
- 职称计算机考试模块论坛怎么样,今天做职称计算机WROD模块练习的一些感受
- 我们生活在一个即将巨变的时代,生物大灭绝与生物大爆发
- 考研初试占比高,复试压力小院校合集~
- 2021 ICCV : Instance-level Image Retrieval using Reranking Transformers
- multisim 四位数码管_multisim中数码管 DCD-HEX 四个引脚都是指的什么?