From 9825336146db4e24a2b028a597be42ad3d0e88ab Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 11 Nov 2019 21:35:16 +0100 Subject: [PATCH] The transmuxer now fully support Dash. --- Kyoo.Transcoder/src/Transcoder.cpp | 13 +++++++------ Kyoo.Transcoder/src/helper.cpp | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Kyoo.Transcoder/src/Transcoder.cpp b/Kyoo.Transcoder/src/Transcoder.cpp index 64211076..b0dbe82f 100644 --- a/Kyoo.Transcoder/src/Transcoder.cpp +++ b/Kyoo.Transcoder/src/Transcoder.cpp @@ -54,11 +54,11 @@ int transmux(const char *path, const char *out_path, const char *stream_uri) av_dump_format(out_ctx, 0, out_path, true); - //std::string val = (std::string)stream_uri + (std::string)"init-stream$RepresentationID$.m4s"; - //av_dict_set(&options, "dirname", val.c_str(), 0); - //av_dict_set(&options, "init_seg_name", val.c_str(), 0); - //val = (std::string)stream_uri + (std::string)"chunk-stream$RepresentationID$-$Number%05d$.m4s"; - //av_dict_set(&options, "media_seg_name", val.c_str(), 0); + std::filesystem::create_directory(((std::string)out_path).substr(0, strrchr(out_path, '/') - out_path).append("/dash/")); + av_dict_set(&options, "init_seg_name", "dash/init-stream$RepresentationID$.m4s", 0); + av_dict_set(&options, "media_seg_name", "dash/chunk-stream$RepresentationID$-$Number%05d$.m4s", 0); + av_dict_set(&options, "streaming", "1", 0); + if (open_output_file_for_write(out_ctx, out_path, &options) != 0) return 1; @@ -80,11 +80,12 @@ int transmux(const char *path, const char *out_path, const char *stream_uri) av_packet_unref(&pkt); } + av_dict_free(&options); av_write_trailer(out_ctx); avformat_close_input(&in_ctx); if (out_ctx && !(out_ctx->oformat->flags & AVFMT_NOFILE)) - avio_closep(&out_ctx->pb); + avio_close(out_ctx->pb); avformat_free_context(out_ctx); delete[] stream_map; diff --git a/Kyoo.Transcoder/src/helper.cpp b/Kyoo.Transcoder/src/helper.cpp index 5ca9f3b2..d390bc0a 100644 --- a/Kyoo.Transcoder/src/helper.cpp +++ b/Kyoo.Transcoder/src/helper.cpp @@ -48,7 +48,7 @@ constexpr enum AVRounding operator |(const enum AVRounding a, const enum AVRound int open_output_file_for_write(AVFormatContext *out_ctx, const char *out_path, AVDictionary **options) { - if (!(out_ctx->flags & AVFMT_NOFILE)) + if (!(out_ctx->oformat->flags & AVFMT_NOFILE)) { if (avio_open(&out_ctx->pb, out_path, AVIO_FLAG_WRITE) < 0) {