我当前正在访问流式 h264 文件,并希望将其保存以便能够切片帧。但是,我在保存/打开 .flv 文件时遇到问题
当指向地址栏中的 URL 时 - 我被告知这是一个 x-flv 文件。
然后,我尝试执行以下操作来保存流的一部分。
URL url = new URL("http://foo.bar.com/foo/bar");
HttpURLConnection conn = (HttpURLConnection) url
.openConnection(proxy);
conn.setRequestMethod("GET");
File f = new File("C:\\tmpArea\\tmp.flv");
FileWriter fr = new FileWriter(f);
bw = new BufferedWriter(fr);
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output = "";
int i = 0;
while (((output = br.readLine()) != null) && i < 100000) {
bw.write(output);
i++;
}
执行此操作后,我尝试在 VLC 媒体播放器中打开该文件,并被告知:
No suitable decoder module: VLC does not support the audio or video format "undf".
Unfortunately there is no way for you to fix this.
然后我想,也许这并不是真正的 FLV 文件,而这就是我的责任。所以我使用了普通的十六进制编辑器。在 HexEditor 中打开文件会提供以下信息:
FLV 元数据上 期间 宽度 高度 视频数据率 帧率 视频编解码器 音频数据率 音频采样率 音频样本大小 立体声 音频编解码器 编码器 拉夫52.10.6.0 文件大小....
我应该尝试以不同的方式保存这些数据吗?是否存在我没有看到的转换/编解码器问题?
最佳答案
您正在使用Reader
和Writer
,它们旨在读取字节并将其转换为字符,以读取二进制文件由字节组成。从字节到字符的转换会损坏数据。您应该改用 InputStream
和 OutputStream
。
关于java - 保存 FLV 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319905/