我正在开发网络视频接口论坛-Java项目,并遵循ONVIF应用程序员指南中描述的步骤.
我已经从wsdls
ONVIF网站提供了源代码.我可以使用media.wsdl
.检索实时流URI .现在我有一个录音问题.我尝试过的代码如下:
RecordingService recording_ervice = new RecordingService();
RecordingPort record_port = recording_ervice.getRecordingPort();
BindingProvider bindingProvider = (BindingProvider) record_port;
// Add a security handler for the credentials
final Binding binding = bindingProvider.getBinding();
List<Handler> handlerList = binding.getHandlerChain();
if (handlerList == null) {
handlerList = new ArrayList<Handler>();
}
handlerList.add(new RecordStream.SecurityHandler());
// binding.setHandlerChain(handlerList);
// Set the actual web services address instead of the mock service
Map<String, Object> requestContext = bindingProvider.getRequestContext();
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://" + deviceip + "/onvif/media_service");
requestContext.put(BindingProvider.USERNAME_PROPERTY, user);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, …
Run Code Online (Sandbox Code Playgroud) 我使用RTSP在LAN流视频上有一个IPCamera.我已经能够使用ffplay命令成功捕获并显示它:
ffplay rtsp://admin:123456@192.168.2.50:7070
Run Code Online (Sandbox Code Playgroud)
(带身份验证)
所以我想在C/C++中使用ffmpeg
库来实现相同的编程.我想这一定是可能的.
那么让我说两个简单的问题:
如何使用FFMPEG库在C/C++程序中接收流?(只是提供一些URL /教程,因为谷歌没有帮助)
如何显示收到的视频?(在这里,一些很好的URL指导我).
我正在为我的办公室建立一个摄像头安全系统,但我们不想在现场保留DVR.
我们看了NVR(网络视频录像机),它们太贵了.我想到了另一种选择.我不知道它有多可行,但肯定会喜欢这里的一些输入.
这是我的想法:
现在我对这个解决方案的实用性以及构建这样一个系统所涉及的技术问题有一些疑问:
有些网站已经这样做了(比如http://www.mangocam.com/)
谢谢,我希望这个问题符合SO指南,因为这可能是编程和非编程相关的灰色区域.如果没有,我会将它移动到其他堆栈交换站点(请提出建议)
我修改了Android和MJPEG的MJPEG查看器代码,使用AsyncTask工作(因此可以使用Ice Cream Sandwich(ICS),4.0.4),这是我的代码.
如果有人对如何优化,清理或使用代码做更合适的事情有任何建议,请告诉我.我很感激有两个问题有助于解决:
如果您有设备在流上,然后锁定屏幕并解锁屏幕,它不会恢复播放,直到您杀死并恢复应用程序或旋转屏幕.我尝试使用OnResume()执行某些操作或其他操作导致应用程序崩溃.
特别是我想在MjpegInputStream.java中获取AsyncTask但是无法使其工作.
MjpegActivity.java:
package com.demo.mjpeg;
import java.io.IOException;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.demo.mjpeg.MjpegView.MjpegInputStream;
import com.demo.mjpeg.MjpegView.MjpegView;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
public class MjpegActivity extends Activity {
private static final String TAG = "MjpegActivity";
private MjpegView mv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//sample public cam
String URL = "http://trackfield.webcam.oregonstate.edu/axis-cgi/mjpg/video.cgi?resolution=800x600&%3bdummy=1333689998337";
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
mv = new MjpegView(this);
setContentView(mv);
new DoRead().execute(URL); …
Run Code Online (Sandbox Code Playgroud) 我需要从IP摄像头获取mjpeg流,任何人都知道正确的方法吗?我用Google搜索了一下,我找到了这个例子
http://www.anddev.org/mjpeg_on_android_anyone-t1871.html
但是当我试图从主要活动调用的另一个活动中获取流时,我一直被困住了.这里的代码:
主要活动
package com.test;
public class IntentTest extends Activity {
/** Called when the activity is first created. */
ListView myListView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myListView = (ListView)findViewById(R.id.listView);
final ArrayList<String> items = new ArrayList<String>();
items.add("00408C944B9A");
final ArrayAdapter<String> aa;
aa = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
items);
myListView.setAdapter(aa);
myListView.setOnItemClickListener(listClicked);
}
private OnItemClickListener listClicked = new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
// TODO Auto-generated method stub
Intent i …
Run Code Online (Sandbox Code Playgroud) 下面给出了为从IP Camera获取实时流而编写的代码.
from cv2 import *
from cv2 import cv
import urllib
import numpy as np
k=0
capture=cv.CaptureFromFile("http://IPADDRESS of the camera/axis-cgi/mjpg/video.cgi")
namedWindow("Display",1)
while True:
frame=cv.QueryFrame(capture)
if frame is None:
print 'Cam not found'
break
else:
cv.ShowImage("Display", frame)
if k==0x1b:
print 'Esc. Exiting'
break
Run Code Online (Sandbox Code Playgroud)
在运行代码时,我得到的输出是:
Cam not found
Run Code Online (Sandbox Code Playgroud)
我哪里错了?另外,为什么帧无?转换有问题吗?
是否有一种轻量级,免费且可靠的方式在跨浏览器环境中显示MJPEG?我正在尝试在我正在开发的网站上显示来自Axis 2120 IP摄像头的MJPEG流,并且我发现这在当前版本的Firefox中非常可靠.然而,经过一些测试后我发现IE,Opera和Chrome都有不同程度的麻烦(没有Mac访问,所以我不确定Safari).Internet Explorer不支持MJPEG,根本不起作用.在发送初始GET之后,Opera需要10-15秒才能显示任何内容.Chrome可以完美地运行,直到<div>
包含<img>
标签的内容被隐藏,然后再次显示.
作为参考,我使用<img>
标签来显示流,如下所示:
<img src="http://my.ip.addr/axis-cgi/mjpg/video.cgi/?resolution=352x240" alt="real-time video feed" />
Run Code Online (Sandbox Code Playgroud)
我已经考虑过使用重播服务器来收集MJPEG流并在运行中对其进行转码,但这个解决方案似乎太难看了.那里有更好的建议吗?
如何访问我的IP Camera流?
用于显示标准网络摄像头流的代码是
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
我如何使用IP Camera做同样的事情?
我的系统:
帮助将受到高度赞赏
我正在寻找一种从Android设备与外部摄像头连接的方法.它需要成为外置摄像头的原因是因为我需要能够修改摄像头(移除红外滤镜)而且我不想破坏车载手机摄像头.
无论相机如何通过USB,蓝牙,WiFi或其他通信协议连接都无关紧要,这两个设备只需要能够在没有中间服务器/路由器的情况下进行通话.
我正在寻找一个解决方案:
最后一项要求不是必需的,但会很好.
我探讨的选项:
如果连接到IP摄像机没有中间人可以在代码Android和MJPEG和Android上(MJEPG)获取IP摄像头的视频流看起来很有希望.
我可以覆盖其他应用视频源吗?是否可以直接连接到IP摄像头?任何建议的选项非常感谢.
我想使用带有webrtc的IP摄像头.然而,webrtc似乎只支持网络摄像头.所以我尝试将IP摄像机的流转换为虚拟网络摄像头.
我找到了像IP Camera Adapter这样的软件,但它们不能正常工作(每秒2-3帧,延迟2秒),而且它们只适用于Windows,我更喜欢使用Linux(如果可能的话).
我尝试ffmpeg/avconv:
首先,我用v4l2loopback创建了一个虚拟设备(命令是:)sudo modprobe v4l2loopback
.检测到虚拟设备,可以使用以下命令通过视频(.avi)提供虚拟设备: ffmpeg -re -i testsrc.avi -f v4l2 /dev/video1
来自IP摄像机的流可用于:rtsp://IP/play2.sdp
用于Dlink DCS-5222L摄像机.ffmpeg可以捕获此流.
我的问题是在这两个步骤之间建立链接(接收rstp流并将其写入虚拟网络摄像头).我试过ffmpeg -re -i rtsp://192.168.1.16/play2.sdp -f video4linux2 -input_format mjpeg -i /dev/video0
但是v4l2有错误(找不到v4l2).
有人知道如何使用带有webRTC的IP摄像头吗?