HTML5 基础 音视频部分

本文详细介绍了HTML5中视频和音频标签的使用方法及常见属性,包括如何设置播放控制、预加载等,并展示了如何利用JavaScript来监听和操作这些媒体元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音频格式:mp3, ogg, wav.

视频格式:mp4, ogv, webm.

历史:早期使用Flash, html5 后使用video/ audio.


video/audio 标签及其常用属性

- controls

- autoplay

- loop

- source

- preload

- poster(video)【视频播放前显示的封面】

以视频为例:

	<video src="media/badfox.mp4" width="640px" autoplay="autoplay" controls="controls" loop="loop">
		您的浏览器不支持video 标签
	</video>
	<video width="640px" autoplay="autoplay" controls="controls" loop="loop" poster="xxx.jpg" preload="preload">
		<!-- 只会显示最先能显示出来的视频资源 -->
		<!-- 以下三种格式,基本可以兼容所有浏览器 -->
		<source src="media/xxx.mp4" type="video/mp4">
		<source src="media/xxx.ogv" type="video/ogv">
		<source src="media/xxx.webm" type="video/webm">
	</video>

其中,preload 属性有三个值:auto meta none. 分别表示,加载数据与元数据,只加载元数据,不加载数据不加载元数据。


video/audio API 事件

- loadedmetadata(加载完元数据触发的事件)              - seeking(拖动视频进度条,需对视频进行重定位)

- progress(请求视频数据)                                        - waiting(网络上视频,下一帧图像需要缓冲时)

- canplay(可以播放)                                               - volumechange(声音变化)

- canplaythrough(可以一直播放到结束)                      - ended(视频结束)

- timeupdate(时间进度在更新,在播放时会一直触发)    - pause(视频暂停)

	<video src="media/badfox.mp4" id="myvideo" width="640px" autoplay="autoplay" controls="controls">
		浏览器不支持视频(video)
	</video>
	<script type="text/javascript">
		var v = document.getElementById("myvideo");
		// 加载元数据
		v.onloadedmetadata = function(){
			console.log("loadedmetadata")
		}
	</script>

video/audio API 属性

- currentSrc    -ended

- duration    - muted

- currentTime    - playbackRate

- volume    - buffered

- paused

<script type="text/javascript">
		var v = document.getElementById("myvideo");
		var startbtn = document.getElementById("start");
		var pausebtn = document.getElementById("pause");
		// 加载元数据
		v.onloadedmetadata = function(){
			console.log("loadedmetadata");
			console.log("视频地址:" + v.currentSrc);
			console.log("视频总时长:" + v.duration);
			console.log("视频播放速率:" + v.playbackRate);
			console.log("是否暂停:" + v.paused);
			console.log("是否结束:" + v.ended);
			console.log("是否静音:" + v.muted);
		}
		v.ontimeupdate = function(){
			console.log("视频当前时间:" + v.currentTime);
			console.log("当前缓冲量:" + v.buffered.end(0));
		}
		v.onvolumechange = function(){
			console.log("当前音量:" + v.volume);
		}
		startbtn.onclick = function(){
			// 播放
			v.play();
		};

		pausebtn.onclick = function(){
			// 暂停
			v.pause();
		}

		
	</script>

