成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Html5之webcoekt播放JPEG圖片流

Html5之webcoekt播放JPEG圖片流

熱門(mén)標(biāo)簽:如何獲取地圖標(biāo)注客戶(hù) 高德地圖標(biāo)注地點(diǎn)糾錯(cuò) 只辦理400電話(huà) 電話(huà)機(jī)器人黑斑馬免費(fèi) 南昌仁和怎么申請(qǐng)開(kāi)通400電話(huà) 平?jīng)龅貓D標(biāo)注位置怎么弄 機(jī)器人外呼系統(tǒng)存在哪些能力 電話(huà)機(jī)器人電銷(xiāo)系統(tǒng)掙話(huà)費(fèi) 拓展地圖標(biāo)注

一、簡(jiǎn)介

既然webcoekt是基于tcp連接的,理論上講所有的瀏覽器是可以私有協(xié)議處理二進(jìn)制的,如果我們需要播放視頻,我們可以將視頻數(shù)據(jù)在后端解碼后直接將圖片推送到webcoekt前端,然后前端通過(guò)websocket接收?qǐng)D片然后將圖片顯示到img或canvas中即可,當(dāng)然這個(gè)是我自己設(shè)想的,也是應(yīng)該可以做的到了,做到如下需要以下技術(shù)支持:

  • 后端直接ffmpeg轉(zhuǎn)碼為jpeg圖片流
  • 后端定制播放協(xié)議包括基本指令如play、stop、pause、faster、slower
  • 后端需要提供websocket支持發(fā)送圖片流到前端
  • 前端需要接受圖片流并顯示出來(lái)

后端ffmpeg解碼這里就不說(shuō)明了,我有很多庫(kù),需要的單獨(dú)聯(lián)系我購(gòu)買(mǎi),前端的顯示jpg流,這里要借助前端顯示圖片放的做法,使用圖片base64數(shù)據(jù)!前端HTML顯示二進(jìn)制jpeg圖片:圖片流=>二進(jìn)制轉(zhuǎn)image的base64編碼=>設(shè)置到img的src中,如前端代碼

<body>
    <img id="player" style="width:704px;height:576px"/>
</body>

二進(jìn)制通過(guò)arraybuffer轉(zhuǎn)base64

function arrayBufferToBase64(buffer) {
        var binary = '';
        var bytes = new Uint8Array(buffer);
        var len = bytes.byteLength;
        for (var i = 0; i < len; i++) {
            binary += String.fromCharCode(bytes[i]);
        }
        return window.btoa(binary);
    }

最后顯示:

var player = document.getElementById('player');
      var url= arrayBufferToBase64(data);
      player.src='data:image/jpeg;base64,'+url;

當(dāng)然,還有其他的方式:

var wsCtrl = new WebSocket("ws://127.0.0.1/ctrl/");
//Establish channel code
....
var wsVideo = new WebSocket("ws://127.0.0.1/video/channel1");
wsVideo.onmessage = function(evt)
{
   //Method 1
   document.getElementById("img1").src = URL.createObjectURL(evt.data);
   
   //Method 2
   var read = new FileReader();
   read.onload = function(e)
   {
      document.getElementById("img2").src = e.target.result;
   }
   read.readAsDataURL(evt.data);
}

ws.onmessage = function(evt) {
    if(typeof(evt.data)=="string"){
        //textHandler(JSON.parse(evt.data));
    }else{
        var reader = new FileReader();
        reader.onload = function(evt){
            if(evt.target.readyState == FileReader.DONE){
                var url = evt.target.result;
                alert(url);
                var img = document.getElementById("imgDiv");
                img.innerHTML = "<img src = "+url+" />";
            }
        }
        reader.readAsDataURL(evt.data);
    }
};

關(guān)于c++的websocket開(kāi)源工程:websocketpp、QWebSocketServer

二、websocket播放圖片流

多說(shuō)無(wú)益,還不如痛痛快快的來(lái)一把,為了減低復(fù)雜度,我用java的websocket來(lái)實(shí)現(xiàn)圖片流的發(fā)送(當(dāng)然c++的庫(kù)我也一個(gè)實(shí)戰(zhàn)項(xiàng)目中用過(guò)的名為WebSocket的封裝的dll工程項(xiàng)目,需要的自行私下購(gòu)買(mǎi)源碼),前端使用一個(gè)img標(biāo)簽展示圖片,這里說(shuō)明一下,后臺(tái)模擬發(fā)送圖片(這里僅僅是圖片,不是流,如果是流直接連續(xù)不斷發(fā)送即可需要ffmpeg轉(zhuǎn)碼)

