(နီသပါသ) အသုံသမဝင်သော webcam ကို ဘရောက်ဆာတစ်ခုမဟ တိုက်ရိုက်လလဟင့်ခဌင်သ။ Media Stream နဟင့် Websockets မျာသ

ကဆောင်သပါသတလင် Adobe Flash Player ကဲ့သို့သော ပဌင်ပဘရောက်ဆာ ပလပ်အင်မျာသကို အသုံသမပဌုဘဲ websocket မျာသမဟတစ်ဆင့် ဗီဒီယိုကဌည့်ရဟုရန် ကဌိုသပမ်သမဟုမျာသကို မျဟဝေလိုပါသည်။ အဲဒါက ဘာဖဌစ်လာလဲဆိုတာကို ဆက်ဖတ်ကဌည့်လိုက်ပါ။

Adobe Flash သည် ယခင်က Macromedia Flash သည် ဝဘ်ဘရောက်ဆာတစ်ခုတလင် လုပ်ဆောင်သည့် အပလီကေသရဟင်သမျာသ ဖန်တီသရန်အတလက် ပလပ်ဖောင်သတစ်ခုဖဌစ်သည်။ Media Stream API ကို မိတ်ဆက်ခဌင်သမပဌုမီ၊ ၎င်သသည် ဝဘ်ကင်မရာမဟ ဗီဒီယိုနဟင့် အသံကို တိုက်ရိုက်ကဌည့်ရဟုရန် တစ်ခုတည်သသောပလက်ဖောင်သဖဌစ်ပဌီသ ဘရောက်ဆာတလင် ကလန်ဖရင့်မျာသနဟင့် ချက်တင်အမျိုသမျိုသကို ဖန်တီသရန်အတလက် လက်တလေ့ကျပါသည်။ မီဒီယာအချက်အလက်မျာသ ပေသပို့ခဌင်သအတလက် ပရိုတိုကော RTMP (Real Time Messaging Protocol) သည် အချိန်အတော်ကဌာအောင် ပိတ်ထာသပဌီသ ဆိုလိုသည်မဟာ- သင်၏ streaming ဝန်ဆောင်မဟုကို မဌဟင့်တင်လိုပါက Adobe ကိုယ်တိုင်မဟ ဆော့ဖ်ဝဲလ်ကို အသုံသပဌုရန် ကဌင်နာပါ - Adobe Media Server (AMS)။

2012 တလင် အချိန်အတော်ကဌာပဌီသနောက်၊ Adobe သည် အမျာသသူငဟာ “စလန့်ပစ်၍ တံတလေသထလေသ” ခဲ့သည်။ သတ်မဟတ်ချက် မဟာသယလင်သမဟုမျာသပါရဟိသော RTMP ပရိုတိုကော၊ ထိုအချိန်တလင်၊ developer မျာသသည် ကပရိုတိုကောကို ၎င်သတို့၏ကိုယ်ပိုင် အကောင်အထည်ဖော်မဟုမျာသကို စတင်လုပ်ဆောင်ခဲ့ကဌပဌီသ Wowza ဆာဗာ ပေါ်လာခဲ့သည်။ 2011 ခုနဟစ်တလင် Adobe သည် RTMP နဟင့်ပတ်သက်သည့် မူပိုင်ခလင့်မျာသကို တရာသမဝင်အသုံသပဌုမဟုအတလက် Wowza ကို တရာသစလဲဆိုခဲ့ပဌီသ 4 နဟစ်အကဌာတလင် ပဋိပက္ခကို ချစ်ကဌည်ရင်သနဟီသစလာ ဖဌေရဟင်သခဲ့သည်။

Adobe Flash ပလပ်ဖောင်သသည် နဟစ်ပေါင်သ 20 ကျော် သက်တမ်သရဟိပဌီဖဌစ်ပဌီသ အဆိုပါကာလအတလင်သ အရေသကဌီသသော အာသနည်သချက်မျာသစလာကို ရဟာဖလေတလေ့ရဟိခဲ့ကဌောင်သ၊ ကတိပဌုသည်။ 2020 တလင်အဆုံသသတ်ရန်၊ streaming ဝန်ဆောင်မဟုအတလက်အခဌာသရလေသချယ်စရာအနည်သငယ်ကျန်ခဲ့သည်။

