遊戲陪玩系統開發,音視訊混流的實現程式碼
主要用的API有:
1、建立一個BGM音訊流
// 建立AudioContext例項var audioCtx = new AudioContext()// 建立一個音訊源var source = audioCtx.createBufferSource()// 建立一個媒體流節點var track = audioCtx.createMediaStreamDestination()
// 獲取BGM的檔案的arraybuffervar request = new XMLHttpRequest();request.open('GET', './music/test.mp3', true);request.responseType = 'arraybuffer';request.onload = function() { // 這裡我們通過ajax請求將檔案轉arraybuffer格式 var audioData = request.response; audioCtx.decodeAudioData(audioData, function(buffer) { // 這裡的buffer就是解碼過的arraybuffer // 將buffer加入音訊源裡 source.buffer = buffer // 將音訊輸出到一個媒體流節點上 source.connect(track) // 重複播放BGM source.loop = true; // 播放緩衝區的音訊資料 source.start(0) })}request.send();
2、遊戲陪玩系統捕獲攝像頭音視訊流
navigator.mediaDevices.getUserMedia({ audio: true, video: true}).then(function(stream) { // stream這裡就是我們捕獲的攝像頭音視訊流 // 將BGM內的音訊流提取出來 var bgmAudioTrack = track.stream.getAudioTracks()[0] // 這裡track.stream是重媒體流節點裡的媒體流,getAudioTracks這才是從流內獲取音訊流集合 // stream新增音訊流 stream.addTrack(bgmAudioTrack)})
3、下載多媒體
var start = document.getElementById('start')var stop = document.getElementById('stop')const chunks = null// 建立MediaRecorder例項(這裡可以看之前的文章)var mediaRecorder = new MediaRecorder(stream, { audioBitsPerSecond : 128000, videoBitsPerSecond : 100000, mimeType : 'video/webm;codecs=h264'})start.onclick = function () { mediaRecorder.start() console.log('開始採集')}stop.onclick = function () { mediaRecorder.stop() console.log('停止採集')}mediaRecorder.onstop = function (e) { var blob = new Blob([chunks], { 'type' : 'video/mp4' }) let a = document.createElement('a') a.href = URL.createObjectURL(blob) a.download = `test.mp4` a.click()}mediaRecorder.ondataavailable = function(e) { chunks = e.data}
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>音視訊混流</title></head><body> <button id="button">開啟攝像頭</button> <button id="start">開始採集</button> <button id="stop">停止採集</button></body><script> var button = document.getElementById('button') var start = document.getElementById('start') var stop = document.getElementById('stop') var audioDom2 = document.querySelector('#audio2') var audioCtx = new AudioContext(); var source = audioCtx.createBufferSource() var track = audioCtx.createMediaStreamDestination(); button.onclick = function () { navigator.mediaDevices.getUserMedia({ audio: true, video: true }) .then(function(stream) { stream.addTrack(track.stream.getAudioTracks()[0]) /* 使用這個stream stream */ var mediaRecorder = new MediaRecorder(stream, { audioBitsPerSecond : 128000, videoBitsPerSecond : 100000, mimeType : 'video/webm;codecs=h264' }) start.onclick = function () { mediaRecorder.start() console.log('開始採集') } stop.onclick = function () { mediaRecorder.stop() console.log('停止採集') } mediaRecorder.onstop = function (e) { var blob = new Blob([chunks], { 'type' : 'video/mp4' }) let a = document.createElement('a') a.href = URL.createObjectURL(blob) a.download = `test.mp4` a.click() } mediaRecorder.ondataavailable = function(e) { console.log(e) chunks = e.data } }) .catch(function(err) { console.log(err) /* 處理error */ }); } function getData() { var request = new XMLHttpRequest(); request.open('GET', './music/test.mp3', true); request.responseType = 'arraybuffer'; request.onload = function() { var audioData = request.response; audioCtx.decodeAudioData(audioData, function(buffer) { source.buffer = buffer; source.connect(track) source.loop = true; source.start(0) }, function(e){"Error with decoding audio data" + e.err}); } request.send(); } getData()</script></html>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2842271/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遊戲陪玩系統開發,Java怎樣實現流合併?遊戲Java
- 陪玩系統原始碼實現音訊編碼的相關步驟原始碼音訊
- 遊戲陪玩app開發,訊息可靠性的實現遊戲APP
- 如何實現遊戲陪玩系統中語音的錄製與播放?遊戲
- 遊戲陪玩系統原始碼開發,如何實現圖片和動畫的優化?遊戲原始碼動畫優化
- 遊戲陪玩系統開發,日期時間選擇介面的實現遊戲
- 如何實現遊戲陪玩系統原始碼前端效能監控?遊戲原始碼前端
- 如何開發陪玩系統原始碼的列表頁面,相關實現程式碼原始碼
- 遊戲陪玩系統開發,業務程式碼判斷生產/開發環境的方式遊戲開發環境
- 遊戲陪玩系統開發,架構設計的開閉原則是如何實現的?遊戲架構
- 透過websocket,實現遊戲陪玩系統的聊天室Web遊戲
- 如何進行遊戲陪玩系統原始碼中音視訊的自動化測試?遊戲原始碼
- 如何在遊戲陪玩系統原始碼中實現“刮刮樂”效果?遊戲原始碼
- 遊戲陪玩平臺原始碼開發,依賴收集和觸發的實現遊戲原始碼
- 遊戲陪玩系統,生成證書和金鑰庫的程式碼分析遊戲
- 遊戲陪玩app開發,高併發系統如何設計?遊戲APP
- 遊戲陪玩系統原始碼中不同排序演算法的實現方式遊戲原始碼排序演算法
- 遊戲陪玩原始碼開發,正確認識節流和防抖遊戲原始碼
- 遊戲陪玩原始碼前端開發,不容忽視的五個要點遊戲原始碼前端
- 遊戲陪玩app原始碼開發,常用的倒數計時功能如何實現?遊戲APP原始碼
- 遊戲陪玩系統原始碼中懶載入的實現方式有哪幾種?遊戲原始碼
- 遊戲陪玩原始碼的登入方式,簡訊驗證碼登入的實現遊戲原始碼
- 如何在遊戲陪玩系統原始碼中聊天室內實現一個禮物系統?遊戲原始碼
- 在遊戲陪玩系統開發中,如何進行效能測試?遊戲
- 如何在遊戲陪玩app原始碼中實現簡訊驗證碼登入?遊戲APP原始碼
- 陪玩系統原始碼開發,H5頁面中呼叫支付功能的實現原始碼H5
- 遊戲陪玩系統原始碼的許可權設計,如何基於位運算實現?遊戲原始碼
- 遊戲陪玩系統實現自適應負載均衡演算法的方式遊戲負載演算法
- 陪玩系統原始碼中陣列去重的實現程式碼,簡單卻重要原始碼陣列
- 陪玩系統原始碼中mysql資料庫備份還原的實現程式碼原始碼MySql資料庫
- 遊戲陪玩平臺原始碼開發,聊天室內的禮物連擊效果的實現遊戲原始碼
- 關於遊戲陪玩系統原始碼後臺管理系統,需要思考的二三事遊戲原始碼
- 遊戲陪玩APP遊戲APP
- 遊戲陪玩app開發,前端實現一個輪詢需要如何做?遊戲APP前端
- 遊戲陪玩原始碼的移動端適配,應該如何實現?遊戲原始碼
- 網路視訊直播系統開發,視訊解碼是如何實現的?
- 遊戲陪玩app原始碼的可靠訊息最終一致性方案的實現遊戲APP原始碼
- 在遊戲陪玩原始碼開發中,兩種清空陣列的方式遊戲原始碼陣列