No data from the VND.ONVIF.METADATA subsession
2013-05-18 21:42:34 GMT
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
>> I think MediaSession::initializeWithSDP() is not parsing first SDP line (which is usually v=0, though unused).
> No, that is incorrect. The existing code works correctly, parsing all SDP lines. You're on a 'wild goose chase'.
Perhaps I miss something, but the following spy shows that first SDP
line is not analyzed.
//##### We should really check for:
// - "a=control:" attributes (to set the URL for aggregate control)
// - the correct SDP version (v=0)
if (sdpLine[0] == 'm') break;
+fprintf( stderr, "Parsing %.3s\n", sdpLine );
// Check for various special SDP lines that we understand:
Anyway, I had to modify Client MediaSession & MediaSubsession classes in
order to be able to extend SDP attributes in derived class (as I exposed
you some weeks ago).
Here is the patch, including previous correction (is there a preferred
way to publish code changes to fulfill the LGPL ?).
diff -r 586a4d995691 -r 9b2ceb7000ee liveMedia/MediaSession.cpp
--- a/liveMedia/MediaSession.cpp mer. sept. 12 13:13:54 2012 +0200
+++ b/liveMedia/MediaSession.cpp ven. mai 17 12:27:20 2013 +0200
<at> <at> -102,25 +102,23 <at> <at>
if (sdpDescription == NULL) return False;
// Begin by processing all SDP lines until we see the first "m="
- char const* sdpLine = sdpDescription;
- char const* nextSDPLine;
+ char const* sdpLine;
+ char const* nextSDPLine = sdpDescription;
while (1) {
+ sdpLine = nextSDPLine;
+ if (sdpLine == NULL) break; // there are no m= lines at all
if (!parseSDPLine(sdpLine, nextSDPLine)) return False;
+
//##### We should really check for:
// - "a=control:" attributes (to set the URL for aggregate control)
// - the correct SDP version (v=0)
if (sdpLine[0] == 'm') break;
- sdpLine = nextSDPLine;
- if (sdpLine == NULL) break; // there are no m= lines at all
// Check for various special SDP lines that we understand:
if (parseSDPLine_s(sdpLine)) continue;
if (parseSDPLine_i(sdpLine)) continue;
if (parseSDPLine_c(sdpLine)) continue;
- if (parseSDPAttribute_control(sdpLine)) continue;
- if (parseSDPAttribute_range(sdpLine)) continue;
- if (parseSDPAttribute_type(sdpLine)) continue;
- if (parseSDPAttribute_source_filter(sdpLine)) continue;
+ if (parseSDPAttributes(sdpLine)) continue;
}
while (sdpLine != NULL) {
<at> <at> -207,13 +205,7 <at> <at>
// Check for various special SDP lines that we understand:
if (subsession->parseSDPLine_c(sdpLine)) continue;
if (subsession->parseSDPLine_b(sdpLine)) continue;
- if (subsession->parseSDPAttribute_rtpmap(sdpLine)) continue;
- if (subsession->parseSDPAttribute_control(sdpLine)) continue;
- if (subsession->parseSDPAttribute_range(sdpLine)) continue;
- if (subsession->parseSDPAttribute_fmtp(sdpLine)) continue;
- if (subsession->parseSDPAttribute_source_filter(sdpLine)) continue;
- if (subsession->parseSDPAttribute_x_dimensions(sdpLine)) continue;
- if (subsession->parseSDPAttribute_framerate(sdpLine)) continue;
+ if (subsession->parseSDPAttributes(sdpLine)) continue;
// (Later, check for malformed lines, and other valid SDP
lines#####)
}
<at> <at> -330,6 +322,16 <at> <at>
return False;
}
+// new virtual method. Must be called by derived method.
+Boolean MediaSession::parseSDPAttributes(char const* sdpLine) {
+ // Check for various special SDP lines that we understand:
+ if (parseSDPAttribute_control(sdpLine)) return True;
+ if (parseSDPAttribute_range(sdpLine)) return True;
+ if (parseSDPAttribute_type(sdpLine)) return True;
+ if (parseSDPAttribute_source_filter(sdpLine)) return True;
+ return False;
+}
+
Boolean MediaSession::parseSDPAttribute_type(char const* sdpLine) {
// Check for a
"a=type:broadcast|meeting|moderated|test|H.332|recvonly" line:
Boolean parseSuccess = False;
<at> <at> -919,6 +921,18 <at> <at>
return sscanf(sdpLine, "b=AS:%u", &fBandwidth) == 1;
}
+// new virtual method. Must be called by derived method.
+Boolean MediaSubsession::parseSDPAttributes(char const* sdpLine) {
+ if (parseSDPAttribute_rtpmap(sdpLine)) return True;
+ if (parseSDPAttribute_control(sdpLine)) return True;
+ if (parseSDPAttribute_range(sdpLine)) return True;
+ if (parseSDPAttribute_fmtp(sdpLine)) return True;
+ if (parseSDPAttribute_source_filter(sdpLine)) return True;
+ if (parseSDPAttribute_x_dimensions(sdpLine)) return True;
+ if (parseSDPAttribute_framerate(sdpLine)) return True;
+ return False;
+}
+
Boolean MediaSubsession::parseSDPAttribute_rtpmap(char const* sdpLine) {
// Check for a "a=rtpmap:<fmt> <codec>/<freq>" line:
// (Also check without the "/<freq>"; RealNetworks omits this)
diff -r 586a4d995691 -r 9b2ceb7000ee liveMedia/include/MediaSession.hh
--- a/liveMedia/include/MediaSession.hh mer. sept. 12 13:13:54 2012 +0200
+++ b/liveMedia/include/MediaSession.hh ven. mai 17 12:27:20 2013 +0200
<at> <at> -103,6 +103,7 <at> <at>
Boolean parseSDPLine_s(char const* sdpLine);
Boolean parseSDPLine_i(char const* sdpLine);
Boolean parseSDPLine_c(char const* sdpLine);
+ virtual Boolean parseSDPAttributes(char const* sdpLine);
Boolean parseSDPAttribute_type(char const* sdpLine);
Boolean parseSDPAttribute_control(char const* sdpLine);
Boolean parseSDPAttribute_range(char const* sdpLine);
<at> <at> -284,6 +285,7 <at> <at>
Boolean parseSDPLine_c(char const* sdpLine);
Boolean parseSDPLine_b(char const* sdpLine);
+ virtual Boolean parseSDPAttributes(char const* sdpLine);
Boolean parseSDPAttribute_rtpmap(char const* sdpLine);
Boolean parseSDPAttribute_control(char const* sdpLine);
Boolean parseSDPAttribute_range(char const* sdpLine);
Regards
E. HEURTEL
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
Hi,
I'm streaming an H264 movie using live555. I figured out you need an SDP file in order to play the stream in VLC, so I built one and was able to play my stream. The problem is, after I upgraded my VLC to 2.0.5, the VLC won't play my stream.
The SDP file I use is:
v=0
o=- 1277647151953158 1 IN IP4 190.40.14.100
s=Session streamed by "testH264VideoAudioStreamer"
i=test-h264-mux.mpg
t=0 0
a=tool:LIVE555 Streaming Media v2007.05.24
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=source-filter: incl IN IP4 * 190.40.14.100
m=video 8554 RTP/AVP 96
c=IN IP4 190.40.15.10/7
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; profile-level-id=64001f;sprop-parameter-sets=Z2QAH6zZQLQ9sBEAAAMD6QAB1MCPGDGW,aOvjyyLA;
I know it's not a networking problem. Somehow, the VLC 2.0.5 won't play my SDP file, even though the 1.1.11 version of VLC can play it.
The VLC 2.0.5 says: "live555 error: no data received in 10s, aborting"
This could possibly be a problem in VLC as if I stream the movie through VLC (instead of live555) I can't see the movie also (same problem).
After further examination, I found a workaround: I've discovered that the VLC 2.0.5 can stream the H.264 movie (any movie basically) in a method called RTP / MPEG Transport Stream. If I stream through VLC the H.264 movie, I can play it well in VLC 2.0.5 (without the need in an SDP file). Is there a streaming method like this in the live555 that I can choose to stream in (the SDP packets of VLC says it's MP2T)?
Is something missing in my SDP? Or Is there an option in live555 that can stream H264 as MPEG Transport Stream?
Any help would be much appreciated.
Thanks,
Guy.
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
int fNumChannels =1;
int fBitsPerSample = 16;
int fSamplingFrequency = 8000;
unsigned fPlayTimePerSample = 1e6/(double)fSamplingFrequency;
unsigned bytesPerSample = (fNumChannels*fBitsPerSample)/8;
fDurationInMicroseconds =(unsigned)((fPlayTimePerSample*fFrameSize)/bytesPerSample);
-----
The fDurationInMicroseconds works out to 500000 microseconds, which would make sense as each buffer returned from the ios AudioQueue is about 0.5 seconds.
I'll paste some output from VLC. If anyone can point me in the right direction to correct my error here I'd appreciate it immensely.
FYI, I'll be posting this code publicly once it's working for all to use.
Thanks so much for your time, and the hard work on an excellent library.
Best regards,
Braden Ackerman
VLC complains like this:
main warning: timing screwed, stopping resampling
main warning: buffer too late (179500), up-sampling
main warning: buffer way too late (358875), dropping buffer
main warning: buffer way too late (230875), dropping buffer
main warning: buffer way too late (356000), dropping buffer
main warning: buffer way too late (228000), dropping buffer
main warning: buffer way too late (356000), dropping buffer
main warning: buffer way too late (228000), dropping buffer
main warning: buffer way too late (356000), dropping buffer
main warning: buffer way too late (347500), dropping buffer
main warning: buffer way too late (219500), dropping buffer
main warning: buffer way too late (347500), dropping buffer
main warning: buffer way too late (219500), dropping buffer
main warning: buffer way too late (347500), dropping buffer
main warning: buffer way too late (219500), dropping buffer
main debug: audio output is starving (-720558), playing silence
main warning: buffer way too late (322098), dropping buffer
main warning: buffer way too late (194098), dropping buffer
main warning: buffer way too late (322098), dropping buffer
main warning: buffer way too late (194098), dropping buffer
main warning: buffer way too early (-177606), clearing queue
main warning: timing screwed, stopping resampling
main warning: buffer too early (-51609), down-sampling
main warning: timing screwed, stopping resampling
main warning: buffer too late (128016), up-sampling
main warning: buffer way too early (-231484), clearing queue
main warning: timing screwed, stopping resampling
main warning: buffer way too late (245727), dropping buffer
main warning: buffer too late (117727), up-sampling
main warning: buffer way too late (297227), dropping buffer
main warning: buffer way too early (-126440), clearing queue
main warning: timing screwed, stopping resampling
main warning: buffer way too late (195604), dropping buffer
main warning: buffer too late (67604), up-sampling
main warning: audio output out of sync, adjusting dates (-44447 us)
main warning: computed PTS is out of range (36360), clearing out
main warning: timing screwed, stopping resampling
main warning: not synchronized (-44445 us), resampling
main warning: buffer too early (-44445), down-sampling
main debug: audio output is starving (-971888), playing silence
rtp warning: 1 packet(s) lost
main debug: End of audio preroll
rtp warning: 1 packet(s) lost
main debug: End of audio preroll
main warning: resampling stopped after 1060698 usec (drift: 0)
main warning: buffer too late (179500), up-sampling
rtp warning: 1 packet(s) lost
rtp warning: 1 packet(s) lost
main debug: End of audio preroll
main warning: resampling stopped after 894671 usec (drift: -179375)
rtp warning: 1 packet(s) lost
main debug: End of audio preroll
main warning: buffer too late (179500), up-sampling
main warning: buffer way too early (-370330), clearing queue
main warning: timing screwed, stopping resampling
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
Dear Ross,
I am using the LIVE555 Frame work for the IP camera streaming.
Basically camera is set for a frame rate and resolution. I can set these parameters in the camera web page.
But would like to stream the camera with my own framerate and resolution, this will be decided dynamically.
I am using the RTSPClient class to establish the connection.
It will be great if you can guide me to handle this scenario.
Is there any facility or mechanism in the LIVE55 framework to do this?
Thanks and Regards,
Giri
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
I just thought I'd bring up a couple of minor code issues that I recently ran into. 1. config.armlinux has carriage return line feed line endings and none of the other config files have this. Normally I wouldn't care but my automated build system uses quilt and patch to add -D defines to the compile options and patch under cygwin has problems with this type of line ending. I can work around it but it is annoying and it took me a while to figure out what the problem was. 2. Why is Boolean a #define, for MSC and BORLAND compilers this is really bad form. Currently it is causing me problems with boost template code that uses Boolean for a typename in a template, can it be a typedef? 3. What is the deal with header files directly in liveMeda (i.e. not in liveMedia/include) I would assume that we are not supposed to use them but one of my developers recently used the BitVector.hh header, which seems reasonably general purpose should it be moved to the include directory? Thanks, Matt S.
Does live555 support SRTP?
Regards,
Yogesh.
_______________________________________________ live-devel mailing list live-devel <at> lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel
Hello live555 Support,
I work for VBrick Systems and VLC is popular with our streaming appliance customers. We've received
several requests to make VBrick's H.264 live streaming appliance SAPs compatible with the VLC SAP
listener. (VBrick MPEG-2 and Windows Media streaming appliance SAPs are already compatible with VLC.)
Our experiments show that one line in our H.264 SAP is causing the trouble -- the time description line, or "t=0,0".
This is an example of our H.264 SAP message that will not appear on the VLC playlist:
v=0
o=- 0000000000 1 IN IP4 172.22.113.64
s=JohnS-7000 Program 1
i=VBrick Streaming Video
c=IN IP4 239.22.113.66/63
b=AS:8102
a=packetsize:1452
a=packetformat:RAW
a=mux:m2t
a=author:My Author
a=copyright:My Copyright
a=X-StreamID:T2
a=tool:VBrick 3.0.0
t=0,0
m=video 4444 udp 33
a=X-H264_TTSVidV1
m=audio 4444 udp 36
a=X-H264_TTSAudV1
But our experiments show that just a minor modification to move the t=0,0 line above the attribute lines
will get it to appear on the VLC playlist, like this:
v=0
o=- 0000000000 1 IN IP4 172.22.113.64
s=JohnS-7000 Program 1
i=VBrick Streaming Video
c=IN IP4 239.22.113.66/63
b=AS:8102
t=0,0
a=packetsize:1452
a=packetformat:RAW
a=mux:m2t
a=author:My Author
a=copyright:My Copyright
a=X-StreamID:T2
a=tool:VBrick 3.0.0
m=video 4444 udp 33
a=X-H264_TTSVidV1
m=audio 4444 udp 36
a=X-H264_TTSAudV1
The VLC SAP configuration options "Try to parse the announce" and "SAP Strict mode" do not seem to affect
VLC's behavior with our H.264 SAPs.
Unfortunately, we are reluctant to change this on our side because we deliberately moved the "t=0,0" line
in our newer H.264 appliances (as compared to our older MPEG-2 appliances) to achieve better alignment
with Section 5 of RFC 4566:
Some lines in each description are REQUIRED and some are OPTIONAL,
but all MUST appear in exactly the order given here (the fixed order
greatly enhances error detection and allows for a simple parser).
OPTIONAL items are marked with a "*".
Session description
v= (protocol version)
o= (originator and session identifier)
s= (session name)
i=* (session information)
u=* (URI of description)
e=* (email address)
p=* (phone number)
c=* (connection information -- not required if included in
all media)
b=* (zero or more bandwidth information lines)
One or more time descriptions ("t=" and "r=" lines; see below)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
Zero or more media descriptions
Time description
t= (time the session is active)
r=* (zero or more repeat times)
Media description, if present
m= (media name and transport address)
i=* (media title)
c=* (connection information -- optional if included at
session level)
b=* (zero or more bandwidth information lines)
k=* (encryption key)
a=* (zero or more media attribute lines)
I posted this information to the VLC developer forum and I was told that in this case the SAP/SDP parsing is
being handled by the live555 library that in integrated with VLC. (VLC version is 2.0.6) Would the live555
supporters consider enhancing their SAP/SDP parser to be more flexible and more compatible with RFC 4566?
Thanks for your help.
Regards,
- John
John Senior | VP of Systems Engineering | VBrick Systems, Inc. | 203-303-0117 | johns <at> vbrick.com<mailto:johns <at> vbrick.com>
RSS Feed49 | |
|---|---|
191 | |
118 | |
167 | |
215 | |
116 | |
93 | |
102 | |
219 | |
156 | |
193 | |
177 | |
172 | |
182 | |
176 | |
128 | |
184 | |
204 | |
199 | |
127 | |
45 | |
113 | |
159 | |
150 | |
67 | |
28 | |
133 | |
57 | |
126 | |
139 | |
149 | |
115 | |
121 | |
62 | |
132 | |
125 | |
60 | |
84 | |
204 | |
100 | |
140 | |
107 | |
106 | |
135 | |
116 | |
117 | |
146 | |
155 | |
130 | |
156 | |
189 | |
119 | |
98 | |
133 | |
176 | |
175 | |
153 | |
127 | |
214 | |
314 | |
179 | |
192 | |
147 | |
134 | |
161 | |
120 | |
121 | |
140 | |
128 | |
116 | |
196 | |
202 | |
196 | |
204 | |
207 | |
229 | |
343 | |
188 | |
171 | |
167 | |
201 | |
187 | |
190 | |
137 | |
117 | |
143 | |
167 | |
141 | |
130 | |
140 | |
133 | |
196 | |
156 | |
164 | |
196 | |
161 | |
199 | |
188 | |
152 | |
123 | |
54 |