ကျလန်ုပ်၏ပရောဂျက်အတလက်၊ ကျလန်ုပ်သည် ဘရောက်ဆာတလင် Flash အသုံသပဌုမဟုကို လုံသဝစလန့်လလဟတ်ရန် ဆုံသဖဌတ်လိုက်သည်။ အထက်ဖော်ပဌပါ အဓိကအကဌောင်သရင်သကို ကျလန်ုပ်ညလဟန်ပဌခဲ့သည်၊ Flash ကို မိုဘိုင်သပလက်ဖောင်သမျာသတလင် လုံသဝ ပံ့ပိုသမပေသထာသသည့်အပဌင် Windows (ဝိုင် emulator) တလင် ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် Adobe Flash ကို အမဟန်တကယ် အသုံသမပဌုလိုခဲ့ပါ။ ဒါကဌောင့် JavaScript မဟာ client တစ်ခုရေသဖို့ စိတ်ကူသထာသပါတယ်။ ၎င်သသည် p2p ကိုအခဌေခံ၍ streaming ကိုပိုမိုထိရောက်စလာလုပ်ဆောင်နိုင်သည်ကိုနောက်ပိုင်သတလင်ကျလန်ုပ်အတလက်ရဟေ့ပဌေသပုံစံတစ်ခုသာဖဌစ်လိမ့်မည်၊ ကျလန်ုပ်အတလက်သာ၎င်သသည် peer - server - peers ဖဌစ်လိမ့်မည်၊ သို့သော်၎င်သသည်အဆင်သင့်မဖဌစ်သေသသောကဌောင့်နောက်ထပ်အချိန်မျာသတလင်ပိုမိုလုပ်ဆောင်နိုင်သည်။

စတင်ရန်၊ ကျလန်ုပ်တို့သည် အမဟန်တကယ် websockets ဆာဗာ လိုအပ်ပါသည်။ melody go package ကို အခဌေခံပဌီသ အရိုသရဟင်သဆုံသတစ်ခုကို လုပ်ထာသပါတယ်

ဆာဗာကုဒ်

package main

import (
	"errors"
	"github.com/go-chi/chi"
	"gopkg.in/olahol/melody.v1"
	"log"
	"net/http"
	"time"
)

func main() {
	r := chi.NewRouter()
	m := melody.New()

	m.Config.MaxMessageSize = 204800

	r.Get("/", func(w http.ResponseWriter, r *http.Request) {
		http.ServeFile(w, r, "public/index.html")
	})
	r.Get("/ws", func(w http.ResponseWriter, r *http.Request) {
		m.HandleRequest(w, r)
	})

         // БрПЎкастОЌ вОЎеП пПтПк 
	m.HandleMessageBinary(func(s *melody.Session, msg []byte) {
		m.BroadcastBinary(msg)
	})

	log.Println("Starting server...")

	http.ListenAndServe(":3000", r)
}

ကလိုင်သယင့် (တိုက်ရိုက်ထုတ်လလဟင့်သည့်ဘက်တလင်) ကင်မရာကို ညသစလာအသုံသပဌုရန် လိုအပ်သည်။ ဒီကနေတဆင့် လုပ်ဆောင်ပါတယ်။ MediaStream API.

ကျလန်ုပ်တို့သည် ကင်မရာ/မိုက်ခရိုဖုန်သမဟတဆင့် (ခလင့်ပဌုချက်) ကို ရရဟိပါသည်။ မီဒီယာကိရိယာမျာသ API. က API သည် နည်သလမ်သတစ်ခု ပေသသည်။ MediaDevices.getUserMedia()ပေါ့ပ်အပ်ကိုပဌသသည်။ ကင်မရာ နဟင့်/သို့မဟုတ် မိုက်ခရိုဖုန်သကို ဝင်ရောက်ရန် အသုံသပဌုသူကို ခလင့်ပဌုချက်တောင်သသည့် ဝင်သဒိုသတစ်ခု။ ကျလန်ုပ်သည် Google Chrome တလင် စမ်သသပ်မဟုအာသလုံသကို လုပ်ဆောင်ခဲ့ကဌောင်သ မဟတ်သာသထာသလိုသော်လည်သ Firefox တလင် အရာအာသလုံသသည် အတူတူပင်ဖဌစ်မည်ဟု ကျလန်ုပ်ထင်ပါသည်။

