[FFmpeg-devel] [PATCH] Enable dash output to work when the output isn't a local file

Hendrik Leppkes h.leppkes at gmail.com
Tue Jan 5 14:27:41 CET 2016


On Tue, Jan 5, 2016 at 1:50 PM, Raymond Hilseth <rhi at vizrt.com> wrote:
>
>
> On 04/01/16 17:36, "ffmpeg-devel on behalf of Hendrik Leppkes"
> <ffmpeg-devel-bounces at ffmpeg.org on behalf of h.leppkes at gmail.com> wrote:
>
>>On Mon, Jan 4, 2016 at 3:58 PM,  <rhi at vizrt.com> wrote:
>>> From: Raymond Hilseth <rhi at vizrt.com>
>>>
>>> Signed-off-by: Raymond Hilseth <rhi at vizrt.com>
>>> ---
>>>  libavformat/dashenc.c | 4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
>>> index 4509ee4..378c4e4 100644
>>> --- a/libavformat/dashenc.c
>>> +++ b/libavformat/dashenc.c
>>> @@ -549,7 +549,7 @@ static int write_manifest(AVFormatContext *s, int
>>>final)
>>>      avio_printf(out, "</MPD>\n");
>>>      avio_flush(out);
>>>      avio_close(out);
>>> -    return ff_rename(temp_filename, s->filename, s);
>>> +    return avpriv_io_move(temp_filename, s->filename);
>>>  }
>>>
>>>  static int dash_write_header(AVFormatContext *s)
>>> @@ -856,7 +856,7 @@ static int dash_flush(AVFormatContext *s, int
>>>final, int stream)
>>>          } else {
>>>              ffurl_close(os->out);
>>>              os->out = NULL;
>>> -            ret = ff_rename(temp_path, full_path, s);
>>> +            ret = avpriv_io_move(temp_path, full_path);
>>>              if (ret < 0)
>>>                  break;
>>>          }
>>> --
>>
>>For unknown reasons, url_move(which avpriv_io_move uses) in the "file"
>>protocol depends on unistd.h, which is not available everywhere.
>>So commiting this without making sure file.url_move is available on
>>all systems where ff_rename works would introduce a regression.
>>
>>- Hendrik
>
> Are there any supported platforms other than Windows where unistd.h isnĀ¹t
> available?
>
> As far as I can see, the existing code for dash encoding cannot work on
> Windows, since rename on Windows will fail when the destination file
> already exists, and the manifest file will already exist after the first
> segment has been written.
>

I don't know about DASH, but HLS does the same thing and it works
perfectly fine there even on Windows.
In any case, this is not directly relevant to the patch - it should
keep calling the same functions on local files.

- Hendrik


More information about the ffmpeg-devel mailing list