如何根据Android中视频的播放时间偏移量来获取字节偏移量?

时间:2015-03-06 18:51:40

标签: android video mediaextractor

如何根据视频的播放时间偏移获取视频的字节偏移量?例如,假设视频的播放时间偏移为15秒,我想知道该秒的字节偏移量。

之所以这样,是因为我希望能够从视频中“修剪”剪辑。我希望能够在视频的00:00:20到00:00:35之间保存视频片段。

目前,这就是我所拥有的 - 但这会将整个视频从网址保存到设备中:

URL url = new URL(http_url_path);
URLConnection ucon = url.openConnection();

// Define InputStreams to read from the URLConnection.
// uses 5KB download buffer
InputStream is = ucon.getInputStream();
BufferedInputStream in = new BufferedInputStream(is, BUFFER_SIZE);
FileOutputStream out = new FileOutputStream(file);
byte[] buff = new byte[BUFFER_SIZE];

int len = 0;
while ((len = in.read(buff)) != -1) {
    out.write(buff, 0, len);
}

2 个答案:

答案 0 :(得分:2)

如果您不介意在最近的关键帧(a / k /同步帧)切割,可以使用MediaExtractor提取帧,使用getSampleTime()检查PTS,以及MediaMuxer将它重新组合在一起减去不需要的帧。

视频必须以关键帧开头,因此除非您愿意重新编码该GOP,否则无法在任意点剪切流。

MP4视频文件不仅仅是一系列帧(我假设您没有在原始H.264数据上运行)。 MediaMuxer将负责重写标题和其他支持数据。

答案 1 :(得分:1)

您可以尝试使用INDE Media for Mobile - https://software.intel.com/en-us/articles/intel-inde-media-pack-for-android-tutorials

它具有代码转换\ remuxing功能作为MediaComposer类,并且可以为结果文件选择段。由于它内部使用MediaCodec API,因此非常适合电池使用,并且工作速度尽可能快。样本在这里:https://github.com/INDExOS/media-for-mobile

enter image description here