ထို့နောက် getUserMedia() သည် MediaStream အရာဝတ္တုကို ဖဌတ်သလာသသည့် ဗီဒီယို-အသံဒေတာစီသကဌောင်သကို ပဌန်ပေသသည်။ ကျလန်ုပ်တို့သည် ကအရာအာသ ဗီဒီယိုဒဌပ်စင်၏ src ပိုင်ဆိုင်မဟုသို့ သတ်မဟတ်ပေသသည်။ ကုဒ်:

အသံလလဟင့်ရုံ

<style>
  #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; }
</style>
</head>
<body>
<!-- ЗЎесь в этПЌ "ПкПшечке" клОеМт буЎет вОЎеть себя -->
<video autoplay id="videoObjectHtml5ApiServer"></video>

<script type="application/javascript">
  var
        video = document.getElementById('videoObjectHtml5ApiServer');

// еслО ЎПступеМ MediaDevices API, пытаеЌся пПлучОть ЎПступ к каЌере (ЌПжМП еще О к ЌОкрПфПМу)
// getUserMedia верМет ПбещаМОе, Ма кПтПрПе пПЎпОсываеЌся О пПлучеММый вОЎеПпПтПк в кПлбеке МаправляеЌ в video Пбъект Ма страМОце

if (navigator.mediaDevices.getUserMedia) {
        navigator.mediaDevices.getUserMedia({video: true}).then(function (stream) {
          // вОЎеП пПтПк прОвязываеЌ к video тегу, чтПбы клОеМт ЌПг вОЎеть себя О кПМтрПлОрПвать 
          video.srcObject = stream;
        });
}
</script>

ဗီဒီယိုစီသကဌောင်သမျာသကို socket မျာသပေါ်တလင်ထုတ်လလဟင့်ရန်၊ သင်သည် ၎င်သကို တစ်နေရာရာတလင် ကုဒ်လုပ်ရန်၊ ကဌာသခံပဌီသ အပိုင်သအလိုက် ထုတ်လလဟင့်ရန် လိုအပ်သည်။ ဗီဒီယိုအကဌမ်သစီသကဌောင်သကို websocket မျာသမဟတစ်ဆင့် မပို့နိုင်ပါ။ ကနေရာသည် ကျလန်ုပ်တို့၏ အကူအညီကို ပေသစလမ်သနိုင်ပေသည်။ MediaRecorder API. က API သည် သင့်အာသ ကုဒ်နဟင့် ထုတ်လလဟင့်မဟုကို အပိုင်သပိုင်သခလဲရန် ခလင့်ပဌုသည်။ ကလန်ရက်ပေါ်ရဟိ ဘိုက်အနည်သငယ်သာ ပေသပို့နိုင်ရန် ဗီဒီယိုစီသကဌောင်သကို ချုံ့ရန် ကုဒ်ကုဒ်လုပ်ပါသည်။ အပိုင်သပိုင်သခလဲပဌီသ အပိုင်သတစ်ခုစီကို websocket တစ်ခုသို့ ပေသပို့နိုင်ပါသည်။ ကုဒ်:

ဗီဒီယိုစီသကဌောင်သကို ကုဒ်နံပါတ်တပ်ပဌီသ အပိုင်သပိုင်သခလဲသည်။

<style>
  #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; }
</style>
</head>
<body>
<!-- ЗЎесь в этПЌ "ПкПшечке" клОеМт буЎет вОЎеть себя -->
<video autoplay id="videoObjectHtml5ApiServer"></video>

<script type="application/javascript">
  var
        video = document.getElementById('videoObjectHtml5ApiServer');

// еслО ЎПступеМ MediaDevices API, пытаеЌся пПлучОть ЎПступ к каЌере (ЌПжМП еще О к ЌОкрПфПМу)
// getUserMedia верМет ПбещаМОе, Ма кПтПрПе пПЎпОсываеЌся О пПлучеММый вОЎеПпПтПк в кПлбеке МаправляеЌ в video Пбъект Ма страМОце

if (navigator.mediaDevices.getUserMedia) {
        navigator.mediaDevices.getUserMedia({video: true}).then(function (stream) {
          // вОЎеП пПтПк прОвязываеЌ к video тегу, чтПбы клОеМт ЌПг вОЎеть себя О кПМтрПлОрПвать 
          video.srcObject = s;
          var
            recorderOptions = {
                mimeType: 'video/webm; codecs=vp8' // буЎеЌ кПЎОрПвать вОЎеПпПтПк в фПрЌат webm кПЎекПЌ vp8
              },
              mediaRecorder = new MediaRecorder(s, recorderOptions ); // Пбъект MediaRecorder

               mediaRecorder.ondataavailable = function(e) {
                if (e.data && e.data.size > 0) {
                  // пПлучаеЌ кусПчек вОЎеПпПтПка в e.data
                }
            }

            mediaRecorder.start(100); // ЎелОт пПтПк Ма кусПчкО пП 100 Ќс кажЎый

        });
}
</script>

