首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对图像使用IP网络摄像头并将url传递给API

对图像使用IP网络摄像头并将url传递给API
EN

Stack Overflow用户
提问于 2018-07-05 14:26:49
回答 1查看 1.7K关注 0票数 1

我正在使用我的android手机中的IP网络摄像头应用程序,以将其用作IP摄像头,我正在使用另一款android手机来运行我的应用程序,该应用程序使用Kairos API来识别人脸。我正在使用IP网络摄像头应用程序,图像以类似于"http://xxx.xxx.x.xxx:8080/photo.jpg“的URL进行流式传输,我可以在所有设备上通过此url查看图像,但是我正在使用的API有一个识别功能,该功能将图像url作为其参数之一,但是当我使用流式图像url时,它不起作用。我试着通过日志找出发生了什么,但我所能看到的是它抛出了一个SocketTimeoutException(读取超时),并尝试了它的解决方案,但都没有奏效,有什么建议吗?

代码:

代码语言:javascript
复制
    public void getUrlText(){

        try{
            url = new URL("http://xxx.xxx.x.xxx:8080/photo.jpg");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    Handler handler = new Handler();
    Runnable timedTask = new Runnable(){

        @Override
        public void run() {
            getUrlText();
            handler.postDelayed(timedTask, 1000);
    }};

这是在onCreate方法中:

代码语言:javascript
复制
        getUrlText();
        handler.post(timedTask);
        recognizePhotoKairos(Uri.parse(url.toString()), userPhoneNumber);
EN

回答 1

Stack Overflow用户

发布于 2018-07-05 15:28:10

当您使用ip网络摄像头时,请确保您的所有设备都连接到同一服务器。第二件事是,你必须一次又一次地刷新url,才能获得最新的图像。我认为这是您刷新url的主要问题。我建议你为此使用处理程序,它会等待一段特定的时间,然后再次刷新url或api。Read more about handler我正在添加一个项目的源代码,在这个项目中我一次又一次地启动处理程序

公共类CounterActivity扩展了AppCompatActivity {

代码语言:javascript
复制
TextView textView;
private boolean started = false;
private PowerManager.WakeLock wl;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_counter);

    textView=findViewById(R.id.points);
    PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "My:Tag");

//本段屏幕保持打开状态

代码语言:javascript
复制
    start();


    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {


            final String URL="http://172.16.16.108:8080/wallgame/api/game_points";

            StringRequest request=
                    new StringRequest(Request.Method.GET, URL,
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {

                                    try {
                                        JSONObject object=new JSONObject(response);

                                        JSONObject data=object.getJSONObject("data");


                                        int points=Integer.parseInt(data.getString("game_points"));

                                        textView.setText(points+"");

                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {

                            Toast.makeText(CounterActivity.this, "Error", Toast.LENGTH_SHORT).show();
                        }
                    }
                    );
            RequestQueue queue= Volley.newRequestQueue(CounterActivity.this);
            queue.add(request);

        }
    },1000);
}

Runnable runnable = new Runnable() {
    @Override
    public void run() {

        final String URL="http://172.16.16.108:8080/wallgame/api/game_points";

        StringRequest request=
                new StringRequest(Request.Method.GET, URL,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {

                                try {
                                    JSONObject object=new JSONObject(response);

                                    JSONObject data=object.getJSONObject("data");


                                    int points=Integer.parseInt(data.getString("game_points"));

                                    textView.setText(points+"");

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(CounterActivity.this, "Error", Toast.LENGTH_SHORT).show();
                    }
                }
                );
        RequestQueue queue= Volley.newRequestQueue(CounterActivity.this);
        queue.add(request);
        start();
    }
};
public void onDestroy() {
    super.onDestroy();
    started = false;
    handler.removeCallbacks(runnable);
    if (wl.isHeld())
        wl.release();
}
public void start(){
    started = true;
    handler.postDelayed(runnable, 1500);
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51184594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档