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

需求:获取网络摄像头的控制指令数据,如关闭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.1
x-requested-with: XMLHttpRequest
Accept-Language: zh-cn
Referer: http://192.168.1.10/cn/admin/rtmp.asp
Accept: text/html, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
User-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.10
Content-Length: 479
Connection: Keep-Alive
Pragma: no-cache
Cookie: language=zh
Authorization: --------(此处删除账号信息,你懂得。。。)


<?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;


    @Override
    protected 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() {
            @Override
            public 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() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("google.sang", "onFailure: " + e.getMessage());

//                mText.setText("onFailure: " + e.getMessage());

            }

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

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值