初次使用 ffmpeg sdk 开发,如有莽撞,请各位见谅
因为毕设要求,需要 ffmpeg sdk 将 mp4 转封装切分为 m3u8 。从官方示例里拿 remuxing.c 编译尝试了一下,转封装切分倒是成功了,但是 m3u8 的 #EXT-X-MEDIA-SEQUENCE 标签不是从 0 开始,而是从 36 开始,到 40 结束(但是从 0.ts 到 40.ts 都切分出来了);#EXT-X-TARGETDURATION 标签为 5
我想请教一下,如何让它可以从 0 开始呢?切片的时间如何设置呢?
以下是代码 https://gist.github.com/xQmQ/3ce63bf6a234a5b4e28977c2debb35cd
编译 gcc -o remuxing remuxing.c -lavformat -lavcodec -lavutil
执行 ./remuxing input.mp4 output.m3u8
打印的输入文件和输出文件信息 https://gist.github.com/xQmQ/89c83d9da5611de03a4922d95f9f7668
1
Ptu2sha 2022-03-27 21:39:29 +08:00
-hls_list_size 0:列表最大长度
|
2
ec0 2022-03-28 02:33:29 +08:00 1
为什么不直接调用 ffmpeg 呢?
比如 ffmpeg -i input.mp4 output.m3u8 至于分段的问题,那是因为 hls_list_size 参数的默认值是 5 ,也就是说,不管你分了多少段,只取最后 5 段,把这个参数改成 0 就可以取所有段了 还有一个参数 hls_time ,是分段的长度,默认是 2 那么 ffmpeg -i input.mp4 output.m3u8 就相当于 ffmpeg -i input.mp4 -hls_list_size 5 -hls_time 2 output.m3u8 至于你的 remuxing.c ,想设置这两个值的话,可以在 112 行的 ret = avformat_write_header(ofmt_ctx, NULL); 前面插入两行代码 av_opt_set_int(ofmt_ctx->priv_data, "hls_list_size", 0, 0); av_opt_set_int(ofmt_ctx->priv_data, "hls_time", 50, 0); 意思是把 hls_list_size 设置为 0 ,把 hls_time 设置为 50 参考了 https://stackoverflow.com/questions/30912542/mp4-to-hls-using-ffmpeg |
3
xQmQ OP |