如何获取摄像头的控制指令数据,进行模拟发送控制
2017-05-09 18:27
507 查看
需求:获取网络摄像头的控制指令数据,如关闭RTMP流,修改RTMP 推送地址 ,然后android 端 模拟发送http协议进行控制网络摄像头1:网络摄像头 有控制台 ,如 http://192.168.1.10/cn/home.asp ,可以进行修改参数等操作2:用Fiddler4 进行抓取 网页端发送的http 协议数据 (网上很多教程)3:如下是获取的关闭RTMP 的协议发送 POST http://192.168.1.10/action/set?subject=rtmp HTTP/1.1x-requested-with: XMLHttpRequestAccept-Language: zh-cnReferer: http://192.168.1.10/cn/admin/rtmp.asp Accept: text/html, */*; q=0.01Content-Type: application/x-www-form-urlencoded; charset=UTF-8Accept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)Host: 192.168.1.10Content-Length: 479Connection: Keep-AlivePragma: no-cacheCookie: language=zhAuthorization: --------(此处删除账号信息,你懂得。。。)<?xml version="1.0" encoding="utf-8"?><request><rtmp> <push> <active>0</active> <stream>0</stream> <url>rtmp://192.168.1.99:1935/452500846393/front</url> <tsection>0-86340</tsection> <tsection>0-0</tsection> <tsection>0-0</tsection> <tsection>0-0</tsection> </push> </rtmp></request>从中可以看出 :url 是 http://192.168.1.10/action/set?subject=rtmp ,body 是 xml 剩下的中间就是head。 如何通过http封装如下 代码 (用okhttp)package com.example.myapplication;import android.nfc.Tag;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.Button;import android.widget.EditText;import java.io.IOException;import butterknife.BindView;import butterknife.ButterKnife;import butterknife.OnClick;import okhttp3.Authenticator;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Credentials;import okhttp3.MediaType;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;import okhttp3.Route;public class MainActivity extends AppCompatActivity {//active : 0 关 ,1 开//stream : 0 主码流 , 1 次码流@BindView(R.id.editText_active)EditText editTextActive;@BindView(R.id.editText_stream)EditText editTextStream;@BindView(R.id.editText_url)EditText editTextUrl;@BindView(R.id.btn_submit)Button btnSubmit;OkHttpClient client;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);Log.d("google.sang", "onCreate... ");editTextActive.setText("1");editTextStream.setText("0");editTextUrl.setText("rtmp://192.168.1.99:1935/452500846393/front");//第一个参数为用户名,第二个参数为密码final String basic = Credentials.basic("admin", "12345");client = new OkHttpClient.Builder().authenticator(new Authenticator() {@Overridepublic Request authenticate(Route route, Response response) throws IOException {return response.request().newBuilder().header("Authorization", basic).build();}}).build();}@OnClick(R.id.btn_submit)public void submit(){Log.i("YYH", "submit... " );MediaType mediaType = MediaType.parse("text/html;charset=utf-8");RequestBody body = RequestBody.create(mediaType, getURL());Request request = new Request.Builder().url("http://192.168.1.10/action/set?subject=rtmp").post(body).build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.d("google.sang", "onFailure: " + e.getMessage());// mText.setText("onFailure: " + e.getMessage());}@Overridepublic void onResponse(Call call, Response response) throws IOException {if (response.isSuccessful()) {Log.d("google.sang", "onResponse: " + response.body().string());// mText.setText("onResponse: " + response.body().string());}}});}private String getURL(){StringBuilder sBuider = new StringBuilder();sBuider.append("<?xml version=\"1.0\" encoding=\"utf-8\"?><request><rtmp> <push>");sBuider.append("<active>"+editTextActive.getText().toString().trim()+"</active>");sBuider.append("<stream>"+editTextStream.getText().toString().trim()+"</stream>");sBuider.append("<url>"+editTextUrl.getText().toString().trim()+"</url>");sBuider.append("<tsection>0-86340</tsection> <tsection>0-0</tsection> <tsection>0-0</tsection> <tsection>0-0</tsection>");sBuider.append("</push></rtmp></request>");Log.i("YYH","getURL-->"+sBuider.toString());return sBuider.toString();}}
相关文章推荐
- 做项目时,如何进行数据并发冲突的控制
- 子线程如何获取和设置 或者控制窗口实时显示数据(网上的资料经个人整理拼凑总结)
- php curl如何模拟登录阿里妈妈|登陆阿里妈妈获取淘宝客推广数据
- ROS 模拟激光仿真数据 使用stage进行仿真 在stage中控制两个机器人
- 指令中directive 如何获取父级中通过$http获取的数据
- 如何利用Video4Linux获取摄像头数据
- 利用ffmpeg进行摄像头提取视频编码为h264通过RTP发送数据到指定的rtp地址
- GridView中存在多行数据,如何获取数据表主键值以对某一整行数据进行编辑
- 模拟表单发送POST,GET请求获取数据
- 利用ffmpeg进行摄像头提取视频编码为h264通过RTP发送数据到指定的rtp地址
- 子线程如何获取和设置 或者控制窗口实时显示数据(网上的资料经个人整理拼凑总结)
- 如何利用Video4Linux获取摄像头数据
- 如何利用Video4Linux获取摄像头数据
- 在Spring中基于JDBC进行数据访问时如何控制超时
- 如何使用DropDownList进行数据绑定并获取值
- 如何通过使用 VisualC # .NET /VB.NET 向打印机发送数据/控制命令
- 服务器接收和发送数据时 如何进行编码
- 小技巧:用CxImage将从摄像头获取的图像原始数据转成JPG,然后通过DDS发送出去
- 如何实时对ios中麦克风的数据进行解析,获取声音频率等相关的属性?
- linux下如何控制RTS?为了控制RS485发送正常,但无法接收到端发送过来的数据