使用媒体源 api 的不同 gop 大小的 mp4 的自适应比特率流

Adaptive bit rate streaming of mp4 of different gop size using media source api

我想要不同 gop 关键帧大小的 mp4 视频的自适应比特率流。

我知道有几个用于多比特率流式传输的选项,即 hls、破折号等

但是我已经在服务器上上传了视频,每个视频都有 360p、480p 和 720p 的 mp4 文件,每个视频都有不同的关键帧间隔。

所以真正的挑战是使用媒体源制作自己的多比特率 mp4 媒体播放器 api

我在各方面都进行了头脑风暴。

我们只能在关键帧处剪切h264

所以我真正的挑战是了解视频的每个关键帧、关键帧块持续时间、偏移持续时间和 mp4 文件中的偏移字节位置。

所以我的问题是如何使用 ffmpeg、ffprobe 或任何其他软件获取这些内容。

1- 关键帧块持续时间

2- 偏移视频时长

3- 偏移视频中的字节位置。

下面的 ffprobe 命令给出了每个关键帧的详细信息,也许这会有所帮助

ffprobe -i "1080p.mp4" -select_streams v -skip_frame nokey -show_frames

谢谢!

运行这个命令,

ffprobe -loglevel error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_dts_time,pkt_pos -of csv "video.mp4"

然后

pkt_dts_time 为 GOP 提供 "Offset video duration"。

pkt_pos 为 GOP 的开始提供 "Offset byte position"。

一个关键帧的pkt_dts_time下一个关键帧pkt_dts_time之间的区别是"Keyframe chunk duration"。

请注意,您只能通过重新编码视频来更改关键帧位置。如果您正在重新编码,输入视频的关键帧位置并不重要。请参阅 https://ffmpeg.org/ffmpeg.html#Advanced-Video-options 下的 -force_key_frames,了解如何在固定位置强制 KF。