<>最新更新时间:2019年1月11日15:19:15
<>《猛戳-查看我的博客地图-总有你意想不到的惊喜》
<https://blog.csdn.net/wanshaobo888/article/details/79179440>

本文内容:H5 Video

<>HTML5基础知识

* HTML5 的最新标准只支持 MP4, WebM, 和 Ogg 视频格式。
MP4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件
WebM = 带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件
Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件

<>HTML5 DOM 为 audio 和 video 元素提供的方法、属性和事件。

* 方法
addTextTrack() 向音频/视频添加新的文本轨道
canPlayType() 检测浏览器是否能播放指定的音频/视频类型
load() 重新加载音频/视频元素
play() 开始播放音频/视频
pause() 暂停当前播放的音频/视频

* 属性:
audioTracks 返回表示可用音轨的 AudioTrackList 对象
autoplay 设置或返回是否在加载完成后随即播放音频/视频
buffered 返回表示音频/视频已缓冲部分的 TimeRanges 对象
controller 返回表示音频/视频当前媒体控制器的 MediaController 对象
controls 设置或返回音频/视频是否显示控件(比如播放/暂停等)
crossOrigin 设置或返回音频/视频的 CORS 设置
currentSrc 返回当前音频/视频的 URL
currentTime 设置或返回音频/视频中的当前播放位置(以秒计)
defaultMuted 设置或返回音频/视频默认是否静音
defaultPlaybackRate 设置或返回音频/视频的默认播放速度
duration 返回当前音频/视频的长度(以秒计)
ended 返回音频/视频的播放是否已结束
error 返回表示音频/视频错误状态的 MediaError 对象
loop 设置或返回音频/视频是否应在结束时重新播放
mediaGroup 设置或返回音频/视频所属的组合(用于连接多个音频/视频元素)
muted 设置或返回音频/视频是否静音
networkState 返回音频/视频的当前网络状态
paused 设置或返回音频/视频是否暂停
playbackRate 设置或返回音频/视频播放的速度
played 返回表示音频/视频已播放部分的 TimeRanges 对象
preload 设置或返回音频/视频是否应该在页面加载后进行加载
readyState 返回音频/视频当前的就绪状态
seekable 返回表示音频/视频可寻址部分的 TimeRanges 对象
seeking 返回用户是否正在音频/视频中进行查找
src 设置或返回音频/视频元素的当前来源
startDate 返回表示当前时间偏移的 Date 对象
textTracks 返回表示可用文本轨道的 TextTrackList 对象
videoTracks 返回表示可用视频轨道的 VideoTrackList 对象
volume 设置或返回音频/视频的音量

* 事件:
abort 当音频/视频的加载已放弃时
canplay 当浏览器可以播放音频/视频时
canplaythrough 当浏览器可在不因缓冲而停顿的情况下进行播放时
durationchange 当音频/视频的时长已更改时
emptied 当目前的播放列表为空时
ended 当目前的播放列表已结束时
error 当在音频/视频加载期间发生错误时
loadeddata 当浏览器已加载音频/视频的当前帧时
loadedmetadata 当浏览器已加载音频/视频的元数据时
loadstart 当浏览器开始查找音频/视频时
pause 当音频/视频已暂停时
play 当音频/视频已开始或不再暂停时
playing 当音频/视频在已因缓冲而暂停或停止后已就绪时
progress 当浏览器正在下载音频/视频时
ratechange 当音频/视频的播放速度已更改时
seeked 当用户已移动/跳跃到音频/视频中的新位置时
seeking 当用户开始移动/跳跃到音频/视频中的新位置时
stalled 当浏览器尝试获取媒体数据,但数据不可用时
suspend 当浏览器刻意不获取媒体数据时
timeupdate 当目前的播放位置已更改时
volumechange 当音量已更改时
waiting 当视频由于需要缓冲下一帧而停止

<>小结

该系列文章主要讨论MP4文件的播放方案,同时video标签的属性、事件和方法大部分需要重写

<>MediaSource

*
MediaSource是Media Source Extensions API 表示媒体资源HTMLMediaElement
<https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLMediaElement>
对象的接口。MediaSource 对象可以附着在HTMLMediaElement在客户端进行播放。

*
构造函数

MediaSource()构造并且返回一个新的MediaSource的空对象(with no associated source buffers)。
示例:let mediaSource = new MediaSource();

* 属性
MediaSource.sourceBuffers 只读 返回一个SourceBufferList
对象,包含了这个MediaSource的SourceBuffer的对象列表。
MediaSource.activeSourceBuffers 只读 返回一个 SourceBufferList
对象,包含了这个MediaSource.sourceBuffers中的SourceBuffer 子集的对象—即提供当前被选中的视频轨 (video
track),启用的音频轨 (audio tracks) 以及显示/隐藏的字幕轨 (text tracks) 的对象列表。
MediaSource.readyState 只读
返回一个包含当前MediaSource状态的集合,即使它当前没有附着到一个media元素(closed),或者已附着并准备接收SourceBuffer 对象
(open),亦或者已附着但这个流已被MediaSource.endOfStream()关闭(ended.)
MediaSource.duration 获取和设置当前正在推流媒体的持续时间。