首先前端的代碼如下所示:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>websocket顯示二進(jìn)制圖片流</title>
        <style type="text/css">
        </style>
    </head>
    <script src="jquery.min.js"></script>
    <script>
    $(document).ready(function(){
        $("#send").click(function(){
          //var content = $("#content").val();
          $.ajax({
              url: "/test/send",
              data: {
                 //content: content
                 content: ""
              },
              success: function( result ) {
                  console.log("請(qǐng)求成功!");
              }
            });
      });
    });
    </script>
    <body>
        <h1>WebSocket播放圖片</h1>
        <img id="player" style="width:500px;height:400px"/><br/>
        <button id="send">請(qǐng)求圖片</button>
    </body>
    <script type="application/javascript">
        var websocket = {
            send: function (str) {
            }
        };
        window.onload = function () {
            if (!'WebSocket' in window) return;
            webSocketInit();
        };
        function webSocketInit() {
            // 連接到服務(wù)端端點(diǎn)
            websocket = new WebSocket("ws://127.0.0.1:8080/image/show");
            // 成功建立連接
            websocket.onopen = function () {
                console.log("成功連接到服務(wù)器");
                websocket.send("成功連接到服務(wù)器");
            };
            // 接收到消息
            websocket.onmessage = function (event) {
                // 文本數(shù)據(jù)包
                if(typeof(event.data)=="string"){
                    // JSON.parse(evt.data)
                    console.log("收到服務(wù)端發(fā)送的消息:" + event.data);
                // 圖片數(shù)據(jù)包Blob
                }else{
                    var reader = new FileReader();
                    reader.onload = function(evt){
                        if(evt.target.readyState == FileReader.DONE){
                            // base64數(shù)據(jù)
                            var url = evt.target.result;
                            document.getElementById("player").src = url;
                        }
                    }
                    reader.readAsDataURL(event.data);
                }
            };
            // 連接發(fā)生錯(cuò)誤
            websocket.onerror = function () {
                console.log("WebSocket連接發(fā)生錯(cuò)誤");
            };
            // 連接關(guān)閉
            websocket.onclose = function () {
                console.log("WebSocket連接關(guān)閉");
            };
            // 監(jiān)聽(tīng)窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時(shí),主動(dòng)關(guān)閉websocket連接
            window.onbeforeunload = function () {
                websocket.close()
            };
        }
    </script>
</html>

每次點(diǎn)擊發(fā)送的時(shí)候就向后臺(tái)請(qǐng)求一張圖,后臺(tái)將改圖發(fā)送出去(我簡(jiǎn)單的使用websocket群發(fā),可以使用websocket的可變參數(shù)將websocket和http關(guān)聯(lián)起來(lái),這個(gè)應(yīng)該很容易我這里不再贅述,不了解的進(jìn)群討論)

package com.easystudy.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Random;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.easystudy.websocket.ImgEndPoint;

/**
 * @文件名稱(chēng): TestController.java
 * @功能描述: 圖片流請(qǐng)求請(qǐng)求發(fā)送接口(websocket發(fā)送圖片到web端)
 * @版權(quán)信息:  www.easystudy.com
 * @技術(shù)交流:  961179337(QQ群)
 * @編寫(xiě)作者:  lixx2048@163.com
 * @聯(lián)系方式:  941415509(QQ)
 * @開(kāi)發(fā)日期:  2020年9月21日
 * @歷史版本: V1.0 
 * @備注信息:
 */
@RestController
@RequestMapping("/test")
public class TestController {
    
