小编wou*_*buc的帖子

使用 ffmpeg 生成单个 MPEG-Dash 片段

我一直在尝试实现一个类似 Plex 的视频播放器,可以按需转码任意视频文件,并在网页上使用 MPEG-Dash 播放它。我能够使用dash.js参考实现来实现客户端播放器,因此它将动态地从服务器请求片段(SegmentTemplate在 mpd 文件中使用)。

但我在实时生成这些块时遇到一些问题。Ffmpeg 允许我设置-ss-t定义所需片段的边界,但它们无法在播放器中正常播放,因为它们是“完整”视频文件而不是 Dash 片段。

那么,如何调整 ffmpeg 命令以将我需要的部分转码为 Dash 片段,而无需提前生成整个视频文件的片段?

输入视频文件可以是任何格式,因此不能假设它采用 mp4/dash 兼容的编解码器。因此需要转码(使用ffmpeg或类似工具)。

我当前的 ffmpeg 命令如下所示(经过多次尝试):

ffmpeg -ss 10 -t 5 -i video.mkv -f mp4 -c:a aac -c:v h264 -copyts -movflags empty_moov+frag_keyframe temp/segment.mp4
Run Code Online (Sandbox Code Playgroud)

客户端播放器应该能够缓冲接下来的 X 段,并且用户应该能够查看持续时间栏上的当前位置并寻找不同的位置。因此,将其视为直播并不是一个选择。

video ffmpeg transcoding mpeg-dash

7
推荐指数
2
解决办法
2万
查看次数

打字稿:在可选的第一个泛型之后推断泛型的类型

我有一个具有两种泛型类型的函数,In并且Out

function createTask<
  In extends Record<string, any> = {},
  Out extends Record<string, any>,
>(task : TaskFunction<In, Out>) : Task<In, Out>

type TaskFunction<In, Out> = (args : TaskWrapper<In>) => Out | Promise<Out>; 
// TaskWrapper wraps several other types and interfaces, so args is more than just `In`
Run Code Online (Sandbox Code Playgroud)

此代码当前无法编译,因为Out在可选类型 ( ) 之后不能有必需的泛型类型( In)。

我如何告诉 Typescript 编译器我想让这个函数的用户做三件事之一:

  1. 不要指定任何泛型:createTask(...). 的类型In应该默认为{},并且Out应该从 的返回值中推断出来TaskFunction

  2. 仅指定IncreateTask<A>(...)。如上,Out …

generics type-inference typescript

3
推荐指数
1
解决办法
3678
查看次数