我修改了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) 我从这里获得Android和MJPEG的代码来下载和流式传输Mjpeg.它看起来和一个视频的工作正常.
但是,当我尝试同时流式传输多个MJpeg视频并在屏幕上显示时,性能会显着降低.
任何人都会建议更好的方法来处理多个流或他们可以看到实现的任何改进,以提高性能.截至目前,它非常缓慢,不可接受.
我目前正在以3人为一组进行AndAR项目.我是负责Android手机视频流的人.我得到了一台D-Link DCS-920 IP摄像机,我发现它使用MJPEG编解码器作为直播视频流,网络服务器使用Jview来观看直播.据我所知,MJPG不是Android操作系统支持的文件类型所以我想出了一个想法,而不是使用ImageView,我使用WebView来传输视频.我实现了一个非常简单的概念,它的工作原理!但问题是,刷新率很糟糕.我得到视频图像(例如http://192.168.1.10/image.jpg:)在WebView上查看并实现一个Timer来控制刷新率(假设它设置为30fps,每33ms刷新一次)但是它只能达到500ms间隔,任何更低的间隔我注意到它不会更平滑,有时图像不会加载,连接不稳定(例如:掉线).这可能是我的速度比它能以更快的速度刷新吗?但是在网络服务器Jview上它没有问题!我试图找到jview的源代码,但我没有希望.无论如何这里是我写的代码
package org.example.test;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
public class Webview extends Activity {
public WebView webView;
public Timer autoUpdate;
public String url;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webview);
webView.getSettings();
final EditText urlText = (EditText) findViewById(R.id.urlText);
//Buttons//////////////////------------
final Button connectB = (Button)findViewById(R.id.connectButton);
connectB.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种从Android设备与外部摄像头连接的方法.它需要成为外置摄像头的原因是因为我需要能够修改摄像头(移除红外滤镜)而且我不想破坏车载手机摄像头.
无论相机如何通过USB,蓝牙,WiFi或其他通信协议连接都无关紧要,这两个设备只需要能够在没有中间服务器/路由器的情况下进行通话.
我正在寻找一个解决方案:
最后一项要求不是必需的,但会很好.
我探讨的选项:
如果连接到IP摄像机没有中间人可以在代码Android和MJPEG和Android上(MJEPG)获取IP摄像头的视频流看起来很有希望.
我可以覆盖其他应用视频源吗?是否可以直接连接到IP摄像头?任何建议的选项非常感谢.
我有一台IP摄像机,它是MJPEG格式的流媒体视频.现在我的目标是接收它并在我自己的自定义Android应用程序中显示它.为此我在android平台上有三个编程选择:
那么请建议更好的解决方案?
我没有使用FFMPEG或GStreamer的经验.那么这样做的可行性是什么?
我在远程管理玩具项目中工作.现在,我可以使用Robot该类捕获屏幕截图并控制鼠标.截图是BufferedImage实例.
首先,我的要求: - 只有服务器和客户端. - 性能很重要,因为客户端可能是Android应用程序.
我想过打开两个套接字连接,一个用于鼠标和系统命令,另一个用于视频输入.
如何将屏幕截图转换为视频流?我应该将它们转换为已知的视频格式,还是可以发送一系列序列化图像?
压缩是另一个问题.根据我的初步测试,以全分辨率发送屏幕捕获将导致低帧速率.我认为我需要至少24 fps来感知运动,所以我要同时缩小和压缩.我可以转换BufferedImages为jpg文件,然后设置压缩率,但我不想将文件存储在磁盘上,它们应该只存在于RAM中.另一种可能性是将实例(表示未压缩的屏幕截图)序列化为GZipOutputStream.这是正确的方法是什么?
总结一下:
OutputStream?提前致谢.
更新:我的测试,客户端和服务器在同一台机器上
- 全屏幕序列化BufferedImages(只有维度,类型和int []),没有压缩:1.9 fps.
通过GZip流的完整屏幕图像:2.6 fps.
-Downscaled图像(640宽度)和GZip流:6.56 fps.
- 全屏幕图像和RLE编码:4.14 fps.
-Downscaled图像和RLE编码:7.29 fps.
我已经实现了Android 和 MJPEG
并且还实现了异步和认证来运行这里提到的它。现在我已经设法运行 jpeg 视频流,但问题是它在运行流时一直闪烁。它不断地起落。我认为这可能是框架的问题。任何人都知道如何处理这个问题。这是我实现的完整代码:
MjpegSample.java
public class MjpegSample extends Activity {
private static final boolean DEBUG=true;
private static final String TAG = "MJPEG";
private MjpegView mv;
private static final int MENU_QUIT = 1;
String URL;
MjpegInputStream inputStream;
/* Creates the menu items */
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_QUIT, 0, "Quit");
return true;
}
/* Handles item selections */
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_QUIT:
finish();
return true;
}
return …Run Code Online (Sandbox Code Playgroud) 我正在寻找在默认的httpclient中忽略所有ssl错误(例如,不信任)的可能性.我在这里看到了很多解决方案,但我必须导入一个特定的证书,并将其添加到trustmanager,或者它是用于DefaultHttpClient的HttpsUrlConnection instad.我用过的webrequests是:
public static String makeGETRequest(String s,String encoding)
{
DefaultHttpClient http = new DefaultHttpClient();
final String username = "USERNAME";
final String password = "PASSWORD";
UsernamePasswordCredentials c = new UsernamePasswordCredentials(username,password);
BasicCredentialsProvider cP = new BasicCredentialsProvider();
cP.setCredentials(AuthScope.ANY, c);
http.setCredentialsProvider(cP);
HttpResponse res;
try {
res = http.execute(new HttpGet(s));
InputStream is = res.getEntity().getContent();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while((current = bis.read()) != -1){
baf.append((byte)current);
}
return new String(baf.toByteArray(),encoding);
}
catch (ClientProtocolException e) {
// TODO …Run Code Online (Sandbox Code Playgroud)