webrtc远程控制系统运行
1、ssh远程登录模块
ssh远程登录流程:
根据上述流程具体实现步骤:
-
首先要安装ssh-server
sudo apt-get install open-server
-
启动ssh服务
sudo /etc/init.d/ssh start // 或者 service ssh start 启动ssh服务。 ps -e | grep sshd // 查看ssh服务状态,如果ssh服务没运行则什么也不显示。
-
创建ssh client
su rooot //进入root权限,输入密码:*** cd /home //进入home文件夹下 adduser username(如:Ubuntu) //在home文件夹下添加远程登录用户。
其中Full Name,Room Number,Work Phone,Home Phone,Other 都可以不填直接按回车跳过。
cat /etc/passwd //可查看所有用户。
4. ssh远程登录
在服务器、设备端软件运行后,在客户端中输入用户名、密码就可以登陆了。
登录成功界面如下:
2、远程监控模块
-
gstreamer采集视频和音频
在config.yaml文件下修改AudioSrc、VideoSrc具体如下:
使用 gst 中提供的 elements 自己创建 pipeline 来录制多媒体资源
gst-launch autoaudiosrc ! audioconvert ! faac ! mp4mux ! filesink location=aac_audio.mp4 //录制音频 gst-launch v4l2src ! xvimagesink //录制视频
补充:关于gst-launch中关于视频的一些常用命令:点这里
gst-launch中关于音频的一些常用命令:点这里gstreamer 中有很多插件,其中视频输入设备由v4l2src插件来完成。
v4l2src插件默认打开的设备是/dev/video0,如果想换可以通过gst-launch-1.0 v4l2src device=/dev/video*的方式来切换,v4l2src默认所申请的buffer个数是5个。
audioconvert插件,这个插件会转化原始的不同音频格式之间的缓冲。它支持从整数到浮点数的转化,符号数/字节序转换以及声道转换,可以用来解决音频不匹配的问题。
video/x-raw 这是个格式过滤插件,其实就是对pipeline中的数据流的格式做一个限制。
更多插件可以查看:https://blog.csdn.net/sakulafly/article/details/21748777 -
测试远程监控模块
虚拟机连接内置摄像头
摄像头等亮了,但画面无法显示
经查询USB兼容性出现了问题,可以在虚拟机设置中改变USB兼容性版本,具体如下图:
然后可以在终端输入cheese 命令测试摄像头是否 可以正常显示,直到找到适合的USB兼容版本。
最后运行服务器、设备端的软件,客户端连接后,可以观察到画面,并有声音。
3.远程指令模块
1、配置阿里云物联网设备
在阿里云物联网平台创建产品,并添加自定义功能,然后添加设备。
添加自定义功能:
在文档与工具中下载Link SDK.然后解压出来。
查看创建的设备的设备三原组:
打开解压出来的文件LinkSDK,在demos文件夹中找到mqtt_basic_demo.c文件,打开并编辑。找到int main(int argc, char *argv[])主函数,替换其中的设备三元组为自己的设备三原组。
char *product_key = "a1ilF5iP7vQ ";
char *device_name = "device01";
char *device_secret = "03120d1f786fbb10d02b0e9fdfa2dea4";
并在mqtt_basic_demo.c文件中添加设备属性上报函数int32_t demo_send_property_post():
物理模型通信其他具体代码参考:https://help.aliyun.com/document_detail/146236.html
int32_t demo_send_property_post(void *dm_handle)
{
/* 属性上报payload格式*/
char *propertyFmt = "{\"GeoLocation\":{ \"switch\":%d}";
int status = 0 ; //status为0 ~ 1
//读取客户端写入的led_0状态文件
unsigned char ch;
FILE *fp = fopen("/home/t/status.txt","r");
ch = fgetc(fp);
if(ch=='1')
{
status=1;
}
fclose(fp);
char property_params[256] = {0};
aiot_dm_msg_t msg;
snprintf(property_params, sizeof(property_params), propertyFmt, status);
memset(&msg, 0, sizeof(aiot_dm_msg_t));
msg.type = AIOT_DMMSG_PROPERTY_POST;
msg.data.property_post.params = property_params;
return aiot_dm_send(dm_handle, &msg);
}
2、编写脚本。
在设备端软件/control目录下添加test文件夹。其中包含开灯(close)、关灯(open)两个脚本。
/**close文件**/
echo 0 > ~/status.txt //将0写入status.txt
/**open文件**/
echo 1 > ~/status.txt //将1写入status.txt
3、设备上线
先在LinkSDK目录下打开终端,编译SDK.
$ make //编译SDK
$ cd output //进入output目录
$ ./mqtt-basic-demo //运行编译文件,使设备上线
运行结果: