您的位置:首页 > 移动开发 > Android开发

如何获取摄像头的控制指令数据,进行模拟发送控制

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();}}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  摄像头 android
相关文章推荐