[Helix-client-dev] Recording Real Audio Content
Eric Hyche ehyche at real.comActually what I meant was stepping through rmfformat when you play back the recorded file to see what it doesn't like about it... But to answer your question: rmfformat is only used on the client for http:// and file:// URLs - otherwise, the RTSP stack is used and not a fileformat plugin. Eric ============================================= Eric Hyche (ehyche at real.com) Technical Lead RealNetworks, Inc. > -----Original Message----- > From: John Stirling [mailto:js at reciva.com] > Sent: Wednesday, March 14, 2007 5:48 AM > To: ehyche at real.com > Cc: helix-client-dev at lists.helixcommunity.org > Subject: Re: [Helix-client-dev] Recording Real Audio Content > > I've started trawling through rmfformat... > > I've inserted a few prints to see what the initial file header looks > like in both cases (http:// recorded file and rtsp:// live stream). > > eg in CRealMediaFileFormat::RIFFReadDone > > I can see the data when playing via http:// but nothing seems to come > out on the rtsp:// case. Is the header info transmitted > differently in > the rtsp:// case ? > > John > > > > > Eric Hyche wrote: > > >John, > > > >One thing that jumps out at me off the top > >of my head is the mime type. Here's an rmdump > >output of your recorded live file: > > > > 92 MDPR size= 603 objver=0 > > > > Stream Number: 0 > > Max Bit Rate: 44100 > > Avg Bit Rate: 44100 > > Max Packet Size: 640 > > Avg Packet Size: 640 > > Start Time: 0 > > Preroll: 0 > > Duration: 4527 > > Stream Name: Audio Stream > > Mime Type: audio/x-pn-multirate-realaudio-live > > > >If you are actually recording multirate, then you > >would have multiple MDPR's here, but I only see one. > >So if you are really only recording one stream, I would > >just have the mime type be audio/x-pn-realaudio (and > >drop the "multirate" and the "live" part). > > > >Try fixing that, and if it still won't play, I would > >step through rmfformat and see what is going wrong. > >(I'm almost certain there's something that rmfformat > >doesn't like...) > > > >Eric > > > >============================================= > >Eric Hyche (ehyche at real.com) > >Technical Lead > >RealNetworks, Inc. > > > > > > > >>-----Original Message----- > >>From: John Stirling [mailto:js at reciva.com] > >>Sent: Tuesday, March 13, 2007 11:15 AM > >>To: ehyche at real.com > >>Cc: helix-client-dev at lists.helixcommunity.org > >>Subject: Re: [Helix-client-dev] Recording Real Audio Content > >> > >>I've unpacked via RuleToFlagMap as suggested, but still can't > >>get it to > >>play. When I try to play it via splay it starts up and looks > >>like it's > >>playing but no audio. It then stops after the expected > track duration > >>and closes without reporting any errors. > >> > >>Everything in the header looks ok to me, so not sure why this > >>isn't playing. > >> > >>If you had time to have a quick look to see if you see anything > >>obviously wrong that would be useful > >> > >>This was recorded via a local http server and plays back ok > on splay : > >>http://copper.reciva.com/recorded_1a.ra > >> > >>This was recorded via live stream > >>http://www.bbc.co.uk/radio1/realaudio/media/r1live.ram. It > plays back > >>silence via splay : > >>http://copper.reciva.com/recorded_1b.ra > >> > >> > >>Both recorded files have the following headers > >> > >>1. Real Media File Header (.RMF) > >>2. Properties Header (PROP) > >>3. Media Properties Header (MDPR) (x1) > >>4. Content Description Header (CONT) > >>5. Data Chunk Header (DATA) > >> > >>John > >> > >> > >> > >> > >>Eric Hyche wrote: > >> > >> > >> > >>>That sounds right. > >>> > >>>Eric > >>> > >>>============================================= > >>>Eric Hyche (ehyche at real.com) > >>>Technical Lead > >>>RealNetworks, Inc. > >>> > >>> > >>> > >>> > >>> > >>>>-----Original Message----- > >>>>From: John Stirling [mailto:js at reciva.com] > >>>>Sent: Monday, March 12, 2007 2:00 PM > >>>>To: ehyche at real.com > >>>>Cc: helix-client-dev at lists.helixcommunity.org > >>>>Subject: Re: [Helix-client-dev] Recording Real Audio Content > >>>> > >>>>So if that bit is set, then I write flags = 2 to the > output file ? > >>>>Otherwise flags = 0 ? > >>>> > >>>>John > >>>> > >>>> > >>>> > >>>>Eric Hyche wrote: > >>>> > >>>> > >>>> > >>>> > >>>> > >>>>>John, > >>>>> > >>>>>Since I'm seeing rules like 8 and 9, then this > >>>>>looks like a SureStream file. So you can't always > >>>>>look for rule 0. > >>>>> > >>>>>However, what you can do is look for the > >>>>>stream header property called "RMFF 1.0 Flags" and > >>>>>unpack that into a RuleToFlagMap found in > >>>>>common/include/rule2flg.h. Then once you've > >>>>>unpacked that, then you can simply take the > >>>>>ASM rule number from the IHXPacket plug it > >>>>>into the RuleToFlagMap. If the resulting flag > >>>>>you get out has the keyframe bit set (look > >>>>>for HX_KEYFRAME_FLAG in common/include/hxpacketflags.h), > >>>>>then you know this is a keyframe. > >>>>> > >>>>>Eric > >>>>> > >>>>>============================================= > >>>>>Eric Hyche (ehyche at real.com) > >>>>>Technical Lead > >>>>>RealNetworks, Inc. > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>>-----Original Message----- > >>>>>>From: John Stirling [mailto:js at reciva.com] > >>>>>>Sent: Monday, March 12, 2007 1:29 PM > >>>>>>To: ehyche at real.com > >>>>>>Cc: helix-client-dev at lists.helixcommunity.org > >>>>>>Subject: Re: [Helix-client-dev] Recording Real Audio Content > >>>>>> > >>>>>>I've managed to record a section of a real audio track > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>streamed via a > >>>> > >>>> > >>>> > >>>> > >>>>>>local http server. > >>>>>> > >>>>>>Table below shows: > >>>>>>ASMFlags - reported via pPacket->GetASMFlags() > >>>>>>ASMRule - reported via pPacket->GetASMRuleNumber() > >>>>>>DPHflags - flags written out to DataPacketHeader > >>>>>> > >>>>>>It only works if you wait for ASMRule == 0 > (KEYFRAME_RULE) before > >>>>>>writing the first packet > >>>>>> > >>>>>>| ASMFlags | ASMRule | DPHflags | > >>>>>>--------------------------------- > >>>>>>| 3 | 0 | 2 | > >>>>>>| 3 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 3 | 0 | 2 | > >>>>>>| 3 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>>| 2 | 1 | 0 | > >>>>>> > >>>>>> > >>>>>>I can't get it working on a live stream (eg > >>>>>>http://www.bbc.co.uk/radio1/realaudio/media/r1live.ram) > >>>>>> > >>>>>>| ASMFlags | ASMRule | DPHflags | > >>>>>>--------------------------------- > >>>>>>| 1 | 8 | 2 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 8 | 2 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>>| 1 | 9 | 0 | > >>>>>> > >>>>>> > >>>>>>When I attempt to play the track on a PC it says > 'Player needs to > >>>>>>download new software to play this clip', and then it does an > >>>>>>update on > >>>>>>real player and fails to play the track.If I try to play the > >>>>>>track via > >>>>>>splay it reports error missing plguins : 0x80040011. Is there > >>>>>>something > >>>>>>that prevents recording of live streams ? > >>>>>> > >>>>>>John > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>John Stirling wrote: > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>>Eric Hyche wrote: > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>>John, > >>>>>>>> > >>>>>>>>The ASM flags are not transmitted over the UDP packets. > >>>>>>>>So you have to reconstruct them, and it can be kind of > >>>>>>>>tricky. > >>>>>>>> > >>>>>>>>Just to make sure I understand what you are doing - you have > >>>>>>>>implemented recording by implementing > >>>>>>>>IHXRecordService? So the packets you are recording are > >>>>>>>>getting passed to you from the client engine? Or did > >>>>>>>>you implement this in some other way? > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>Yes, we've implemented IHXRecordService. > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>>Are you writing > >>>>>>>>the file out via IHXFileWriter? > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>No, we're not using IHXFileWriter. > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>>If you implemented it via IHXRecordService, then you > >>>>>>>> > >>>>>>>> > >>may have to > >> > >> > >>>>>>>>fiddle with the ASM flags to > >>>>>>>>get them right. You may want to look at the file > >>>>>>>>datatype-restricted/rm/fileformat/intrstrm.cpp > >>>>>>>>in the method FillOnePacket() to see how the > >>>>>>>>RealMedia file format sets the ASM flags. > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>OK I'll have a look. > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>>Eric > >>>>>>>> > >>>>>>>>============================================= > >>>>>>>>Eric Hyche (ehyche at real.com) > >>>>>>>>Technical Lead > >>>>>>>>RealNetworks, Inc. > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>>>-----Original Message----- > >>>>>>>>>From: helix-client-dev-bounces at helixcommunity.org > >>>>>>>>>[mailto:helix-client-dev-bounces at helixcommunity.org] On > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>Behalf Of > >>>> > >>>> > >>>> > >>>> > >>>>>>>>>John Stirling > >>>>>>>>>Sent: Thursday, March 08, 2007 12:31 PM > >>>>>>>>>To: helix-client-dev at lists.helixcommunity.org > >>>>>>>>>Subject: [Helix-client-dev] Recording Real Audio Content > >>>>>>>>> > >>>>>>>>>We're attempting to record real audio content - we've got > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>a recorded > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>>>>file that looks pretty much like the original file, > >>>>>>>>> > >>>>>>>>> > >>but it won't > >> > >> > >>>>>>>>>play. The problem seems to be with the flags field > in the data > >>>>>>>>>packet headers. How do we know what to set the flags > field to ? > >>>>>>>>> > >>>>>>>>>If we manually edit the recorded file and set the first > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>data packet > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>>>>header Flags field = 2, we at least get some audible > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>content, but > >>>> > >>>> > >>>> > >>>> > >>>>>>>>>there are glitches. > >>>>>>>>> > >>>>>>>>>There is flags information available in > >>>>>>>>>pPacket->GetASMFlags() > >>>>>>>>>pPacket->GetASMRuleNumber() > >>>>>>>>> > >>>>>>>>>but this doesn't seem to match up with the original file: > >>>>>>>>> > >>>>>>>>>1. flags in original file = 0,2 > >>>>>>>>>2. asm flags reported = 2,3 > >>>>>>>>> > >>>>>>>>>Any ideas ? > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>John > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>_______________________________________________ > >>>>>>>>>Helix-client-dev mailing list > >>>>>>>>>Helix-client-dev at helixcommunity.org > >>>>>>>>>http://lists.helixcommunity.org/mailman/listinfo/helix- > >>>>>>>>> > >>>>>>>>> > >>client-dev > >> > >> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>_______________________________________________ > >>>>>>>Helix-client-dev mailing list > >>>>>>>Helix-client-dev at helixcommunity.org > >>>>>>>http://lists.helixcommunity.org/mailman/listinfo/helix- > client-dev > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>> > >>> > >>> > >>> > > > > > > >