月度归档:2018年04月

如何在docker内部建立应用的编译环境

1.随便下载一个ubuntu或centos的镜像,如centos:7.4.1708版本。
2.执行如何命令,一定要加上”-it -d”的交互指令,这两个指令其在后台执行,并默认执行交互动作。

docker run --name lnmp-build -itd -v /home/abc/build/lnmp/lnmp1.4-full:/lnmp1.4-full  centos:7.4.1708 /bin/bash
或
docker run --name lnmp-build -itd -v /home/abc/build/lnmp/lnmp1.4-full:/lnmp1.4-full  centos:7.4.1708
#必须带上-it -d参数,
#若只有-d参数时,由于centos没有相应的CMD指令,则会主动退出,且下一次即使docker start mytest也只是容器启动后,马上退出。
#若只有-it参数,则会直接进行交互模式,程序退出后,容器结束执行,但可以使用docker start mytest启动,并不会主动退出。
#交互模式下,不需要指定/bin/bash参数,若指定则相应运算该cmd参数。

3.进入交互模式

docker exec -it lnmp-build /bin/bash
或
docker attach lnmp-build
#前者会新创建一个终端,进行交互,后者会使用现有的终端进行交互。

普通用户直接使用docker命令

sudo groupadd docker
sudo usermod -aG dockerroot abc
sudo usermod -aG docker abc
cat /etc/group #检查是否生效。
sudo systemctl restart docker,重启docker镜像
如果提示权限不够,如下:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json: dial unix /var/run/docker.sock: connect: permission denied
则修改/var/run/docker.sock权限.
sudo chmod a+rw /var/run/docker.sock

docker logs –follow –tail 10

docker启动失败解决

在使用systemctl start docker启动失败时,使用systemctl status docker.service其报告如下:

docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2018-04-27 02:38:36 EDT; 12s ago
     Docs: http://docs.docker.com
  Process: 2356 ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --seccomp-profile=/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIES (code=exited, status=1/FAILURE)
 Main PID: 2356 (code=exited, status=1/FAILURE)

Apr 27 02:38:35 localhost.localdomain systemd[1]: Starting Docker Application Container Engine...
Apr 27 02:38:35 localhost.localdomain dockerd-current[2356]: time="2018-04-27T02:38:35.166869440-04:00" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
Apr 27 02:38:35 localhost.localdomain dockerd-current[2356]: time="2018-04-27T02:38:35.171487584-04:00" level=info msg="libcontainerd: new containerd process, pid: 2361"
Apr 27 02:38:36 localhost.localdomain dockerd-current[2356]: Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in docker (--selinux-enabled=false)
Apr 27 02:38:36 localhost.localdomain systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Apr 27 02:38:36 localhost.localdomain systemd[1]: Failed to start Docker Application Container Engine.
Apr 27 02:38:36 localhost.localdomain systemd[1]: Unit docker.service entered failed state.
Apr 27 02:38:36 localhost.localdomain systemd[1]: docker.service failed.

截图如下:

此处意思是linux的内核中的SELinux不支持 overlay2 graph driver ,解决方法有两个,要么启动一个新内核,要么就在docker里禁用selinux,–selinux-enabled=false,
解决办法如下:

vi /etc/sysconfig/docker

主流流媒体服务器

主流流媒体如下:
1. Red5
2. Live555
3. RtmpD
4. EasyDarwin【EasyDarwin云平台是一套由EasyDarwin、EasyCMS、EasyCamera、EasyClient、nginx、redis构成的完整云平台架构,支持分布式、跨平台、多点部署,流媒体服务器支持负载均衡,按需直播,非常适用于互联网化的安防、智能家居、幼教平台、透明厨房、透明家装等多个行业应用】
5. FFServer
6. SRS(Simple Rtmp Server)定位是运营级的互联网直播服务器集群
7. crtmpserver
8. Flash Media Server (简称FMS),后更名为Adobe Flash Media Server (简称AMS),该产品可以快速搭建起一套流媒体直播、点播服务器免费版只能10个连接,不开源。
9. EasyDarwin

WebRTC媒体服务器

主要的webrtc媒体服务器

—-
1.Intel Collaboration Suite for WebRTC
https://software.intel.com/en-us/webrtc-sdk
包括客户端SDK(JS/Android/iOS / Windows),服务器SDK(SFU/MCU/SIP网关)。它提供了几乎所有你想要的东西。 MCU/SFU不是从头开始开发,而是基于Licode的。
顺便说一句,最近它被提及作为intel和韩国电信运营商巨头SK电讯合作的核心技术
———
2.janus
https://janus.conf.meetecho.com/index.html
Janus核心是WebRTC的“gateway”,它是用C语言实现并且是在libsrtp和libnice之上开发的(实现SRTP和ICE协议也被Google和mozilla使用)。 通过添加各种插件,可以实现不同的功能或用例,例如SFU。 正如我在前一篇文章中所写的,它已经在Slack中使用了。 许可证最初是AGPL,但是在Alex和Oleg(CoTurn的创建者)讨论后,更改为GPLv3。
————–
3.Jitsi VideoBridge

Jitsi Videobridge


