Opened 11 months ago
Last modified 11 months ago
#10364 new enhancement
Missing metadata in chained ogg/flac streams
| Reported by: | toots | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | avformat |
| Version: | unspecified | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description (last modified by )
Reproduction steps for this bug are similar to https://trac.ffmpeg.org/ticket/10363
How to reproduce:
- Create two short ogg/opus files:
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -c:a flac -metadata title="test title" /tmp/test.ogg ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -c:a flac -metadata title="test title 2" /tmp/test2.ogg
- Send a stream to a icecast server
Unfortunately, I couldn't find a way to send a chained ogg bitstream using ffmpeg CLI. It seems to always send a single stream so I used ices (https://icecast.org/ices/)
(Doc on ogg chained bitstreams: https://xiph.org/ogg/doc/oggstream.html)
echo /tmp/test.ogg > /tmp/test.txt echo /tmp/test2.ogg >> /tmp/test.txt
Ices config:
<?xml version="1.0"?>
<ices>
<background>0</background>
<consolelog>1</consolelog>
<stream>
<input>
<module>playlist</module>
<param name="type">basic</param>
<param name="file">/tmp/test.m3u</param>
<param name="once">0</param>
</input>
<instance>
<hostname>localhost</hostname>
<port>8000</port>
<password>hackme</password>
<mount>/test.ogg</mount>
<yp>0</yp>
</instance>
</stream>
</ices>
Finally: ices /tmp/ices.xml
- Use the attached program to read the stream:
cc flac_chained_metadata.c -g -lavformat -lavutil -o flac_chained_metadata ./flac_chained_metadata http://localhost:8000/test.ogg
Output:
encoder=Lavc60.3.100 libopus;Lavc60.3.100 libopus;Lavc60.3.100 libopus title=test title ....
Expected:
Title should alternate between "test title" and "test title 2"
Solution: add metadata parsing in libavformat/oggparseflac.c:
+static int flac_packet(AVFormatContext *s, int idx)
+{
+ struct ogg *ogg = s->priv_data;
+ struct ogg_stream *os = ogg->streams + idx;
+ int ret;
+
+ if (os->psize > 4 && (*(os->buf + os->pstart) & 0x7F) == FLAC_METADATA_TYPE_VORBIS_COMMENT) {
+ AVStream *st = s->streams[idx];
+ av_dict_free(&st->metadata);
+ ret = ff_vorbis_stream_comment(s, st, os->buf + os->pstart + 4,
+ os->psize - 4);
+
+ if (ret < 0) return ret;
+ }
+
+ return 0;
+}
+
+
const struct ogg_codec ff_flac_codec = {
.magic = "\177FLAC",
.magicsize = 5,
.header = flac_header,
+ .packet = flac_packet,
.nb_header = 2,
};
Patch has been sent but needs an update which will be coming soon.
Attachments (1)
Change History (2)
by , 11 months ago
| Attachment: | flac_chained_metadata.c added |
|---|
comment:1 by , 11 months ago
| Description: | modified (diff) |
|---|