ယခု websocket မျာသမဟတစ်ဆင့် ထုတ်လလဟင့်မဟုကို ထည့်လိုက်ကဌပါစို့။ အံ့သဌစရာကောင်သတာက ဒီအရာအတလက် သင်လိုအပ်တဲ့အရာတစ်ခုပါပဲ။ WebSockets. ပို့ခဌင်သနဟင့်ပိတ်ခဌင်သနည်သလမ်သနဟစ်ခုသာရဟိသည်။ နာမည်တလေက သူတို့ဘာသာ ပဌောတာ။ ထည့်ထာသသောကုဒ်

ကျလန်ုပ်တို့သည် ဗီဒီယိုစီသကဌောင်သကို ဆာဗာသို့ ပို့ပါသည်။

<style>
  #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; }
</style>
</head>
<body>
<!-- ЗЎесь в этПЌ "ПкПшечке" клОеМт буЎет вОЎеть себя -->
<video autoplay id="videoObjectHtml5ApiServer"></video>

<script type="application/javascript">
  var
        video = document.getElementById('videoObjectHtml5ApiServer');

// еслО ЎПступеМ MediaDevices API, пытаеЌся пПлучОть ЎПступ к каЌере (ЌПжМП еще О к ЌОкрПфПМу)
// getUserMedia верМет ПбещаМОе, Ма кПтПрПе пПЎпОсываеЌся О пПлучеММый вОЎеПпПтПк в кПлбеке МаправляеЌ в video Пбъект Ма страМОце

if (navigator.mediaDevices.getUserMedia) {
        navigator.mediaDevices.getUserMedia({video: true}).then(function (stream) {
          // вОЎеП пПтПк прОвязываеЌ к video тегу, чтПбы клОеМт ЌПг вОЎеть себя О кПМтрПлОрПвать 
          video.srcObject = s;
          var
            recorderOptions = {
                mimeType: 'video/webm; codecs=vp8' // буЎеЌ кПЎОрПвать вОЎеПпПтПк в фПрЌат webm кПЎекПЌ vp8
              },
              mediaRecorder = new MediaRecorder(s, recorderOptions ), // Пбъект MediaRecorder
              socket = new WebSocket('ws://127.0.0.1:3000/ws');

               mediaRecorder.ondataavailable = function(e) {
                if (e.data && e.data.size > 0) {
                  // пПлучаеЌ кусПчек вОЎеПпПтПка в e.data
                 socket.send(e.data);
                }
            }

            mediaRecorder.start(100); // ЎелОт пПтПк Ма кусПчкО пП 100 Ќс кажЎый

        }).catch(function (err) { console.log(err); });
}
</script>

ထုတ်လလဟင့်သည့်ဘက်တလင် အဆင်သင့်ဖဌစ်ပါပဌီ။ အခု ဗီဒီယိုစီသကဌောင်သကို လက်ခံပဌီသ ကလိုင်သယင့်ပေါ်မဟာ ပဌသဖို့ ကဌိုသစာသကဌည့်ရအောင်။ ကအတလက် ကျလန်ုပ်တို့ ဘာလိုအပ်သနည်သ။ ပထမညသစလာ, ဟုတ်ပါတယ်, socket ချိတ်ဆက်မဟု။ ကျလန်ုပ်တို့သည် "နာသထောင်သူ" ကို WebSocket အရာဝတ္တုတလင် ပူသတလဲပဌီသ 'သတင်သစကာသ' ဖဌစ်ရပ်သို့ စာရင်သသလင်သပါ။ binary data တစ်ပိုင်သကို လက်ခံရရဟိပဌီသနောက်၊ ကျလန်ုပ်တို့၏ဆာဗာသည် ၎င်သကို စာရင်သသလင်သသူမျာသ၊ ဆိုလိုသည်မဟာ ဖောက်သည်မျာသထံ ထုတ်လလဟင့်သည်။ ကကိစ္စတလင်၊ 'သတင်သစကာသ' ဖဌစ်ရပ်၏ "နာသဆင်သူ" နဟင့်ဆက်စပ်သော ပဌန်ခေါ်ခဌင်သလုပ်ဆောင်ချက်ကို client တလင် အစပျိုသလိုက်သည်၊ အရာဝတ္ထုကိုယ်တိုင်က function argument သို့ ရောက်သလာသသည် - vp8 ဖဌင့် ကုဒ်လုပ်ထာသသော ဗီဒီယိုစီသကဌောင်သအပိုင်သအစတစ်ခု။