    /**
     * @功能描述: 發(fā)送請(qǐng)求接口
     * @版權(quán)信息:  www.easystudy.com
     * @編寫(xiě)作者:  lixx2048@163.com
     * @開(kāi)發(fā)日期:  2020年9月21日
     * @備注信息:
     */
    @SuppressWarnings("unused")
    @GetMapping("/send")
    public String reponseMsgToClient(@RequestParam(name="content", required = true)String content) throws Exception{
        System.out.println("開(kāi)始發(fā)送圖片數(shù)據(jù)");
        
        // 隨機(jī)選擇一張圖片發(fā)送
        int index = new Random().nextInt(4) + 1;
        String imgName = index + ".jpg";
        
        // 判斷圖片是否存在
        URL url = getClass().getClassLoader().getResource(imgName);
        File file = new File(url.getFile());
        if (!file.exists()) {
            return "未找到圖片!";
        }
        
        // 創(chuàng)建輸入圖片流
        InputStream in = new FileInputStream(file);
        if (null == in) {
            return "打開(kāi)文件失敗!";
        }
        
        // 讀取圖片數(shù)據(jù)
        int size = (int)file.length();
        byte[] buffer = new byte[ size];
        int count = in.read(buffer, 0, size);    
        System.out.println("文件長(zhǎng)度:" + size + ", 讀取長(zhǎng)度:" + count);
        
        // 發(fā)送圖片數(shù)據(jù)(理論上講應(yīng)該只發(fā)對(duì)端連接的)
        ImgEndPoint.fanoutMessage(buffer);
        
        // 關(guān)閉文件流
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        // 接口響應(yīng)
        return "消息【" +content+ "】發(fā)送成功!";
    }
}

我這里多一句嘴,如果是音視頻應(yīng)用的錄像播放,這里可以使用websocket傳輸圖片流,然后通過(guò)計(jì)算發(fā)送定點(diǎn)的圖片流數(shù)據(jù)到前端來(lái)實(shí)現(xiàn)自定義的播放器功能(??滴炇剖褂玫木褪莣ebsocket播放錄像流的,做法類(lèi)似)

播放效果如下:

