无法通过Android套接字每次传输图像
我需要开发一个应用程序,将图像从android连续传输到android,并在客户端作为视频接收。我有两个应用程序,其中一个(服务器)将通过wifi连接的套接字发送文件,如果客户端接收到发送的图像,则其他客户端将接收到该文件…目前我只是将其保存在客户端的一个位置…我能够正确接收文件…但问题是我无法始终正确发送所有文件。。。 这意味着图像文件将在某一时间被传输,而在某一时间我将无法接收,当我无法接收时,我会得到一个异常 :java.io.UTFDataFormatException:…并且该文件未在接收端写入和保存 如果我无法连续接收图像…我可以认为代码中存在一些问题…但有时我能够传输它…有时无法传输…我无法确定问题是什么…请提供任何指导 错误是: 11-18 10:38:17.351:W/System.err(1001):java.io.UTFDataFormatException:第二个或第三个字节在2处不正确 11-18 10:38:17.359:W/System.err(1001):at java.nio.charset.ModifiedUtf8.decode(ModifiedUtf8.java:53) 11-18 10:38:17.359:W/System.err(1001):在java.io.DataInputStream.decodeUTF(DataInputStream.java:444) 11-18 10:38:17.359:W/System.err(1001):在java.io.DataInputStream.decodeUTF(DataInputStream.java:438) 11-18 10:38:17.359:W/System.err(1001):在java.io.DataInputStream.readUTF(DataInputStream.java:433) 当我收到此异常时,文件未保存 我测试过的许多场景都是通过捕获图像、保存和发送……以及压缩图像和发送……在这些场景中,有些场景很少会发生……我无法理解 发件人代码: File myFile=新文件(sdCard+“/image/image.jpg”)无法通过Android套接字每次传输图像,android,sockets,multimedia,Android,Sockets,Multimedia,我需要开发一个应用程序,将图像从android连续传输到android,并在客户端作为视频接收。我有两个应用程序,其中一个(服务器)将通过wifi连接的套接字发送文件,如果客户端接收到发送的图像,则其他客户端将接收到该文件…目前我只是将其保存在客户端的一个位置…我能够正确接收文件…但问题是我无法始终正确发送所有文件。。。 这意味着图像文件将在某一时间被传输,而在某一时间我将无法接收,当我无法接收时,我会得到一个异常 :java.io.UTFDataFormatException:…并且该文件未在
字节[]mybytearray=新字节[(int)myFile.length()] 接收器代码: File dir=新文件(sdCard.getAbsolutePath()+“/dir1/dir2”); dir.mkdirs() 感谢和问候,
Divya.K我被困在这件事上,我结合了几天的搜索,找到了这个。。。试试看,看是否适合你
Bitmap myBitmap = null;
try {
File imgFile = new File(imgPath);
if (imgFile.exists()) {
File image = new File(imgPath, "imagename.jpg");
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
myBitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
//myBitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); //uncomment this if you want to scale the image
//imageView.setImageBitmap(bitmap);//to set bitmap to image view
}
Socket sock = new Socket("192.168.1.1", 80);//ip adress and port number
ByteArrayOutputStream bos = new ByteArrayOutputStream();
if (myBitmap != null) {
myBitmap.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
}
byte[] bitmapdata = bos.toByteArray();
ByteArrayInputStream bs = new ByteArrayInputStream(bitmapdata);
BufferedInputStream bis = new BufferedInputStream(bs);
bis.read(bitmapdata, 0, bitmapdata.length);
OutputStream os = sock.getOutputStream();
System.out.println("Sending...");
os.write(bitmapdata, 0, bitmapdata.length);
os.flush();
sock.close();
} catch (Exception e) {
e.printStackTrace();
}
除了你的bug,如果你不断地打开和关闭插座,你将无法以任何正常的方式传输视频。延迟将是无望的嗨Martin James,感谢您的回复。除此之外,问题的解决方案是通过套接字将视频从android传输到android。因为之前我在发布时尝试使用mediarecorder属性。最后我能够保存录制的视频文件。但是我无法播放视频。视频已编码。它能够使用第三方媒体播放器(如MX播放器)播放。但不是默认的媒体播放器。因此,我开始这样实施。我已经尝试了许多在谷歌找到的方法,但没有合适的解决方案。因此,请告诉我如何通过wifi通过套接字将安卓系统的在线视频流传输到安卓系统…有什么想法吗?我没有尝试像Sphydroid IP摄像头那样实施通过创建RTP数据包和al..我需要在没有任何中间服务器的情况下实现..仅通过套接字..直接流式传输..那么我如何继续实现。。。
String fileName = clientData.readUTF();
File file = new File(dir,fileName);
OutputStream output = new FileOutputStream(file);
long size = clientData.readLong();
byte[] buffer = new byte[1024];
while (size > 0 && (bytesRead = clientData.read(buffer, 0, (int)Math.min(buffer.length, size))) != -1)
{
output.write(buffer, 0, bytesRead);
size -= bytesRead;
System.out.println("Writing");
}
// status.setText("Received");
// Closing the FileOutputStream handle
output.close();
s.close();
Bitmap myBitmap = null;
try {
File imgFile = new File(imgPath);
if (imgFile.exists()) {
File image = new File(imgPath, "imagename.jpg");
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
myBitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
//myBitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); //uncomment this if you want to scale the image
//imageView.setImageBitmap(bitmap);//to set bitmap to image view
}
Socket sock = new Socket("192.168.1.1", 80);//ip adress and port number
ByteArrayOutputStream bos = new ByteArrayOutputStream();
if (myBitmap != null) {
myBitmap.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
}
byte[] bitmapdata = bos.toByteArray();
ByteArrayInputStream bs = new ByteArrayInputStream(bitmapdata);
BufferedInputStream bis = new BufferedInputStream(bs);
bis.read(bitmapdata, 0, bitmapdata.length);
OutputStream os = sock.getOutputStream();
System.out.println("Sending...");
os.write(bitmapdata, 0, bitmapdata.length);
os.flush();
sock.close();
} catch (Exception e) {
e.printStackTrace();
}