【问题标题】:ffmpeg hls stream to nginx webdav. Remove old segmentsffmpeg hls 流到 nginx webdav。删除旧段
【发布时间】:2022-01-24 12:08:21
【问题描述】:

我正在尝试将 mp4 文件循环流式传输到我的 nginx 服务器。我需要删除旧段:

ffmpeg -re -stream-loop -1 -i /data/samples/BigBuckBunny.mp4 -c copy -f hls -hls_time 5 -hls_flags delete_segments -hls_list_size 5 http://127.0.0.1:8080/upload/stream.m3u8

Everythink 没问题,但是当 ffmpeg 尝试删除旧段时,我在 nginx 中遇到了这个错误:

[error] 22#22: *73174 DELETE with body 不受支持,客户端: 127.0.0.1,服务器:_,请求:“DELETE /upload/stream16.ts HTTP/1.1”,主机:“127.0.0.1:8080”

我的 nginx 配置:

location /upload {
        root /data/live;
        dav_access user:rw group:rw all:rw;
        dav_methods PUT DELETE MKCOL COPY MOVE;
        create_full_put_path on;
        charset utf-8;
        autoindex on;   }

ffmpeg 4.4.1

nginx 1.21.4

我做错了什么?

【问题讨论】:

    标签: nginx ffmpeg http-live-streaming webdav


    【解决方案1】:

    似乎 hls muxer 基础的 ffmpeg http muxer 默认为分块传输编码。发出 DELETE 请求时没有正文,但 ffmpeg 仍然使用单个零长度块发出请求。

    nginx 中的错误消息可能会更有帮助。确实,它不支持带有 body 的 webdav DELETE 请求,但它也不支持标记为分块传输编码的 DELETE 请求,无论是否有 body(参见:https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_dav_module.c#L315),因此会出错。

    看起来应该可以使用 chunked_post 选项在 ffmpeg 中禁用此行为,但它似乎不起作用。不确定这是否是一个错误,或者它似乎有点像黑客。

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 2015-01-29
      • 2015-05-24
      • 1970-01-01
      • 2021-09-14
      • 2016-08-30
      • 2020-08-20
      • 1970-01-01
      • 2017-11-23
      相关资源
      最近更新 更多