到此這篇關(guān)于Html5之webcoekt播放JPEG圖片流的文章就介紹到這了,更多相關(guān)Html5播放JPEG圖片流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標(biāo)簽:棗莊 漯河 永州 遼源 西藏 池州 新疆 青島

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Html5之webcoekt播放JPEG圖片流》,本文關(guān)鍵詞  Html5,之,webcoekt,播放,JPEG,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Html5之webcoekt播放JPEG圖片流》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Html5之webcoekt播放JPEG圖片流的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    草草草在线视频| 久久精品国产亚洲blacked| 国产一区二区在线免费观看| 日韩精品一区二区三区中文| 免费xxxx性欧美18vr| 日本精品一区在线| 男女性高潮免费网站| 色诱女教师一区二区三区| 伊人色综合久久久| 欧美性大战xxxxx久久久| 成人资源www网在线最新版| 在线能看的黄色| 亚洲男帅同性gay1069| 国产免费久久| 精品一区亚洲| 一色屋色费精品视频在线看| 亚洲综合精品在线| 国产精品美女久久久久av超清| 亚洲精品无码久久久久| 久久久久久久久久久9不雅视频| 欧美精品欧美极品欧美激情| 日本福利一区| bt欧美亚洲午夜电影天堂| 亚洲AV成人无码网站天堂久久| 欧美亚洲黄色片| 欧美国产日韩一区二区在线观看| 精品一区二区三区毛片| 中文字幕黄色av| 久久久久免费精品国产| 日韩 欧美 高清| 色婷五月综激情亚洲综合| 国产乱子伦精品无码码专区| 国产精品久久久对白| 黄色av地址| 欧美日韩一区二区综合| 成人av免费在线看| 国产强被迫伦姧在线观看无码| 久久精品久久久久久| 在线观看免费视频国产| 性欧美疯狂猛交69hd| 亚洲aa在线观看| 国产大学生自拍视频| 国产成人三级在线播放| 羞羞的视频网站| 欧洲伦理片一区 二区 三区| 中文字幕无线码| 国产乱人伦精品一区二区三区| 偷拍自拍亚洲色图| 国产情侣一区| 日韩欧美精品久久| a片在线免费观看| 久久99精品久久久久久久久久| 欧美亚洲成人xxx| 看av免费毛片手机播放| 黑人巨大精品欧美一区二区一视频| 欧美日韩系列| 国产精品视频一区二区三区四区五区| 香蕉久久精品| 久久久久成人精品免费播放动漫| 欧美做受喷浆在线观看| 欧美女孩性生活视频| 日本黄色免费| 性欧美暴力猛交另类hd| yiren22亚洲综合伊人22| 国产精品最新乱视频二区| 在线久久视频| 亚洲欧美一区二区三区极速播放| 免费看污黄网站在线观看| 久草青青在线观看| av成人免费在线| 亚洲欧美综合另类中字| 自拍网站在线观看| 亚洲视频在线免费看| 亚洲国产精品久久网午夜小说| 久久性色av| 色婷婷一区二区三区四区| 四虎影院中文字幕| 在线观看日本一区二区| 午夜色香蕉导航| 性视频在线播放| 成人无码精品1区2区3区免费看| 欧美色视频在线观看| 成人免费91在线看| 在线观看中文字幕av| 国产麻豆永久视频| 欧美高清videosex极品| 亚洲人与黑人屁股眼交| 国产乱子伦一区二区三区国色天香| 中文字幕一二三区| 日韩欧美一二三四区| 亚洲女厕所小便bbb| 性色av一区二区三区红粉影视| 老熟妇一区二区三区| bl在线肉h视频大尺度| 久久久久久久久亚洲| 在线观看中文字幕码| 欧美成人欧美edvon| 无码aⅴ精品一区二区三区浪潮| 女人抽搐喷水高潮国产精品| 日韩欧美精品网址| 国模一区二区三区白浆| 另类一区二区三区| 亚洲欧美成aⅴ人在线观看| 日本18中文字幕| 午夜国产精品理论片久久影院| 日本视频免费观看| 亚洲蜜桃精久久久久久久久久久久| 国产又粗又爽视频| 国产亚洲精品久久久久久久| 国产精品videosex极品| 性生交大片免费看女人按摩| 欧美精品一区二区视频| 日本不卡二区高清三区| 日韩av在线发布| 国产亚洲欧美日韩精品一区二区三区| www.av亚洲| 国产鲁鲁视频在线观看特色| 午夜在线观看视频网站| 国产一区二区三区中文| 一本色道久久综合亚洲二区三区| 中文字幕亚洲情99在线| 爽爽影院免费观看视频| 国产亚洲美女久久| 亚洲色图14p| 国产精品v亚洲精品v日韩精品| 欧美日韩在线精品一区二区三区激情| 99久久亚洲精品蜜臀| 成人在线观看毛片| 97se国产在线视频| 日本精品一区二区三区不卡无字幕| 成年人av网站| 久久久www免费人成黑人精品| 九色porny自拍视频在线观看| 在线精品视频一区二区三四| 超级碰在线观看| 欧美熟妇精品一区二区蜜桃视频| 免费久久精品| 免费福利影院| 天天综合天天操| 亚洲欧美伊人| 精品国产综合久久| 永久免费看黄网站| gogo亚洲国模私拍人体| 久草资源站在线观看| 久久久久久av无码免费网站| 成人av电影观看| 成人网6969conwww| 国产视频久久久久| 精品国产无码一区二区三区| 亚洲三区在线播放| 337p日本欧洲亚洲大胆鲁鲁| 99热国内精品永久免费观看| 中国人体摄影一区二区三区| 一区二区福利| 精品国产无码一区二区三区| 亚洲性在线观看| 99国产欧美久久久精品| 在线免费看黄视频| 久久综合中文字幕| 欧美色精品在线视频| 97在线视频免费观看完整版| 九九精品视频在线| 欧美tk—视频vk| 久久久无码人妻精品一区| 国产精品久久久久久久久晋中| 国产精品扒开腿做爽爽爽视频软件| 国产人妻精品一区二区三| 日本免费黄网站| 麻豆传媒视频在线| 欧美日韩国产色站一区二区三区| 香蕉亚洲视频| 精品国产无码一区二区| 中日韩高清电影网| 翁止熄痒禁伦短文合集免费视频| 国产精品美女一区二区三区| 成全视频在线播放大地| 一本大道久久a久久精二百| 亚洲乱码国产乱码精品精98午夜| 超碰在线观看91| 欧美日韩国产v| 久久久久久久激情| 国产无遮挡裸体免费视频| 欧美第一页草草影院浮力| 日本高清无吗v一区| 亚洲福利视频专区| 一本色道久久综合亚洲精品小说| 电影av一区| 亚洲国产精品久久久久婷婷老年| 亚洲日本青草视频在线怡红院| 欧美中文字幕亚洲一区二区va在线| 欧美孕妇性xx| 波多野结衣在线播放| 亚洲欧美国产高清| 午夜偷拍福利视频| 日本亚洲三级在线| 六月丁香综合在线视频| 高清无码一区二区在线观看吞精| 美腿丝袜亚洲三区| 黄色免费福利视频| 国产一级片免费视频| 亚洲永久精品唐人导航网址| 久久精品在线| 国产福利电影网| 日韩最新中文字幕电影免费看| 日韩欧美视频一区二区三区| 欧美日韩一区视频| 人妻视频一区二区三区| 亚洲国产成人久久综合一区| 亚洲影影院av| 91久久国产婷婷一区二区| 香蕉97视频观看在线观看| 欧美一区二区三区少妇| 在线播放evaelfie极品| 再深点灬舒服灬太大了添少妇视频| 日本精品黄色| 欧美激情亚洲| 992tv在线观看在线播放| 伊人在线视频观看| 国产无遮挡裸体免费视频| 日本成人精品在线| 日本在线观看免费视频| 国产成人免费9x9x人网站视频| 成人福利视频网| 91视频在线观看免费| 精品九九在线| 97精品一区二区三区| 天天综合网日韩| 性色av蜜臀av| 一级黄色片日本| 欧美成人免费观看视频| 天天摸天天干| 国产a∨精品一区二区三区仙踪林| 欧美性大战久久久久久久| 亚洲经典视频在线观看| 99在线高清视频在线播放| 久久久无码精品亚洲国产| 男女免费网站| 国产欧美在线观看| 久久精品二区亚洲w码| 久久日韩精品| 欧美jizz18hd性欧美| 欧美视频免费看欧美视频| 国产在线播放91| 亚洲欧美日韩综合| 亚洲欧洲日韩一区二区三区| 青青操在线播放| 一区福利视频| 欧美日韩不卡合集视频| 8x海外华人永久免费日韩内陆视频| 99精品欧美一区二区蜜桃免费| 97在线视频精品| 无码国产精品高潮久久99| 国产欧美丝袜| 毛片一区二区三区四区| 一区在线播放视频| 天天干天天综合| 国产日本在线播放| 日韩专区精品| 国产午夜三区视频在线| 日韩av成人在线| 久久在线视频在线| 成人福利片在线| 丰满熟妇人妻中文字幕| 日本一区二区三区在线免费观看| 一本色道久久综合亚洲91| 激情av一区| 青青草国产成人av片免费| 91亚洲欧美| 日韩免费在线电影| 久久香蕉综合色| 宅男午夜电影| 91av一区二区三区| 国产精品福利电影一区二区三区四区| 国产一区二区波多野结衣| 香蕉视频黄色片| 国产成人在线影院| 欧美成人aa大片| 激情文学亚洲色图| 亚洲国产另类久久久精品极度| 香蕉视频免费版| 日韩国产精品一区| 一级国产黄色片| 欧美精品人人做人人爱视频| 欧美一级黑人aaaaaaa做受| 97精品久久久| 新呦u视频一区二区| 致1999电视剧免费观看策驰影院| 久久av导航| 91视频观看| 一区二区精品区| 日韩欧美ww| 日韩av一区二区在线观看| www.在线成人| 日韩免费在线视频观看| 欧洲一区二区三区在线| 97超级碰碰碰| 男人添女荫道口喷水视频| 91蜜桃免费观看视频| 久久久久久五月天久久久久久久久| 亚洲黄色精品视频| 国自产精品手机在线观看视频| 97操在线视频| 国产精品一二三四五| 激情综合网婷婷| 伊人网在线观看| 日韩精品在线播放| 亚洲av成人精品一区二区三区| 免费在线观看av电影| 日韩亚洲在线观看| 91久久大香伊蕉在人线| 久久久青草青青国产亚洲免观| 国产乱人乱偷精品视频| 日本男女交配视频| 亚洲精品国产av| 成人在线免费观看黄色| 精品视频123区在线观看| 精品国产欧美一区二区三区成人| 九色视频在线观看免费| 久久久蜜桃精品| 精品无人区无码乱码毛片国产| 最新一本之道波多野结衣| 亚洲深夜福利在线| 日本福利视频在线观看| 久久久久久久成人| 国产视频每日更新| 国产区一区二区三区| 91影院在线免费观看| 欧美久久久影院|