【问题标题】:How to get video format from video URL (Any type, not just AVPlayer compatible)如何从视频 URL 获取视频格式(任何类型,不仅仅是 AVPlayer 兼容)
【发布时间】:2022-11-19 04:09:49
【问题描述】:

我想从视频 URL(mp4、m3u8、mpeg 等)获取格式,以决定在我的应用程序中使用哪个播放器(AVPlayer 或第三方)。

一种选择是检查 AVAsset(...).isPlayable,我现在正在使用它,但我想改进我在无法使用 AVPlayer 时的逻辑。

当我不能使用 AVPlayer 时,我会使用 ffmpeg 对视频进行编码,如果我可以得到视频的格式(甚至更多信息),我可以改进 ffmpeg 完成的编码。

【问题讨论】:

  • 你可以得到 url 类型标识符

标签: ios swift ffmpeg avplayer tvos


【解决方案1】:

我会使用 Regex 表达式来分析 URL 并找到扩展名。

你可以使用这个:.w{3,4}($|?)

【讨论】:

  • 如果您只需要获取 url pathExtension,为什么还要使用正则表达式?
  • 该 URL 有时没有扩展名,它可能会将您重定向到另一个 URL
【解决方案2】:

如果您不想使用正则表达式,那么这段代码应该可以解决问题:

var url = "https://www.bruno.com/videos/video.mp4"

extension String {

    func fileExtension() -> String {
        return URL(fileURLWithPath: self).pathExtension
    }
}

let fileExtension = url.fileExtension()

print(fileExtension)

【讨论】:

  • 该 URL 有时没有扩展名,它可能会将您重定向到另一个 URL
【解决方案3】:

您可以使用类似下面的内容

let url = URL(string: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")

let result = url?.pathExtension
    //result will return the extension of the given path

希望这对你有帮助

【讨论】:

  • 该 URL 有时没有扩展名,它可能会将您重定向到另一个 URL
  • 您能否提供任何不带任何扩展名的虚拟网址以验证解决方法。
【解决方案4】:

如果您使用的是 ffmpeg,则可以在 url 上执行 ffprobe 以获取 codec_name。

这样的事情应该有效:

ffprobe test.mp4 -show_streams -show_entries stream=codec_type,codec_name, -of json -v quiet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多