Martin Storsjö
e14cdf9990
hlsenc: Calculate the average and actual maximum bitrate of segments
...
Previously, the bitrate advertised in the master playlist would only
be based on the nominal values in either AVCodecParameters bit_rate,
or via AVCPBProperties max_bitrate. On top of this, a
fudge factor of 10% is added, to account for container overhead.
Neither of these bitrates may be known, and if the encoder is
running in VBR mode, there is no such value to be known. And
the container overhead may be more or less than the given
constant factor of 10%.
Instead, calculate the maximum bitrate per segment based on
what actually gets output from the muxer, and average bitrate
across all segments.
When muxing of the file finishes, update the master playlist
with these values, exposing both the maximum (which previously
was a guesstimate based on the nominal values) via
EXT-X-STREAM-INF BANDWIDTH, and the average via
EXT-X-STREAM-INF AVERAGE-BANDWIDTH.
This makes it possible to use the hlsenc muxer with VBR
encodes, for VOD style muxing.
Signed-off-by: Martin Storsjö <martin@martin.st>
2024-07-04 23:33:27 +03:00
Dave Johansen
39878fc504
avformat/hlsenc: Add CHANNELS to EXT-X-MEDIA for Audio
...
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2023-11-12 16:44:47 +08:00
Andreas Rheinhardt
636631d9db
Remove unnecessary libavutil/(avutil|common|internal).h inclusions
...
Some of these were made possible by moving several common macros to
libavutil/macros.h.
While just at it, also improve the other headers a bit.
Reviewed-by: Martin Storsjö <martin@martin.st>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-02-24 12:56:49 +01:00
Andreas Rheinhardt
6c70f89813
avformat/hlsenc, hlsplaylist: Cosmetics
...
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-28 11:18:53 +02:00
Andreas Rheinhardt
c6e73ad2b7
avformat/hlsplaylist: Add const where appropriate
...
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-28 11:18:53 +02:00
Limin Wang
cd8c5e89ba
avformat: add subtitle support in master playlist m3u8
...
Test with the following command for the webvtt subtitle:
$ ./ffmpeg -y -i input_with_subtitle.mkv \
-b✌️ 0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \
-b🅰️ 0 256k \
-c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0🅰️ 0 -map 0:s:0 \
-f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle" \
-master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \
10 -master_pl_publish_rate 10 -hls_flags \
delete_segments+discont_start+split_by_time ./tmp/video.m3u8
Check the master m3u8:
$ cat tmp/master.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitle",NAME="subtitle_0",DEFAULT=YES,URI="video_vtt.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=6056600,RESOLUTION=1280x720,CODECS="avc1.4d4829,mp4a.40.33",SUBTITLES="subtitle"
video.m3u8
Check the result by convert to mkv:
$ ./ffmpeg -strict experimental -i ./tmp/master.m3u8 -c:v copy -c:a mp2 -c:s srt ./test.mkv
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-04-08 23:02:41 +08:00
Limin Wang
75aea52a10
lavf/hlsenc: refine the get_relative_url function to avoid extra malloc for relation path
...
Reviewed-by: Steven Liu <lq@chinaffmpeg.org>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2019-09-02 13:28:08 +08:00
Steven Liu
fa7a6dbd76
avformat/hlsenc: add EXT-X-I-FRAMES-ONLY tag support
...
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2019-06-14 10:53:23 +08:00
Steven Liu
1e03d60054
avformat/hlsenc: add var_stream_map LANGUAGE field string parameter
...
use a:0,agroup:aud_low,default:Yes,language:CHN a:1,agroup:aud_low,language:ENG
a:2,agroup:aud_high,default:YesYes,language:CHN a:3,agroup:aud_high,language:ENG
v:0,agroup:aud_low v:1,agroup:aud_high
create master m3u8 list.
result:
EXTM3U
EXT-X-VERSION:3
EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_aud_low",NAME="audio_0",DEFAULT=YES,LANGUAGE="CHN",URI="out_0.m3u8"
EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_aud_low",NAME="audio_1",DEFAULT=NO,LANGUAGE="ENG",URI="out_1.m3u8"
EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_aud_high",NAME="audio_2",DEFAULT=YES,LANGUAGE="CHN",URI="out_2.m3u8"
EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_aud_high",NAME="audio_3",DEFAULT=NO,LANGUAGE="ENG",URI="out_3.m3u8"
EXT-X-STREAM-INF:BANDWIDTH=1170400,RESOLUTION=640x480,CODECS="avc1.64001e,mp4a.40.2",AUDIO="group_aud_low"
out_4.m3u8
EXT-X-STREAM-INF:BANDWIDTH=3440800,RESOLUTION=640x480,CODECS="avc1.64001e,mp4a.40.2",AUDIO="group_aud_high"
out_5.m3u8
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2019-01-31 16:17:11 +08:00
Vishwanath Dixit
1948b76a1b
avformat/hlsenc: closed caption tags in the master playlist
2018-01-24 11:42:57 +08:00
Karthick Jeyapal
0afa171f25
avformat/hlsenc: Add CODECS attribute to master playlist
2018-01-19 17:03:09 +08:00
Karthick Jeyapal
8fd2bdd072
avformat/hlsplaylist: Audio rendition's name and defaultness made configurable
...
Reviewed-by: Steven Liu <lq@chinaffmpeg.org>
2017-12-29 13:47:12 +08:00
Karthick Jeyapal
9e25fe4204
avformat/hlsenc: Modularized audio rendition playlist write to allow reuse
...
Reviewed-by: Steven Liu <lq@chinaffmpeg.org>
2017-12-29 13:45:31 +08:00
Vishwanath Dixit
d02289c386
avformat/hlsenc:addition of #EXT-X-MEDIA tag and AUDIO attribute
...
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2017-12-23 13:42:00 +08:00
Karthick J
93a0e47876
avformat/hlsenc: set EXT-X-TARGETDURATION use lrint(EXTINF)
2017-12-22 07:43:54 +08:00
Steven Liu
071f47649c
avformat/hlsplaylist: add int type of API ff_hls_write_file_entry
...
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2017-12-04 12:03:37 +08:00
Karthick J
3684b5e56a
avformat/hlsenc: Refactored 'get_int_from_double' function to allow reuse
2017-11-30 10:54:54 +08:00
James Almer
91127355f5
avformat/hlsplaylist: add missing header includes
...
Fixes checkheaders.
Signed-off-by: James Almer <jamrial@gmail.com>
2017-11-29 13:09:23 -03:00
James Almer
85b84e1243
avformat/hlsplaylist: fix header include guard
...
Fixes fate-source
Signed-off-by: James Almer <jamrial@gmail.com>
2017-11-29 13:02:37 -03:00
Karthick J
da49cdf640
avformat/hlsenc: Modularized playlist creation to allow reuse
2017-11-29 19:44:15 +08:00