gpt4 book ai didi

java - 创建视频文件的可播放预览

转载 作者:行者123 更新时间:2023-11-30 10:44:49 28 4
gpt4 key购买 nike

我有一个文件 movie.mp4,我希望创建一个预览并在 VideoView 中播放。出于这个问题的目的,我们假设 movie.mp4 是 30 兆字节。

我想从 movie.mp4 中提取前 10 兆字节的视频并将其保存在一个临时文件中。我会将此文件输入 VideoView 并播放。

这是我到目前为止所做的:

// Get movie file.
File f = getMovieFile("movie.mp4");

// Create temporary file.
File t = File.createTempFile("preview", "mp4");
t.deleteOnExit();

// Create input stream.
InputStream is = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(is, 2048);

// Create output stream to temp file.
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(t));

byte[] buffer = new byte[16384];
int totalRead = 0;
int bytesRead;

int maxBytes = (int) Math.pow(2, 20) * 10; // 10 megabytes

// Write data from input to output.
while ((bytesRead = bis.read(buffer)) != -1 && totalRead < maxBytes) {
bos.write(buffer, 0, bytesRead);
bos.flush();
totalRead += bytesRead;
}

bos.close();

// Play the preview.
mVideoView.setVideoPath(t.getAbsolutePath());
mVideoView.start();

当我运行这段代码时,Android 会提示并告诉我该文件无法播放。如果我取消 10 兆字节的限制并让循环自行运行,VideoView 将很好地播放文件。

我猜测当创建预览并且仅复制文件一部分的数据时,新文件中缺少原始 mp4 文件中的一些重要元数据。不过这只是一个猜测。

最佳答案

问题可能出在您的视频中,部分 mp4 文件的开头必须有元数据。

虽然有大量关于使用 FFmpeg 编码 MPEG 4 视频的文章,但其中大多数都没有警告您一些事情:大多数视频播放器在元数据可用之前不会开始播放(意思是如果该数据放在后面- 文件结尾,如某些编码器所做的那样,必须先下载整个视频才能到达元数据并开始播放)。

此示例使用 ffmpeg 创建一个 mp4 快速启动视频:

ffmpeg.exe -i INPUT_FILE_NAME_HERE -c:v libx264 -profile:v baseline -preset slow -b:v 800k -c:a libvo_aacenc -movflags faststart OUTPUT_FILE_NAME.mp4

关于java - 创建视频文件的可播放预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37310375/

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