[Live-devel] Fw: using live555 as a client to receive 1920x1080 H264 over rtsp
Mark McCormack
mark_jj_mccormak at yahoo.co.uk
Wed Mar 13 02:47:51 PDT 2013
Firstly, I'm loving the live555 libraries, if you're reading Ross - a big thank you for making this open source! I've learnt a lot about the technologies from running up and debugging through the source code :o)
I've been using the RTSP client of live555 to receive a 'full-hd' stream of H264 encoded video over RTSP, sent by VLC (2.0.5). I have been using the NAL units sent from live555 (via H264VideoRTPSource) and passing them directly (no packetizer or grouper e.g, just prefixing the start code) to a Media Foundation H264 decoder. This worked perfectly, so then I changed decoder to avcodec (ffmpeg libraries) and the same video
source has corrupted decoder output (sort of grey smudges with bits of the actual frames in).
I've been reading through the live555 code and searching through posts on forums to try and see if this is
a issue with live555 or the av decoder. FYI, the same RTSP stream works in VLC as client, but *only* with the use of a H264 packetizer in between the RTSP and decoder modules. What I see if I WireShark the RTP packets is what looks like several NAL units per timestamp, and when I debug VLC I notice these are "collected" by the packetizer before being presented to avcodec, but my code just passes these one by one to avcodec.
Then I found this post, which seemed to indicate the person asking the question was seeing H264 over RTP with a similar nature:
http://stackoverflow.com/questions/6756770/libavcodec-how-to-tell-end-of-access-unit-when-decoding-h-264-stream
So as an experiment I have put some extra code in my RTPSink which collects these NAL units together based on the RTP timestamp and then I pass this collection to the decoder. This appears to work perfectly with both avcodec and the media foundation h264
decoder.
I've sent a lot of other H264 streams fine from VLC, but only the full-hd ones seem to need this "collection" method in my live555-based client. These other streams play just fine using avcodec just passing the NAL units directly to the decoder.
I'm not asking VLC to re-encode the footage just read the .mov file (H264/AAC) and serve it up as RTSP - which makes me wonder if the source file was encoded in a non-standard way, somehow fragmenting the NAL units or maybe splitting them down because the units are so large being for full hd?
I'm happy enough leaving the collection method in my RTSP client, maybe perhaps just for H264, but I was wondering if this is masking a problem with something else, or maybe collecting by timestamp isn't a good idea for some reason?
Thanks in advance for any suggestions,
Mark.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.live555.com/pipermail/live-devel/attachments/20130313/4266d132/attachment-0001.html>
More information about the live-devel
mailing list