[FFmpeg-devel] [PATCH 12/18] avformat/hls: parse ID3 timestamps for elementary audio streams
michaelni at gmx.at
Tue Dec 31 08:15:14 CET 2013
On Tue, Dec 31, 2013 at 08:20:19AM +0200, Anssi Hannula wrote:
> 31.12.2013 06:58, Michael Niedermayer kirjoitti:
> > On Tue, Dec 31, 2013 at 04:46:37AM +0200, Anssi Hannula wrote:
> >> I need communication in the "opposite" direction than AVPackets go, so
> >> they are not a good option AFAICS. AVOptions might do it, though, I
> >> think I was under the impression they are not changeable after-the-fact
> >> so I didn't consider it before...
> >> Basically the custom AVIOContext (which has access to AVFormatContext in
> >> this case) has to inform the demuxer of either position of ID3 data, or
> >> the timestamp recovered from the ID3 data.
> >> Since both subdemuxer .read_packet() (which needs the pos) and
> >> AVIOContext .read_packet() (which knows the pos) have access to
> >> AVIOContext buffer position, I guess the ID3 data buffer position could
> >> be transmitted via AVOptions to the subdemuxer (the ID3 tags appear
> >> usually every 10 seconds or so, so multiple ID3 tags getting buffered in
> >> aviobuf.c should not be an issue).
> >> Now the only issue is how to select the hls-id3-audio subdemuxer...
> >> (a) Have a regular probe() that detects the timestamp in the ID3 tag
> >> in the beginning of the stream (ID3 tag needs to be made available
> >> in AVProbeData for that, though, presently it is just stripped).
> >> Without AVOption assistance the demuxer can only detect the first
> >> ID3 tag, but it would still work quite ok (the rest of the packets
> >> just get generated timestamps).
> >> Then we also either have to
> >> (I) Try to parse every ID3 tag in the probe() to look for the
> >> timestamp, or
> >> (II) Assume ID3 tag is uncompressed and just look for
> >> "com.apple.streaming.transportStreamTimestamp" in it.
> >> (III) Add some lighter-weight option to our ID3 parser to just check
> >> if there is a PRIV tag (and maybe the PRIV tag owner string),
> >> or
> >> (IV) Have av_probe_input_format3() do ID3 parsing and make the
> >> results available in AVProbeData.
> >> (b) Have it without probe() and have HLS demuxer detect the ID3 tag
> >> and select the demuxer manually.
> >> Sounds to me like (a)(IV) might be the winner here, or WDYT?
> > iam happy with anything that works and is reasonable simple & clean
> > i dont think i have a deep enough understanding of id3 tags in hls
> > to really say which is the best solution
> Well, I just realized one issue with (a)(IV), we can't really add fields
> to AVProbeData due to ABI. Maybe without probe() is the way to go then,
> I'll have to think about it...
> I seem to now be hitting "first_dts 895690 not matching first dts 920758
> (pts 920758, duration 2089) in the queue" for every packet after the
> first one (only the first one has actual dts), though...
> I have to quit debugging now for a while, but if you know off-hand what
> I'm doing wrong (if anything - just noticed it is only AV_LOG_DEBUG) it
> would save me some time :)
if the timestamps you get are correct then you can probably ignore it
this message can get printed when nothing is really wrong ...
> I have AVSTREAM_PARSE_FULL and I set pkt->dts for first pkt, and later
> ones have AV_NOPTS_VALUE (the interspersed timestamps aren't yet handled).
> Anssi Hannula
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Into a blind darkness they enter who follow after the Ignorance,
they as if into a greater darkness enter who devote themselves
to the Knowledge alone. -- Isha Upanishad
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 198 bytes
Desc: Digital signature
More information about the ffmpeg-devel