日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

html5 pc端錄制視頻 MediaStreamRecorder

 然并卵書(shū)屋 2018-09-03

自己花了一天研究出來(lái)的  html 5 錄制視頻并上傳到服務(wù)器  這方面資料太少了  尤其是中文資料

借鑒  SegmentFault  https://segmentfault.com/q/1010000011489899

git官方      https://github.com/streamproc/MediaStreamRecorder

這倆個(gè)文檔都有點(diǎn)坑  第一個(gè) 文檔 弄出來(lái) 可以錄制視頻但是不能關(guān)閉攝像頭  停止錄制后 攝像頭沒(méi)有關(guān),第二個(gè) 文檔也就是 官方git 上的演示demo  可以用 但是錄制后視頻html5 pc端錄制視頻+MediaStreamRecorder

剛開(kāi)始不知道怎么回事  看了文檔 以為視頻 設(shè)置寬度有問(wèn)題   改了寬度也不行,

后來(lái)研究倆個(gè)文檔  終于 再第一個(gè)文檔的基礎(chǔ)上 結(jié)合官方文檔 修復(fù)停止錄制視頻 時(shí)攝像頭不關(guān)閉的問(wèn)題  ,,并且發(fā)現(xiàn)倆個(gè)畫(huà)面的原因  官方文檔  multiStreamRecorder = new MultiStreamRecorder([stream, stream]);

  想要一個(gè)畫(huà)面就用這個(gè) mediaRecorder = new MediaStreamRecorder(stream);

 

官方文檔寫(xiě)的上傳到PHP 服務(wù)器 我這里用的java后臺(tái)   上傳時(shí)還弄了 老半天  官方給出的 

 

 

XMLHttpRequest 上傳 之前沒(méi)見(jiàn)過(guò)這玩意 弄了半天也不行 直接改成ajax 上傳了

停止視頻用    mediaRecorder.stop(); 的話 就會(huì)出現(xiàn) 不關(guān)閉攝像頭的問(wèn)題

     后才用官方給的      mediaRecorder.stop(); mediaRecorder.stream.stop(); 但是我實(shí)際發(fā)現(xiàn) 用一個(gè)mediaRecorder.stream.stop(); 就夠了

html5 pc端錄制視頻+MediaStreamRecorder

html5 pc端錄制視頻+MediaStreamRecorder

我把代碼貼出來(lái), 

 

1'100%' height='480' id='myVideo'>
2 
3
4 
5'videolz()' type='button'  class='btn btn-danger' style='width: 100%; font-size: 32px'>'glyphicon glyphicon-facetime-video' aria-hidden='true' id='videostr'>視頻描述
001//  判斷瀏覽器
002var root ='<%=basePath %>';
003var aa = '' ; //防止兩次上傳
004var mediaRecorder ;
005var index=1;//定時(shí)加1         
006var dingshi;
007var mediaConstraints = { audio: true, video: { width: 1280, height: 720 } };
008 
009function captureUserMedia(mediaConstraints, successCallback, errorCallback) {
010    navigator.mediaDevices.getUserMedia(mediaConstraints).then(successCallback).catch(errorCallback);
011}
012function onMediaError(e) {
013    
014}
015function onMediaSuccess(stream) {
016     var video = document.querySelector('video');
017          //  賦值 video 并開(kāi)始播放
018          video.srcObject = stream;
019          video.onloadedmetadata = function(e) {
020            video.play();
021          };
022          mediaRecorder = new MediaStreamRecorder(stream);
023          mediaRecorder.stream = stream;
024         /*    //  錄像api的調(diào)用 */
025                mediaRecorder.mimeType = 'video/mp4';
026              dingshi = window.setInterval(function(){
027                $('#videostr').html('保存視頻'+index+'秒');
028                index++;
029            }
030            ,1000); 
031              
032            mediaRecorder.start(12000000000);
033            //  停止錄像以后的回調(diào)函數(shù)
034           
035            mediaRecorder.ondataavailable = function (blob) {
036                if(aa == ''){
037                     var file = new File([blob], 'msr-' + (new Date).toISOString().replace(/:|\./g, '-') + '.mp4', {
038                         type: 'video/mp4'
039                     });
040                     var formData = new FormData();
041                     formData.append('file', file);
042                     console.log(formData);
043 
044                    $.ajax({
045                        url :  root+'/upload/video.do',
046                        type : 'post',
047                        cache : false,
048                        data: formData,
049                        dataType : 'json',
050                        processData: false,
051                        contentType: false,
052                        error : function() {
053                            alert('暫時(shí)無(wú)法操作,請(qǐng)刷新后再試!');
054                        },
055                        success : function(result) {
056                             
057                            if (result.code == 0) {
058                                var params = result.data;
059                                console.log(params);
060                                console.log(params.fileUrl);
061                                /* $('#lzvideo').attr('src', params.fileUrl); */
062                                 
063                            } else {
064                                 
065                            }
066                        }
067                    });
068                     
069                aa = blob;
070                }
071            };
072}
073 
074           function videolz(){
075                if( $('#videostr').text()=='視頻描述'){
076                $('#videostr').html('保存視頻');
077                $('#videostr').removeClass('glyphicon-facetime-video');
078                $('#videostr').addClass('glyphicon-pause')
079                /* $('#videos').append('') */
080                 //  開(kāi)始錄像
081                 $('#myVideo').show();
082                captureUserMedia(mediaConstraints, onMediaSuccess, onMediaError);
083 
084                }else{
085                $('#videostr').html('視頻描述');
086                $('#videostr').addClass('glyphicon-facetime-video');
087                $('#videostr').removeClass('glyphicon-pause')
088                /*  $('#myVideo').remove();  */
089           //  停止錄像
090                 /*  mediaRecorder.stop(); */
091              mediaRecorder.stream.stop();
092                /*  $('#myVideo').unbind(); */
093               
094                index=1;
095                window.clearInterval(dingshi);
096                }
097        
098            }
099             
100 
101 
102
01/*
02 * 上傳視頻
03 */
04@RequestMapping(value='video')
05@ResponseBody
06public Result uoloadVideo(@RequestParam('file') MultipartFile file,Model model,HttpServletRequest request, HttpServletResponse response) {
07 
08    Result result = new Result();
09    Map data = new HashMap();
10    String serverPath = '/upload/' + new SimpleDateFormat('yyyyMM').format(new Date()) + '/';
11    String basePath = request.getScheme()+'://'+request.getServerName()+':'+request.getServerPort();
12    String filePath = request.getSession().getServletContext().getRealPath(serverPath);
13    String fileName = UUID.randomUUID().toString().replaceAll('-', '') + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
14    String fileUrl = request.getContextPath() + serverPath + fileName;
15 
16    File targetFile = new File(filePath, fileName);
17    if (!targetFile.exists()) {
18        targetFile.mkdirs();
19    }
20 
21    try {
22        file.transferTo(targetFile);
23        System.out.println(basePath);
24        data.put('fileUrl', basePath+fileUrl);
25        result = new Result(0, '上傳成功', data);
26    } catch (Exception e) {
27        result = new Result(1, '上傳異常');
28    }
29 
30    return result;
31 
32}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多