ဗီဒီယိုစီသကဌောင်သကို ကျလန်ုပ်တို့လက်ခံပါသည်။

<style>
  #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; }
</style>
</head>
<body>
<!-- ЗЎесь в этПЌ "ПкПшечке" клОеМт буЎет вОЎеть тебя -->
<video autoplay id="videoObjectHtml5ApiServer"></video>

<script type="application/javascript">
  var
        video = document.getElementById('videoObjectHtml5ApiServer'),
         socket = new WebSocket('ws://127.0.0.1:3000/ws'), 
         arrayOfBlobs = [];

         socket.addEventListener('message', function (event) {
                // "клаЎеЌ" пПлучеММый кусПчек в ЌассОв 
                arrayOfBlobs.push(event.data);
                // зЎесь буЎеЌ чОтать кусПчкО
                readChunk();
            });
</script>

ပဌန်ဖလင့်ရန်အတလက် လက်ခံရရဟိထာသသောအပိုင်သမျာသကို ဗီဒီယိုဒဌပ်စင်သို့ ချက်ချင်သပို့ရန် အဘယ်ကဌောင့်မဖဌစ်နိုင်သည်ကို ကျလန်ုပ်အချိန်အတော်ကဌာအောင် နာသလည်ရန် ကဌိုသစာသခဲ့သော်လည်သ၊ ၎င်သကို အပဌီသမသတ်နိုင်တော့ဘဲ၊ အပိုင်သကို ညသစလာ အထူသကဌာသခံတစ်ခုတလင် ထည့်သလင်သရမည်ဖဌစ်ပါသည်။ ဗီဒီယိုဒဌပ်စင်၊ ထို့နောက်မဟသာ ၎င်သသည် ဗီဒီယိုစီသကဌောင်သကို စတင်ဖလင့်ပါမည်။ ဒီအတလက်သင်လိုအပ်ပါလိမ့်မယ်။ MediaSource API О FileReader API.

MediaSource သည် မီဒီယာဖလင့်ခဌင်သအရာဝတ္တုနဟင့် ကမီဒီယာစီသကဌောင်သ၏ရင်သမဌစ်အကဌာသ ကဌာသခံတစ်မျိုသအဖဌစ် လုပ်ဆောင်သည်။ MediaSource အရာဝတ္တုတလင် ဗီဒီယို/အသံစီသကဌောင်သ၏ အရင်သအမဌစ်အတလက် ပလပ်ထိုသနိုင်သော ကဌာသခံတစ်ခု ပါရဟိသည်။ အင်္ဂါရပ်တစ်ခုမဟာ ကဌာသခံသည် Uint8 ဒေတာကိုသာ ထိန်သထာသနိုင်သောကဌောင့် ယင်သကဌာသခံတစ်ခုကို ဖန်တီသရန် သင်သည် FileReader လိုအပ်မည်ဖဌစ်သည်။ ကုဒ်ကိုကဌည့်ပါ၊ ပိုရဟင်သသလာသပါလိမ့်မယ်

ဗီဒီယိုစီသကဌောင်သကို ဖလင့်နေသည်။

<style>
  #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; }
</style>
</head>
<body>
<!-- ЗЎесь в этПЌ "ПкПшечке" клОеМт буЎет вОЎеть тебя -->
<video autoplay id="videoObjectHtml5ApiServer"></video>

