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