gpt4 book ai didi

java - 如何将 jpeg 帧从 java 客户端流式传输到 python 服务器

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:50 24 4
gpt4 key购买 nike

我正在开发一个 android 应用程序,其中我必须发送分配给 BufferedArrayOutputStream(代码中的 baos 变量)的 jpeg 格式的帧。我把这个baos转换成字节数组写入socket。在服务器端,我想以 jpeg 格式重建图像。如果我将变量中接收到的数据写入服务器上的“.jpg”文件,则在打开文件时会出现错误,如“以 ffx0 开头的文件不是 jpeg 格式”。我认为这是因为python中的字符串变量将文件中的数据写入为十六进制字符串。客户端代码如下:-

Bitmap memoryImage = Bitmap.createBitmap(rgb, previewSize.width,previewSize.height,Bitmap.Config.ARGB_8888);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if(memoryImage.compress(CompressFormat.JPEG,100, baos)){
try {
if(count==0){
byte [] Finalbaos = baos.toByteArray();
int tempLen = Finalbaos.length;
Log.v("Client","ImageBytes :"+ tempLen);
String dataMeta = Integer.toString(tempLen);
Log.v("Client","Integer Size :"+ dataMeta.length());
PrintWriter tempOut = new PrintWriter(socket.getOutputStream());
if(tempOut!=null){
tempOut.write(dataMeta);
Log.v("Client","data size sent");
tempOut.flush();
}

DataInputStream in = new DataInputStream(socket.getInputStream());
if(in!=null){
Log.v("Client","read buffer created");
String xyz = in.readLine();
String temp = "recvd";
Log.v("Client",xyz);
if(xyz.equals(temp)){
OutputStream out = socket.getOutputStream();
out.write(Finalbaos,0,tempLen);
out.flush();
Log.d("Client", "Client sent message");
}
}

服务器代码:

import socket,thread
import string
import array
host=""
port=54321
s=socket.socket()
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((host,port))
s.listen(5)
conn,address=s.accept()
data=""
mylen=0
dataRecv=0
file1 = open("myfile.jpg","w")
totalLength=""
length=conn.recv(1024)
conn.send("recvd")
mylen=int(length)

while dataRecv<mylen:
newData=""
newData=conn.recv(1)
if not newData:
break
data+=newData
dataRecv+=len(newData)

result= array.array('B',data.decode("hex"))
file1.write(result)
file1.close()
print len(data)
conn.close()
s.close()

谁能告诉我如何用 python 或 C++ 在服务器上重建框架

最佳答案

  • mylen=len(length) 不会为您提供您尝试发送的长度。它会告诉您在前面的 recv 中读取了多少字节。所以你在那里得到了错误的长度。
  • 在您的客户端,您使用 String xyz = in.readLine(); 它将阻塞,直到遇到换行符。但是您永远不会在服务器端发送 '\n' ,而是等待客户端的响应。所以你在那里遇到了僵局。
  • 您对收到的数据使用data.decode("hex")。除非你在另一边的 java 中执行 data.encode("hex") 的等效操作,否则这是行不通的。如果该字符串不是二进制字符串的有效十六进制表示形式,它应该会给您一个错误。
  • result 是一个 array.array,您将其写入文件。 file1.write 需要一个字符串作为参数,如果您传递您的 result 对象,它会给您一个错误。

所以我什至不明白为什么你的代码可以工作,为什么你的文件里有任何东西。

关于java - 如何将 jpeg 帧从 java 客户端流式传输到 python 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10561010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com