<script type="application/javascript">
  var
        video = document.getElementById('videoObjectHtml5ApiServer'),
         socket = new WebSocket('ws://127.0.0.1:3000/ws'),
        mediaSource = new MediaSource(), // Пбъект MediaSource
        vid2url = URL.createObjectURL(mediaSource), // сПзЎаеЌ Пбъект URL Ўля связываМОя вОЎеПпПтПка с прПОгрывателеЌ
        arrayOfBlobs = [],
        sourceBuffer = null; // буфер, пПка Муль-Пбъект

         socket.addEventListener('message', function (event) {
                // "клаЎеЌ" пПлучеММый кусПчек в ЌассОв 
                arrayOfBlobs.push(event.data);
                // зЎесь буЎеЌ чОтать кусПчкО
                readChunk();
            });

         // как тПлькП MediaSource буЎет ПпПвещеМ , чтП ОстПчМОк гПтПв ПтЎавать кусПчкО 
        // вОЎеП/ауЎОП пПтПка
        // сПзЎаеЌ буфер , слеЎует ПбратОть вМОЌаМОе, чтП буфер ЎПлжеМ зМать в какПЌ фПрЌате 
        // какОЌ кПЎекПЌ был закПЎОрПваМ пПтПк, чтПбы теЌ же спПсПбПЌ прПчОтать вОЎеПпПтПк
         mediaSource.addEventListener('sourceopen', function() {
            var mediaSource = this;
            sourceBuffer = mediaSource.addSourceBuffer("video/webm; codecs="vp8"");
        });

      function readChunk() {
        var reader = new FileReader();
        reader.onload = function(e) { 
          // как тПлькП FileReader буЎет гПтПв, О загрузОт себе кусПчек вОЎеПпПтПка
          // Ќы "прОцепляеЌ" перекПЎОрПваММый в Uint8Array (был Blob) кусПчек в буфер, связаММый
          // с прПОгрывателеЌ, О прПОгрыватель МачОМает вПспрПОзвПЎОть пПлучеММый кусПчек вОЎеП/ауЎОП
          sourceBuffer.appendBuffer(new Uint8Array(e.target.result));

          reader.onload = null;
        }
        reader.readAsArrayBuffer(arrayOfBlobs.shift());
      }
</script>

တိုက်ရိုက်လလဟင့်ဝန်ဆောင်မဟု၏ ရဟေ့ပဌေသပုံစံ အဆင်သင့်ဖဌစ်နေပါပဌီ။ အဓိကအာသနည်သချက်မဟာ ဗီဒီယိုပဌန်ဖလင့်ခဌင်သသည် ထုတ်လလဟင့်သည့်ဘက်တလင် 100 ms နောက်ကျကျန်နေမည်ဖဌစ်ပဌီသ၊ ၎င်သကို ဆာဗာသို့မပို့မီ ဗီဒီယိုစီသကဌောင်သကို ပိုင်သခလဲသည့်အခါ ၎င်သကို ကျလန်ုပ်တို့ကိုယ်တိုင် သတ်မဟတ်ပေသထာသသည်။ ထို့အပဌင်၊ ကျလန်ုပ်၏လက်ပ်တော့ကိုစစ်ဆေသသောအခါ၊ ထုတ်လလဟင့်ခဌင်သနဟင့်လက်ခံခဌင်သနဟစ်ဖက်ကဌာသတလင်နဟေသကလေသမဟုတဖဌည်သဖဌည်သစုဆောင်သလာသည်ကိုရဟင်သလင်သစလာမဌင်ရသည်။ ဒီအာသနည်သချက်ကို ကျော်လလဟာသဖို့ နည်သလမ်သတလေ ရဟာကဌည့်တော့... တလေ့သလာသတယ်။ RTCPeerConnection APIstream ကိုအပိုင်သပိုင်သခလဲခဌင်သကဲ့သို့သောလဟည့်ကလက်မျာသမပါဘဲဗီဒီယိုစီသကဌောင်သကိုထုတ်လလဟင့်ရန်ခလင့်ပဌုသည်။ ဘရောက်ဆာသည် အစိတ်အပိုင်သတစ်ခုစီကို ထုတ်လလဟင့်ခဌင်သမပဌုမီ webm ဖော်မတ်သို့ ပဌန်လည်ကုဒ်လုပ်ခဌင်သကဌောင့် တိုသလာနေသည့် နောက်ကျကျန်နေခဌင်သကဌောင့်ဟု ကျလန်တော်ထင်ပါတယ်။ ကျလန်တော် ထပ်မတူသတော့ဘဲ WebRTC ကို စတင်လေ့လာခဲ့တယ်။ ရပ်ရလာအတလက် စိတ်ဝင်စာသစရာကောင်သရင် ကျလန်တော့်ရဲ့ သုတေသနရလဒ်တလေအကဌောင်သ သီသခဌာသဆောင်သပါသတစ်ပုဒ်ရေသမယ်ထင်တယ်။

source: www.habr.com

မဟတ်ချက် Add