【发布时间】:2013-11-18 12:09:48
【问题描述】:
我需要开发一个应用程序来将图像从 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): 在 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 = new File(sdCard+"/image/image.jpg");
byte[] mybytearray = new byte[(int) myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
//bis.read(mybytearray, 0, mybytearray.length);
DataInputStream dis = new DataInputStream(bis);
dis.readFully(mybytearray, 0, mybytearray.length);
OutputStream os = socket.getOutputStream();
tv.setText("Send file name size to server");
//Sending file name,file size and to the server
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(myFile.getName());
dos.writeLong(mybytearray.length);
dos.write(mybytearray, 0, mybytearray.length);
dos.flush();
socket.close();
tv.setText("Socket Close");
tv.setText("Sent");
接收方代码: 文件目录 = 新文件 (sdCard.getAbsolutePath() + "/dir1/dir2"); dir.mkdirs();
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();
感谢和问候, Divya.K
【问题讨论】:
-
除了你的错误,如果你不断地打开和关闭套接字,你将无法以任何理智的方式流式传输视频。延迟将是无望的。
-
Hiii Martin James,谢谢您的回复..除此之外,问题的解决方案是通过套接字将视频从 android 流式传输到 android..coz 以前我曾尝试使用 mediarecorder 属性已经发布在stackoverflow.com/questions/18886981/… ..最后我能够保存录制的视频文件..但我无法播放视频..视频已编码..它能够使用 MX 播放器等 3rd 方媒体播放器播放..但不在默认媒体播放器中。所以我开始像这样实现
-
我已经尝试了很多我在谷歌中找到的方法,但没有合适的解决方案..所以请你指导我如何通过 wifi 通过套接字将在线视频从 android 流式传输到 android...任何想法..而且我没有尝试通过创建 RTP 数据包来实现像 Spydroid IP 摄像头一样。我需要在没有任何中间服务器的情况下实现..只需通过套接字..直接流...所以我该如何继续实现...跨度>
标签: android sockets multimedia