Html5网页纯JavaScript录制MP3音频 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Html5网页JavaScript录制MP3音频</title> <meta charset="utf-8" /> </head> <body> Html5网页JavaScript录制MP3音频 录制 停止 上传 调试信息: [removed][removed] [removed] var recorder = new MP3Recorder({ debug:true, funOk: function () { btnStart.disabled = false; log('初始化成功'); }, funCancel: function (msg) { log(msg); recorder = null; } }); var mp3Blob; function funStart(button) { btnStart.disabled = true; btnStop.disabled = false; btnUpload.disabled = true; log('录音开始...'); recorder.start(); } function funStop(button) { recorder.stop(); btnStart.disabled = false; btnStop.disabled = true; btnUpload.disabled = false; log('录音结束,MP3导出中...'); recorder.getMp3Blob(function (blob) { log('MP3导出成功'); mp3Blob = blob; var url = URL.createObjectURL(mp3Blob); var div = document.createElement('div'); var au = document.createElement('audio'); var hf = document.createElement('a'); au.controls = true; au.src = url; hf.href = url; hf.download = new Date().toISOString() + '.mp3'; hf[removed] = hf.download; div.appendChild(au); div.appendChild(hf); recordingslist.appendChild(div); }); } function log(str) { recordingslist[removed] += str + ''; } function funUpload() { var fd = new FormData(); var mp3Name = encodeURIComponent('audio_recording_' + new Date().getTime() + '.mp3'); fd.append('mp3Name', mp3Name); fd.append('file', mp3Blob); var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { recordingslist[removed] += '上传成功:' + mp3Name + ''; } }; xhr.open('POST', 'upload.ashx'); xhr.send(fd); } [removed] </body> </html> [javascript] view plain copy 在CODE上查看代码片派生到我的代码片 (function (exports) { var MP3Recorder = function (config) { var recorder = this; config = config || {}; config.sampleRate = config.sampleRate || 44100; config.bitRate = config.bitRate || 128; navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; if (navigator.getUserMedia) { navigator.getUserMedia({ audio: true }, function (stream) { var context = new AudioContext(), microphone = context.createMediaStreamSource(stream), processor = context.createScriptProcessor(16384, 1, 1),//bufferSize大小,输入channel数,输出channel数 mp3ReceiveSuccess, currentErrorCallback; config.sampleRate = context.sampleRate; processor.onaudioprocess = function (event) { //边录音边转换 var array = event.inputBuffer.getChannelData(0); realTimeWorker.postMessage({ cmd: 'encode', buf: array }); }; var realTimeWorker = new Worker('js/worker-realtime.js'); realTimeWorker.onmessage = function (e) { switch (e.data.cmd) { case 'init': log('初始化成功'); if (config.funOk) { config.funOk(); } break; case 'end': log('MP3大小:', e.data.buf.length); if (mp3ReceiveSuccess) { mp3ReceiveSuccess(new Blob(e.data.buf, { type: 'audio/mp3' })); } break; case 'error': log('错误信息:' + e.data.error); if (currentErrorCallback) { currentErrorCallback(e.data.error); } break; default: log('未知信息:', e.data); } }; recorder.getMp3Blob = function (onSuccess, onError) { currentErrorCallback = onError; mp3ReceiveSuccess = onSuccess; realTimeWorker.postMessage({ cmd: 'finish' }); }; recorder.start = function () { if (processor && microphone) { microphone.connect(processor); processor.connect(context.destination); log('开始录音'); } } recorder.stop = function () { if (processor && microphone) { microphone.disconnect(); processor.disconnect(); log('录音结束'); } } realTimeWorker.postMessage({ cmd: 'init', config: { sampleRate: config.sampleRate, bitRate: config.bitRate } }); }, function (error) { var msg; switch (error.code || error.name) { case 'PERMISSION_DENIED': case 'PermissionDeniedError': msg = '用户拒绝访问麦客风'; break; case 'NOT_SUPPORTED_ERROR': case 'NotSupportedError': msg = '浏览器不支持麦客风'; break; case 'MANDATORY_UNSATISFIED_ERROR': case 'MandatoryUnsatisfiedError': msg = '找不到麦客风设备'; break; default: msg = '无法打开麦克风,异常信息:' + (error.code || error.name); break; } if (config.funCancel) { config.funCancel(msg); } }); } else { if (config.funCancel) { config.funCancel('当前浏览器不支持录音功能'); } } function log(str) { if (config.debug) { console.log(str); } } } exports.MP3Recorder = MP3Recorder; })(window);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值