* 方法
MediaSource.addSourceBuffer() 创建一个带有给定MIME类型的新的 SourceBuffer 并添加到 MediaSource
的 SourceBuffers 列表。
MediaSource.removeSourceBuffer() 删除指定的SourceBuffer 从这个MediaSource对象中的
SourceBuffers列表。
MediaSource.endOfStream() 表示流的结束。

* 静态方法
MediaSource.isTypeSupported() 返回一个 Boolean
值表明给定的MIME类型是否被当前的浏览器支持——这意味着是否可以成功的创建这个MIME类型的SourceBuffer 对象。

<>采用MediaSource对象加载视频示例
var video = document.querySelector('video'); // var video =
document.createElement("VIDEO"); var assetURL =
'http://www.wanshaobo.com/demo.mp4'; var mimeCodec = 'video/mp4;
codecs="avc1.42E01E, mp4a.40.2"'; if ('MediaSource' in window && MediaSource.
isTypeSupported(mimeCodec)) { var mediaSource = new MediaSource(); video.src =
URL.createObjectURL(mediaSource); mediaSource.addEventListener('sourceopen',
sourceOpen); } else { console.error('Unsupported MIME type or codec: ',
mimeCodec); } function sourceOpen () { var mediaSource=this; var sourceBuffer =
mediaSource.addSourceBuffer(mimeCodec); //发起网络请求 fetch(assetURL, function (buf)
{ sourceBuffer.addEventListener('updateend', function (_) { mediaSource.
endOfStream(); video.play(); //console.log(mediaSource.readyState); // ended });
sourceBuffer.appendBuffer(buf); }); };
创建变量名为video的DOM对象

通过函数createObjectURL将video对象的src和mediaSource进行连接,然后通过注册事件event::sourceopen来触发当前连接之后的的回调处理;
回调处理就是需要赋值视频数据的地方,调用MediaSourceBuffer::addSourceBuffer方法来构建一个存放视频数据的Buffer;
在往buffer中存放数据结束后触发事件updateend
然后调用play函数通知浏览器播放视频

<>URL.createObjectURL()

URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL
的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。
提示:使用 一个MediaStream对象作为此方法的输入正在被弃用。这个方法正在被讨论是否应该被移除.
所以,你应当在你使用MediaStream时避免使用这个方法,而用HTMLMediaElement.srcObject() 替代.
语法: objectURL = URL.createObjectURL(blob);参数blob是用来创建 URL 的 File 对象或者 Blob 对象​

* URL.createObjectURL(blob) 会产生一个类似blob:d3958f5c-0777-0845-9dcf-2cb28783acaf
这样的URL字符串
* DOMString 是一个UTF-16字符串。由于JavaScript已经使用了这样的字符串,所以DOMString 直接映射到 一个String。
<>Blob 对象

Blob 对象表示一个不可变、原始数据的类文件对象。Blob 表示的不一定是JavaScript原生格式的数据。File 接口基于Blob,继承了 blob
的功能并将其扩展使其支持用户系统上的文件。

<>二进制数组

TypedArray,描述一个底层的二进制数据缓存区的一个类似数组(array-like)视图

* MDN官方文档-中文Uint8Array-zh-CN
<https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array>
* MDN官方文档-英文Uint8Array-en-US
<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array>
<>视频编码

视频编码方式,指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的
H.261、H.263、H.264
,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo、微软公司的WMV以及Apple公司的QuickTime等。
百科
<https://baike.baidu.com/item/%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81/839038?fromtitle=%E8%A7%86%E9%A2%91%E5%8E%8B%E7%BC%A9%E6%8A%80%E6%9C%AF&fromid=10125826>

<>视频源:TS

MPEG2-TS(Transport Stream“传输流”;又称TS、TP、MPEG-TS 或
M2T)是用于音效、图像与数据的通信协定,最早应用于DVD的实时传送节目。百科
<https://baike.baidu.com/item/MPEG2-TS/4452670>

MPEG2-TS格式的特点就是从视频流的任一片段开始都是可以独立解码

<>音视频相关

PTS 和 DTS <https://blog.csdn.net/x_iya/article/details/52495824>
<>参考
* HTML 5 视频/音频参考手册-W3School
<http://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp>
* MediaSource <https://developer.mozilla.org/zh-CN/docs/Web/API/MediaSource>
* 关于使用video标签时src网址blob类型的理解
<https://blog.csdn.net/github_37195944/article/details/76187388>
感谢阅读,欢迎评论^-^

<>打赏我吧^-^ <https://blog.csdn.net/wanshaobo888/article/details/86249460>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信