gpt4 book ai didi

java - 我该如何改进我的视频上传,目前由于内存不足导致应用程序崩溃

转载 作者:行者123 更新时间:2023-11-29 07:40:50 26 4
gpt4 key购买 nike

我目前正在从我的应用程序 (android) 上传视频,这会导致应用程序崩溃,试图弄清楚如何使其在应用程序和服务器端的两端都高效......最终它确实如此上传视频,但应用程序或服务器崩溃,具体取决于哪个内存不足。

堆栈 - Java、改造、Node.js、knox、heroku、amazonS3

对于客户端 android: (retrofit, java):

其余文件:

@Multipart
@POST("/addMedia")
public void addMedia(
@Part("name") String name,
@Part("categ") String category,
@Part("desc") String desc,
@Part("creatorId") String creatorId,
@Part("isItAPicture") String isItAPicture, //if true it is a picture
@Part("mediaFile") TypedFile mediaFile,
Callback<UserResponse> callback);

创建类文件:

  ApiManager.getAsyncApi().addMedia(title, categ, descr, creatorId, String.valueOf(isPictureNotvideo), media, new Callback<UserResponse>() {
@Override
public void success(UserResponse userResponse, Response response) {
\
}

@Override
public void failure(RetrofitError error) {
throw error;
}
});

服务器端(Node.js、heroku、AmazonS3、knox 模块)

var s3 = knox.createClient({
key: config.amazonS3.key,
secret: config.amazonS3.secret,
bucket:config.amazonS3.bucketMedia
});






function setupAndCreateMedia ( cb) {
if(req.files && req.files.mediaFile) {
console.log("Received file:\n" + JSON.stringify(req.files));
//add p for pics will do v for vids
videoID = "v" + path.basename(req.files.mediaFile.path);
tmp_path = req.files.mediaFile.path;
targetPathSmall = './public/img/media/' + videoID;
videoConvert = req.files.mediaFile.name;
var video = req.files.mediaFile;
var s3Headers = {
'Content-Type': video.type,
'x-amz-acl': 'public-read'
};
//console.log('stdout:', stdout, targetPathSmall)
s3.putStream(targetPathSmall, videoID, s3Headers, function(err, s3response){
//handle, respond
if(err) {
console.log(err);
} else {
console.log("saved to S3");
//console.log(s3response);
cb(null, videoID);
}
});
} else {
videoID = "";
cb(null, videoID);
}
}

这是 android 上的崩溃消息:

Caused by: java.lang.OutOfMemoryError: Failed to allocate a 48298892 byte allocation with 16777216 free bytes and 44MB until OOM

最佳答案

问题可能是由日志记录引起的。 Retrofit 的记录器读取您的视频二进制文件,并在此处引发 OOM 异常。

要防止它,请使用以下方法为您的 restAdapter 禁用日志:

setLogLevel(LogLevel.NONE)

Source

关于java - 我该如何改进我的视频上传,目前由于内存不足导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30415189/

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