【问题标题】:Using Node.js Get Video Codec For MediaSource API Of Random Video Upon Request使用 Node.js 根据请求获取随机视频的 MediaSource API 的视频编解码器
【发布时间】:2023-02-04 04:20:08
【问题描述】:

我正在尝试使用 MediaSource API 将视频流式传输到浏览器,但 MediaSource API 似乎需要视频编解码器信息,而这些信息是事先不知道的。

求视频的时候得查这个资料,事先不知道视频格式。视频格式可以是 MP4、WEBM、OGG 等。请求视频时,我找不到可靠的方法来查找编解码器信息。

使用 ffmpeg NPM 模块返回的编解码器字符串不是 MediaSource API 可以使用的格式。

FFMPEG 返回的编解码器字符串示例:

H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10

MP4Box 似乎返回一个可与 MediaSource API 一起使用的编解码器字符串,但仅适用于 MP4 视频文件,对其他格式不返回任何内容。

MP4Box 返回的编解码器字符串示例:

video/mp4; codecs="avc1.640028,mp4a.40.2

我正在寻找一种方法或模块来可靠地查找视频的视频编解码器信息。我需要在请求视频时查找编解码器,视频可以是任何格式。该格式甚至可能与 MediaSource API 不兼容,或者根本无法在浏览器中播放。我不会提前知道这些信息。

(可能 MediaSource API 不是我想要做的事情的最佳选择。这本质上是一个像 Plex 这样的视频流应用程序,所以媒体可以是多种不同的格式,并且信息不会提前知道)

【问题讨论】:

    标签: javascript node.js html5-video codec media-source


    【解决方案1】:

    如果您使用 ffmpeg 信息,它将返回有关正在使用的编解码器的信息 - 例如(Big Bug Bunny 示例):

    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
    
    Metadata:
    
    major_brand : mp42
    
    minor_version : 1
    
    compatible_brands: mp42avc1
    
    creation_time : 2010-02-09T01:55:39.000000Z
    
    Duration: 00:01:00.10, start: 0.000000, bitrate: 733 kb/s
    
    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 65 kb/s (default)
    
    Metadata:
    
    creation_time : 2010-02-09T01:55:39.000000Z
    
    handler_name : Apple Sound Media Handler
    
    Stream #0:1(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 640x360, 612 kb/s, 23.96 fps, 24 tbr, 600 tbn, 1200 tbc (default)
    
    Metadata:
    
    creation_time : 2010-02-09T01:55:39.000000Z
    
    handler_name : Apple Video Media Handler
    
    Stream #0:2(eng): Data: none (rtp / 0x20707472), 45 kb/s
    
    Metadata:
    
    creation_time : 2010-02-09T01:55:39.000000Z
    
    handler_name : hint media handler
    
    Stream #0:3(eng): Data: none (rtp / 0x20707472), 5 kb/s
    
    Metadata:
    
    creation_time : 2010-02-09T01:55:39.000000Z
    
    handler_name : hint media handler
    

    这将为您提供视频编解码器和容器 - 在本例中为 avc1 和 mp4a。我认为您会发现这足以满足您的需求 - 即您不需要版本号。

    nodejs 有各种 ffmpeg 包装器,还有更高级别的抽象库,例如:

    上面的包括一个选项'codec-data'。

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 1970-01-01
      • 2011-12-23
      • 2018-11-09
      • 1970-01-01
      • 2012-07-04
      • 2020-12-03
      • 2017-11-21
      • 2015-09-12
      相关资源
      最近更新 更多