————-
4.Kurento
http://www.kurento.org/
————————–
5.Licode
http://lynckia.com/licode/index.html
————–
6.Meedooze
http://www.medooze.com/
—————————-
7.MediaSoup
https://mediasoup.org/
据我所知,这是最新的webRTC SFU项目。 核心是用C语言(使用例如libuv)实现的。 其余的代码是使用最多的JavaScript(ECMAScript 6)。 有很多未实现的webrtc功能,根据Twitter的帖子,媒体运行良好。 有趣的是,它可以使用JavaScript处理RTP包。
——————
8.

cef的Qt的封装库及webrtc的测试

1.webrtc已经在cef3.x中支持。
2.由于cef的编译复杂性,有一些第三方机构专门编译一些全功能的二进制库,并提供了相应的例子,很方便地直接引入到第三方应用中。
3.在window中,简述其编译测试如下:
A-首先下载cef的库文件。下载地址如下:
http://opensource.spotify.com/cefbuilds/index.html【记住要下载32位的版本,不要下载64位的】
下载完成,先阅读其CMakeLists.txt文件,它说明了在各个平台该如何二次编译,如window的编译截图如下:

注:————–一定要用cmake -G “Visual Studio 14″【也即是vs2015,社区版就可以了编译了】的命令,令其生成工程vc的工程文件。———
注:————–不要用cmake的gui方式生成工程,因为可能会失败,而产生困扰——————————-
4.用vs2015打开工程,选择全编译。
5.调试cefclient工程,在调试器中添加–enable-media-stream选项。

6.打开webrtc的测试页面如下:
https://webrtc.github.io/samples/
7.截图如下:经验检,摄像头及声音都正常。


8.

—————————–
有人针对这场景写了一个QT的封装库,可以方便直接被Qt使用,在github随便搜索的结果有如下,可以逐个测试。
https://tishion.github.io/QCefView/
—————————
https://github.com/GreatTux/CefMinGWQt,这个是mingw版本。
———————————–
https://github.com/Dax89/QtCEF
——————-

Electron一个跨平台的javascript桌面开发库

—–
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。
————-
这理念注定,不能使用谷歌的WebRtc及视频编码的一些特性。

带动态链接库的启动脚本

#!/bin/sh

path_current=`pwd`
path_script=$(cd "$(dirname "$0")"; pwd)
mode=$1

exe_name=NetSpeedServer

export PATH=$PATH:$path_script
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$path_script

app_process=`ps -ef | grep "$exe_name"| grep -v grep`

case "$mode" in
   'start')
        echo "it's ready to start op...."
        if test -n "$app_process"; then
                echo ""
                echo "$app_process"
                echo ""
        else
		cd $path_script
                nohup $path_script/$exe_name host=39.105.7.201 port=9513 > /dev/null 2>&1 &
		cd $path_current

        fi

        echo 'success to start.'
        ;;
   'stop')
        echo "it's ready to check process..."
        if test -n "$app_process"; then
                echo "had find app process informaton"
                echo $app_process | awk '{print ($2)}' | xargs kill -9
        fi
        echo 'success to kill.'
        ;;
    *)
        basename=`basename "$0"`
        echo "Usage: $basename  {start|stop}  [ server options ]"
        exit 1
        ;;
esac
exit 1

webrtc的开发资源

DataChannel版本,以下仓库是使用node.v6.x.x版本。node.v8或node.v9都无法运行。
——–WebRtc M60版本—————————————
https://github.com/mayeut/libwebrtc/releases/tag/v1.1.1

——————————————-
https://js-platform.github.io/node-webrtc/


—————-node.js的历史版本————————-
https://nodejs.org/en/download/releases/
——————————————————-
———————————————
快速开发webrtc应用的rtc.io应用
http://rtc.io/index.html
———————
这个库是一个完整的datachannel库,提供了类似浏览器端的API功能,免文档,可直接开发,【已经验证过其是可以编译成功的】。
https://github.com/helloIAmPau/datachannel.git
————————–
https://github.com/seemk/WebUDP
————————————-
node.js的webrtc实现,但仅是datachannel部份。
https://github.com/js-platform/node-webrtc/
https://js-platform.github.io/node-webrtc/

webrtc状态收集文档

https://www.w3.org/TR/webrtc-stats
http://w3c.github.io/webrtc-pc/

https://webrtc.org/native-code/native-apis

Threading Model
WebRTC Native APIs use two globally available threads: the signaling thread and the worker thread. Depending on how the PeerConnection factory is created, the application can either provide those two threads or just let them be created internally.

Calls to the Stream APIs and the PeerConnection APIs will be proxied to the signaling thread, which means that an application can call those APIs from whatever thread.

All callbacks will be made on the signaling thread. The application should return the callback as quickly as possible to avoid blocking the signaling thread. Resource-intensive processes should be posted to a different thread.

The worker thread is used to handle more resource-intensive processes, such as data streaming.
——————————————————
Stream APIs (mediastreaminterface.h)

PeerConnection APIs (peerconnectioninterface.h)
——————————————————–
Reference
The current HTML5 specification for WebRTC: http://w3c.github.io/webrtc-pc/

The source code of the WebRTC Native API: https://webrtc.googlesource.com/src/+/master/api

Complete list of directories that contain API files: https://webrtc.googlesource.com/src/+/master/native-api.md

Client and server sample apps: https://webrtc.googlesource.com/src/+/master/examples