如何在 Swift 中读取视频文件的第一个和最后一个 64kb

Posted

技术标签:

【中文标题】如何在 Swift 中读取视频文件的第一个和最后一个 64kb【英文标题】:How to read first and last 64kb of a video file in Swift 【发布时间】:2017-05-03 07:42:49 【问题描述】:

我想使用subtitle API。它需要视频文件的第一个和最后一个 64kb 的 md5 哈希。我知道如何做 md5 部分只是想知道我将如何获得 128kb 的数据。

这是我无法在 Swift 中实现的 Java 问题的解决方案。 Stack

我有一个视频 URL,如何从中获取第一个和最后一个 64kb?上 AlamoFire 然后呢?

下面是它在 Java 中的实现方式,

FileInputStream in = new FileInputStream("d:/1.avi");
byte[] a = new byte[64 * 1024];
in.read(a);   //head
long p = in.getChannel().size() - 64 * 1024;
in.getChannel().position(p);
in.read(a);   //tail

【问题讨论】:

【参考方案1】:

以下是正确的做法:

let data = try! Data(contentsOf: URL(string: <#Insert your URL#>)!) // should do some unwrapping precautions here

// first 64 bytes
let first = data.subdata(in: 0 ..< 65336) // 65336 bytes = 1kb (if 1kb = 1024 bytes)

// last 64 bytes
let last = data.subdata(in: (data.count - 65336)..<data.count) // data.count - 65366 = last 64 bytes of the file

首先您下载文件(例如使用 Alamofire)。完成后,将 URL 放入 URL 初始化程序的 string: 参数中。

然后,使用变量firstlast 获取md5。

【讨论】:

谢谢!很有帮助!为什么我需要用 Alamofire 下载文件“thesubdb.com/api/samples/dexter.mp4”,当有这个“数据(contentsOf:URL(string:)!)”时,我可以把那个 url 字符串放在那里。 实际上,如果您只是将链接放在那里,您将不得不做一些线程处理,因为您的应用程序在下载文件时会冻结。如果长时间挂起,它会被ios杀死。 啊,是的,我现在遇到了这个问题。因为我将 2 小时的视频网址放入“数据(contentsOf:URL(字符串:)!)”中,嗯,有没有办法只加载视频的第一个和最后一个位?然后获取该数据的第一位和最后一位(64 字节)。然后找到哈希码,(保存设备以加载整个视频只是为了获取字幕 api 请求?)尝试考虑最佳方法。 使用阿拉莫火喵 不应该是 65336 - 是 64000 吗?还是因为api说的是64 * 1024

以上是关于如何在 Swift 中读取视频文件的第一个和最后一个 64kb的主要内容,如果未能解决你的问题,请参考以下文章

从正在写入的视频 .avi 文件中读取

C语言从TXT文档中读取一组数字时如何判断已经读到最后一个数字?

如何记录使用 AVCaptureSession 捕获的第一个和最后一个电影帧的确切时间?

Shell如何实现从文件中的第n行开始读取记录?

如何检测 ALAssetLibrary 中的最后一项是照片还是视频?

如何截取视频的第一帧图片