Commit graph

816 commits

Author SHA1 Message Date
Aleix Conchillo Flaque
e5332535a7 rtsp-stream: add getter for payload type
* gst/rtsp-server/rtsp-stream.c: add new method gst_rtsp_stream_get_pt.

* gst/rtsp-server/rtsp-media.c (pad_added_cb): find real payloader
  element and create the stream with this one instead of the dynpay%d
  element.

  https://bugzilla.gnome.org/show_bug.cgi?id=712396
2013-11-22 11:19:35 +01:00
Sebastian Rasmussen
08160e0913 rtsp-*: Refer to NULL as a constant in comments
Plus one typo fix.

https://bugzilla.gnome.org/show_bug.cgi?id=714988
2013-11-22 09:13:14 +00:00
Sebastian Rasmussen
d1a2853659 rtsp-*: Fix type name typos in comments
* rtsp-auth: Refer to GstRTSPToken, not GstRTSPtoken
  * rtsp-auth: Refer to part of constant name as text
  * rtsp-auth/-permissions/-token: Refer to Permissions not Permission
  * rtsp-session-media: Fix GstRTSPSessionMedia typo
  * rtsp-stream: Fix typo when refering to GstBin

https://bugzilla.gnome.org/show_bug.cgi?id=714988
2013-11-22 09:13:08 +00:00
Tim-Philipp Müller
33c4bdfa01 rtsp-server: sprinkle some allow-none annotations for g-i 2013-11-18 10:47:04 +00:00
Wim Taymans
a106950f70 stream: add method to filter transports
Add a method to safely iterate and collect the stream transports

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=711664
2013-11-18 11:18:15 +01:00
Wim Taymans
b0f609ce7f rtsp: allow NULL func in filters
Passing a null function make the filters return a list of
refcounted objects.
2013-11-15 16:35:05 +01:00
Wim Taymans
b2bc84cdbf address-pool: fix address increment
Use a guint instead of guint8 to increment the address. It's still not
completely correct because a guint might not be able to hold the complete
address range, but that's an enhacement for later.
Add unit test to test improved behaviour.

https://bugzilla.gnome.org/show_bug.cgi?id=708237
2013-11-12 16:54:59 +01:00
Patricia Muscalu
adc02db975 client: allow absolute path in requests
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=711689
2013-11-12 12:21:50 +01:00
Patricia Muscalu
8ce453d97d client: make make_path_from_uri a vmethod 2013-11-12 12:08:06 +01:00
Wim Taymans
8d5ce0d4ee stream: Add functions to get rtp and rtcp sockets
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=710100
2013-11-12 12:04:55 +01:00
Wim Taymans
d443f8546b context: defing a GType for the context
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=710018
2013-11-12 11:21:55 +01:00
Sebastian Pölsterl
e756324490 Fixed several GIR warnings 2013-11-12 11:15:58 +01:00
Wim Taymans
533d237754 auth: small typos 2013-11-12 11:15:46 +01:00
Sebastian Rasmussen
e4509ed92c token: Validate args for gst_rtsp_token_is_allowed
See https://bugzilla.gnome.org/show_bug.cgi?id=710520
2013-11-12 10:38:37 +01:00
Sebastian Rasmussen
c9025a58e1 token: Fix bug when creating empty token
We always want to have a valid GstStructure in the token.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=710520
2013-11-12 10:37:45 +01:00
Wim Taymans
c4ae13dbb5 thread-pool: avoid race in shutdown
If we call g_main_loop_quit before the thread has entered g_main_loop_run, we
don't actually stop the mainloop ever. Solve this race by adding an idle source
to the mainloop that calls the _quit. This way we immediately exit the mainloop
if quit was called before we started it.
2013-11-12 10:28:55 +01:00
Sebastian Rasmussen
4036f210af permissions: Fix refcounting when adding/removing roles
Previously a role that was removed was unreffed twice, and when
replacing an existing role the replaced role was freed while still being
referenced. Both bugs are now fixed.

See https://bugzilla.gnome.org/show_bug.cgi?id=710202
2013-11-12 09:54:04 +01:00
Ognyan Tonchev
7b34d1e915 rtsp-server: Fix socket leak
https://bugzilla.gnome.org/show_bug.cgi?id=710088
2013-11-04 20:08:06 +01:00
Sebastian Dröge
935e8f852d rtsp-session-pool: Make sure session IDs are properly URI-escaped
https://bugzilla.gnome.org/show_bug.cgi?id=643812
2013-10-30 22:16:54 +01:00
Ognyan Tonchev
78e5a9148e thread-pool: Fix thread leak when reusing threads
https://bugzilla.gnome.org/show_bug.cgi?id=709730
2013-10-30 19:01:48 +01:00
Patricia Muscalu
de7be1c9b2 tests: fixed racy behavior in rtspserver tests
https://bugzilla.gnome.org/show_bug.cgi?id=710078
2013-10-15 11:28:27 +02:00
Wim Taymans
d4b8a8249c client: append query string in PAUSE/PLAY/TEARDOWN as well 2013-10-04 06:29:30 +02:00
Jonas Holmberg
1742399e23 client: Add query to control path
If the SETUP url contains a query it must be appended to the control
path so that it matches any already created stream in the media. The
query will also be appended to the session media path.
2013-10-04 06:14:32 +02:00
Wim Taymans
59b53c90c3 rtsp-media: remove old line 2013-10-04 05:48:52 +02:00
Jonas Holmberg
fcf51d3485 stream: Correct control comparison
https://bugzilla.gnome.org/show_bug.cgi?id=709176
2013-10-02 11:57:06 +02:00
Youness Alaoui
917bbfcc20 media: Check dynamically if the pipeline supports seeking
We should not depend on whether or not the pipeline state change
returned NO_PREROLL or not. A media could dynamically change its
element and switch from seekable to non seekable so it's best to test
the seekable nature of the pipeline dynamically when we try to do a seek.
2013-10-02 06:00:10 +02:00
Youness Alaoui
33dc78209c media: Return FALSE if seeking is not supported 2013-10-02 05:57:15 +02:00
Wim Taymans
d138f79da0 rtsp-media: don't seek accurate by default
Accurate seeking is perhaps a little overkill in the most common situation and
causes some formats (mp3) over slow media to seek extremely slowly.
2013-10-01 17:16:11 +02:00
Jonas Holmberg
0cd24e2257 client: Reply 400 if media cannot be constructed
Reply 400 Bad Request instead of 503 Service Unavailable if media
cannot be constructed in SETUP.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=708821
2013-09-26 14:32:43 +02:00
Jonas Holmberg
74b8da9396 client: Send setup reply once only
If find_media() failed in handle_setup_request() two replies was sent.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=708819
2013-09-26 14:25:36 +02:00
Jonas Holmberg
eb03b5c172 server: Emit client-connected signal earlier
Emit client-connected before the client ref is given to a GSource,
otherwise client-connected can be emitted after the client object has
been freed.
2013-09-24 17:36:07 +02:00
Patrick Radizi
7b0ad7c25f addresspool: return reason of failure
Let gst_rtsp_address_pool_reserve_address() return the reason why
the address could not be reserved.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=708229
2013-09-24 17:30:18 +02:00
Jonas Holmberg
e88b71aee4 client: Do not read beyond end of path string
If the setup was done without a control url, make sure we don't try to read the
non-existing control string and crash.
2013-09-19 15:44:26 +02:00
Wim Taymans
b41422bad7 client: Fix RTPInfo header
Refactor the method to make the content_base.
Use the content-base and the control url to construct the RTPInfo
url.
2013-09-17 14:39:44 +02:00
Wim Taymans
4d6c038fc7 client: map url to path only in describe
Only map the request url to a path in the DESCRIBE method. The SDP then
contains the base and control urls that should be used to SETUP/PAUSE/
PLAY/TEARDOWN the media.
2013-09-17 12:21:02 +02:00
Wim Taymans
fe3f63de7c Revert "client: map URL to path in requests"
This reverts commit e3fded2cec.

This is not correct, we only remap the URL to a path in DESCRIBE, the SDP then
contains the base and control urls which are used in the SETUP, PLAY,
PAUSE and TEARDOWN requests.
2013-09-17 11:41:57 +02:00
Wim Taymans
e3fded2cec client: map URL to path in requests 2013-09-16 17:17:35 +02:00
Wim Taymans
952aa309dc mount-points: make vmethod to make path from uri
Make a vmethod to transform an url into a path. The path is then used to lookup
the factory. This makes it possible to also use other bits of the url, such as
the query parameters, to locate the factory.
2013-09-16 17:17:34 +02:00
Ognyan Tonchev
258f63b8ac thread-pool: Add cleanup to wait for the threadpool to finish
Also fix race condition if two threads are asking for the first
thread from the thread pool at once. This would case two internal
GThreadPools to be created.

https://bugzilla.gnome.org/show_bug.cgi?id=707753
2013-09-09 14:36:12 +02:00
Jonas Holmberg
23b3f21595 client: free threadpool
https://bugzilla.gnome.org/show_bug.cgi?id=707638
2013-09-06 20:44:10 +01:00
Jonas Holmberg
19178a413c auth, media, media-factory: unref permissions
https://bugzilla.gnome.org/show_bug.cgi?id=707638
2013-09-06 18:57:55 +01:00
Patricia Muscalu
ff10d24130 rtsp-client: remove query part from content-base string
Make sure that after the control url has been resolved, it's
not a part of the query-string.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=706568
2013-08-23 12:23:06 +02:00
Wim Taymans
1287b5f772 client: don't check url in response
There is no url or method in the response to check
2013-08-23 10:38:43 +02:00
Youness Alaoui
1f84618725 Add handle-response signal for when we receive a GET_PARAMETER response 2013-08-23 10:32:33 +02:00
Youness Alaoui
76cbc7c86c Fix gst_rtsp_server_client_filter, using wrong variable type 2013-08-23 10:29:21 +02:00
Tim-Philipp Müller
3766914a18 rtsp-media-factory-uri: check AAC properly for whether it's parsed or not
For AAC we need to check for framed=true instead of parsed=true.

https://bugzilla.gnome.org/show_bug.cgi?id=701384
2013-08-22 18:39:59 +01:00
Wim Taymans
d74cbf2911 stream: optimize pipeline for protocols
When TCP is not an allowed protocol for the stream, avoid creating the
appsrc/appsink/queue and tee elements.
2013-08-16 17:05:24 +02:00
Wim Taymans
f094256add media: set protocols on streams 2013-08-16 16:34:56 +02:00
Wim Taymans
1a838d6179 client: use protocols supported by stream 2013-08-16 16:20:00 +02:00
Wim Taymans
04d2da4d03 media-factory: allow all protocols 2013-08-16 16:19:27 +02:00
Wim Taymans
cf96774e6d media: configure protocols in new streams 2013-08-16 16:10:43 +02:00
Wim Taymans
a84b71c0f0 stream: add protocols property 2013-08-16 16:08:43 +02:00
Youness Alaoui
cdbb6bcc15 rtsp-media: send state in "new-state" signal
https://bugzilla.gnome.org/show_bug.cgi?id=705110
2013-08-13 16:41:53 +01:00
Wim Taymans
f124d11298 server: add method to iterate clients of server 2013-08-02 17:19:42 +02:00
Youness Alaoui
a95ab4b29e Add vmethod for rtsp-media subclass to access rtpbin 2013-08-02 16:59:04 +02:00
Youness Alaoui
081e6d3204 small documentation fix 2013-08-02 16:58:24 +02:00
Youness Alaoui
7618800088 Do not take range header if range is invalid 2013-08-02 16:58:20 +02:00
Wim Taymans
6ac547cc34 media: add docs for new method 2013-08-02 16:57:26 +02:00
Youness Alaoui
050b16ad84 Add API to rtsp-media set the pipeline's state 2013-08-02 16:53:07 +02:00
Youness Alaoui
5e642c7ef1 Update current position/duration when gst_rtsp_media_get_range_string is called 2013-08-02 16:51:15 +02:00
Wim Taymans
f78a65379c ClientState -> Context
Rename the clientstate to context and put the code in a separate file.
2013-07-22 14:25:04 +02:00
Wim Taymans
25547176be auth: add support for default token
The default token is used when the user is not authenticated and can be used to
give minimal permissions.
2013-07-18 12:27:33 +02:00
Wim Taymans
1a307c707d auth: use defines when possible 2013-07-18 12:27:33 +02:00
Wim Taymans
3dc34af5aa address-pool: improve docs 2013-07-18 12:27:33 +02:00
Wim Taymans
472010666c permissions: add the role to the copy 2013-07-18 12:27:33 +02:00
Olivier Crête
db74d5c559 permissions: Also copy the roles 2013-07-17 19:35:33 -04:00
Olivier Crête
91a32754e3 permissions: Make it build 2013-07-17 19:32:09 -04:00
Wim Taymans
81745b43b4 docs: small fixes 2013-07-16 12:36:56 +02:00
Wim Taymans
041b1b79a1 docs: improve docs 2013-07-16 12:32:51 +02:00
Wim Taymans
d3d7df5a1e address-pool: cleanups
Remove redundant method, improve docs.
2013-07-16 12:32:00 +02:00
Wim Taymans
0a8f5c8892 docs: improve docs 2013-07-15 17:31:35 +02:00
Wim Taymans
fbe0cefae1 permissions: implement _remove_role 2013-07-15 17:12:57 +02:00
Wim Taymans
5e297ea093 permissions: update docs 2013-07-15 17:12:43 +02:00
Wim Taymans
f18f2619e1 auth: add default authorizations
When no auth module is specified, use our table of defaults to look up the
default value of the check instead of always allowing everything. This was
we can disallow client settings by default.
2013-07-15 16:47:07 +02:00
Wim Taymans
7064b9fda7 thread-pool: add more docs 2013-07-15 15:25:00 +02:00
Wim Taymans
0ce4d4d5c7 thread-pool: fix race in thread reuse
If we try to reuse a thread right after we made it stop, we end up using a
stopped thread. Catch this case and only reuse threads that are not stopping.
2013-07-15 14:50:38 +02:00
Wim Taymans
3fe1096fd1 server: add small debug 2013-07-15 14:50:26 +02:00
Wim Taymans
38d91a2bf8 client: support pushed context in handle_request
If we already have a pushed state, reuse it and add our own things. This makes
it easier to write tests.
2013-07-15 11:57:49 +02:00
Wim Taymans
7db2f9f3cf auth: don't auth on methods
Don't authorize on methods anymore but on the resources that we
try to access, this is more flexible.
Move the authorization checks to where they are needed and let the
check return the response on error.
2013-07-15 11:56:06 +02:00
Wim Taymans
692cbc1364 mount-points: add some debug 2013-07-15 11:51:34 +02:00
Wim Taymans
9fe107a96a auth: let the auth module check client_settings
Let the auth module decide if client settings are allowed for the
current client.
2013-07-12 17:07:53 +02:00
Wim Taymans
c4db302559 token: add method to check boolean permission 2013-07-12 17:06:37 +02:00
Wim Taymans
b8c5aa3a6b token: simplify token constructor
Use variable arguments to make easier API.
2013-07-12 16:36:05 +02:00
Wim Taymans
67d0fbc048 media-factory: add convenience API for factory 2013-07-12 16:17:57 +02:00
Wim Taymans
facc91a942 permissions: simplify API a little
Avoid passing GstStructure in the add_role method, use varargs instead
to construct the structure behind the scenes. We can then also use the
structure name as the role and simplify some more logic.
2013-07-12 16:17:15 +02:00
Wim Taymans
a6a8293595 auth: fix typo 2013-07-12 16:01:14 +02:00
Wim Taymans
5cf75e64af auth: handle unauthorized response
Move handling of the unauthorized response to the auth module, it can add
the appropriate headers to request authorization for the required method
much better than the client.
2013-07-12 15:19:29 +02:00
Wim Taymans
7532de687a client: allow for sending any message, not only requests
Change the _send_request() method to _send_message() so that we
can both send requests and replies.
2013-07-12 15:13:48 +02:00
Wim Taymans
9a09d98e6d docs: fix docs 2013-07-12 14:10:13 +02:00
Wim Taymans
4b2e6d88b3 auth: move TLS handling to auth module
Remove the TLS settings on the server and move it to the auth module because
that is where security related bits go.
2013-07-12 12:41:52 +02:00
Wim Taymans
a1e96c2269 client: add state push/pop 2013-07-12 12:38:54 +02:00
Wim Taymans
e1628a0515 client: add connection to state 2013-07-12 12:37:25 +02:00
Wim Taymans
f6674d5c10 mount-points: fix debug 2013-07-11 20:45:11 +02:00
Wim Taymans
7f8fdbc453 thread-pool: we don't require a state 2013-07-11 17:28:04 +02:00
Wim Taymans
c2d4b79b69 server: let context ref the server
So that we don't risk losing the server object early anc crash.
2013-07-11 17:18:58 +02:00
Wim Taymans
0b3644a21b docs: improve docs 2013-07-11 16:57:14 +02:00
Wim Taymans
8b4c9570fa session-pool: make vmethod to create a session
Make a vmethod to create a sessions so that subclasses can create
custom session objects
2013-07-11 16:28:09 +02:00
Wim Taymans
d357fc55af docs: more updates 2013-07-11 12:24:33 +02:00
Wim Taymans
ccceb1de11 docs: update docs 2013-07-11 12:18:26 +02:00
Wim Taymans
6f5a82aed3 thread-pool: fix vmethod invocation 2013-07-10 20:48:47 +02:00
Wim Taymans
8cec0f8a46 thread-pool: store thread type in thread 2013-07-10 20:48:18 +02:00
Wim Taymans
4e9c4d8bb7 client: pass thread from pool to media _prepare
Get a thread from the configured threadpool and pass it to the prepare method of
the media.
2013-07-10 17:09:27 +02:00
Wim Taymans
d1e4baab6c media: Accept a thread in _prepare
Remove out own threadpool handling and use the provided thread and
maincontext for the bus messages and the state changes.
2013-07-10 17:08:14 +02:00
Wim Taymans
01b921e8a6 server: configure client thread pool 2013-07-10 17:07:13 +02:00
Wim Taymans
00997d956f client: add method to configure thread pool 2013-07-10 17:06:36 +02:00
Wim Taymans
27917f4ef3 server: use thread pool
Use the thread pool instead of doing our own thing.
2013-07-10 17:02:58 +02:00
Wim Taymans
25269c7b1a thread-pool: add object to manage threads
Add an object to manage the client and media threads.
2013-07-10 16:47:43 +02:00
Wim Taymans
1a0c7051aa auth: debug authorization check 2013-07-10 15:28:35 +02:00
Wim Taymans
c4c9c873b8 media: start media pipeline in context
Start the media pipeline in the provided context (or our default one
when NULL). This makes sure that we run the bus thread in this context and that
all media threads are children of this context.
2013-07-09 20:44:51 +02:00
Wim Taymans
ca28a46600 factory: pass permissions to media by default 2013-07-09 16:38:39 +02:00
Wim Taymans
d7dec33328 auth: simplify auth checks
Remove client from methods, it's now in the state
Perform the check specified by the string, use the information from the
thread local context.
2013-07-09 16:04:35 +02:00
Wim Taymans
c9d6455ad3 client: add state to current thread
Add the client to the ClientState object.
Place the ClientState on the current thread.
2013-07-09 16:01:29 +02:00
Wim Taymans
0499a1ec7d media: make it possible to set permissions
Make it possible to set permissions on media and media factory objects
2013-07-09 14:33:43 +02:00
Wim Taymans
8f008807ad permissions: add permissions object
Add a mini object to store permissions based on a role.
2013-07-09 14:31:15 +02:00
Wim Taymans
a63f4a2a4c auth: add auth checks
Add an enum with auth checks and implement the checks in the auth object.
Perform the checks from the client.
2013-07-08 16:29:01 +02:00
Wim Taymans
fb7c9b8122 auth: use the token after authentication
After we authenticated a user, keep the Token around in the state.
2013-07-08 11:10:20 +02:00
Wim Taymans
12583e819c media: add optional context for bus messages
Add an optional mainloop to _prepare that will handle the bus messages instead
of always using the shared mainloop.
2013-07-08 11:10:20 +02:00
Wim Taymans
48ff096a25 token: add authorization token
Add a simply miniobject that contains the authorizations. The object contains a
GstStructure that hold all authorization fields. When a user is authenticated,
the auth module will create a Token for the user. The token is then used to
check what operations the user is allowed to do and various other configuration
values.
2013-07-05 20:53:19 +02:00
Wim Taymans
19cffc7999 auth: remove auth from media and factory
Remove the auth object from media and factory. We want to have the RTSPClient
authenticate and authorize resources, there is no need to place another auth
manager on the media/factory.
2013-07-05 20:53:19 +02:00
Wim Taymans
78bc979690 auth: add support for multiple basic auth tokens
Make it possible to add multiple basic authorisation tokens to one authorization
object. Associate with each token an authorization group that will define what
capabilities are allowed.
2013-07-04 14:33:59 +02:00
Wim Taymans
a1e5bde58d client: error out on non-aggregate control
We require aggregate control (for now) for PLAY, PAUSE and TEARDOWN.
2013-07-03 16:15:04 +02:00
Wim Taymans
9182263532 client: rework setup request a little
Cache the media in DESCRIBE based on the longest matching path with the uri
that we can find in the mount points.

Rework the setup request a little to get the media from the session or from
the longest matching path, this way we can derive the control string as
everything after the path instead of hardcoding it.

Find the stream based on the control string and only open a session when all
this can be done.
2013-07-03 15:55:38 +02:00
Wim Taymans
3999bd4e4e media: add method to find a stream by control url 2013-07-03 15:14:39 +02:00
Wim Taymans
d4e8d800c9 stream: add method to check control url of stream 2013-07-03 15:13:45 +02:00
Wim Taymans
5a833f503e session: use path matching for session media
Use a path string instead of a uri to lookup session media in the sessions. Also
use path matching to find the largest possible path that matches.
2013-07-03 12:37:48 +02:00
Wim Taymans
8f79daef5e mount-points: remove useless vmethod
Making lookups in the mount points should not be done with a URL, if there is a
mapping to be done from URL to mount points, we'll need to do it somewhere
else.
2013-07-03 11:10:27 +02:00
Wim Taymans
df08a2dd9e mount-points: improve mount point searching
Use a GSequence to keep track of the mount points.
Match a URL to the longest matching registered mount point. This should be the
URL to perform aggreagate control and the remainder is the stream specific
control part.
Add some unit tests for this.
2013-07-03 10:45:51 +02:00
Sebastian Dröge
a22889ac08 rtsp-server: Allow building of static library 2013-07-03 10:40:48 +02:00
Wim Taymans
714e84d891 sdp: get control string from stream
Use the control string as configured in the stream.
2013-07-02 15:54:43 +02:00
Wim Taymans
2ffb0f69d2 stream: add methods and property to set control string 2013-07-02 14:50:30 +02:00
Wim Taymans
0248775c74 client: cleanups
Rename variables for clarity
Keep media in state when we can
2013-07-02 11:58:02 +02:00
Wim Taymans
a7fe63298c stream: add more support for IPv6
Rename _get_address to _get_multicast_address in GstRTSPStream to
make it clear that this function only deals with multicast.
Make it possible to have both an IPv4 and IPv6 multicast address on
a stream. Give the client an IPv4 or IPv6 address depending on the
address it used to connect to the server.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702002
2013-07-01 16:46:39 +02:00
Wim Taymans
13016309b1 client: fix comment 2013-07-01 15:18:43 +02:00
Wim Taymans
82812988a6 stream: handle failed port allocation
Allow for ipv4 or ipv6 socket allocations to fail. Only report failure if we
can't allocate any family at all. Also keep track of what port families we
allocated.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=703175
2013-07-01 14:47:33 +02:00
Wim Taymans
284a0a5cd1 stream: improve docs 2013-07-01 12:20:50 +02:00
Wim Taymans
5b6cbb4ede stream-transport: remove old if 0 block 2013-07-01 12:04:45 +02:00
Wim Taymans
ffd4b1aaf1 client: add method to filter managed sessions
Add a method to filter the sessions managed by this client connection.

See https://bugzilla.gnome.org/show_bug.cgi?id=703016
2013-06-26 17:19:11 +02:00
Wim Taymans
27a786aa4a client: remove _get_uri() method
Remove the get_uri() method on the client. A client has no uri, the uri
property is an internal property to manage the last cached media for
the client.
2013-06-26 16:32:06 +02:00
Wim Taymans
13ab4905e4 media-factory: fix typo 2013-06-26 16:31:39 +02:00
Ognyan Tonchev
cd4120ef26 rtsp-media: Do not leak the query in default_query_stop
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=703120
2013-06-26 15:42:01 +02:00
Wim Taymans
81c3843ad1 media: don't unlock when conversion fails
Don't unlock the state lock when conversion fails because it was not locked.
2013-06-25 15:46:41 +02:00
Youness Alaoui
0b94f50eab Add query_position and query_stop vmethods to rtsp-media 2013-06-25 15:23:36 +02:00
Youness Alaoui
842f5ad9c4 Fix typo in property install for rtsp-media's time-provider 2013-06-25 15:12:36 +02:00
Wim Taymans
55214d0d52 client: clean some variables
Clean some variables and add some guards to _send_request()
2013-06-25 15:09:13 +02:00
Youness Alaoui
d2dab47085 Add gst_rtsp_client_send_request API
This makes it possible to send arbitrary messages to a client, such as
SET_PARAMETER or GET_PARAMETER
2013-06-25 14:58:17 +02:00
Wim Taymans
aab1198516 media: add _get_element() method
Add method to get the element used when creating the media.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=703008
2013-06-24 23:56:57 +02:00
Wim Taymans
6d69a4ae80 media: fix docs 2013-06-24 23:51:38 +02:00
Aleix Conchillo Flaque
aeaadf0e5e stream: allow access to the rtp session
https://bugzilla.gnome.org/show_bug.cgi?id=703004
2013-06-24 23:42:58 +02:00
Alexander Schrab
c3f8673174 dscp qos support in gst-rtsp-stream
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702645
2013-06-24 14:51:44 +02:00
Wim Taymans
fa1d3354c0 client: also watch newly created session
When we newly created a session, start watching it immediately instead of
on the next request.
2013-06-20 12:20:21 +02:00
Wim Taymans
949f11c643 client: emit new-session when new session is created
Only emit new-session when we created a new session for a client, not when a
client picked up a previous session.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701587
2013-06-20 12:16:07 +02:00
Alexander Schrab
a5490e323b client: handle asterisk as path in requests
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701266
2013-06-20 11:17:29 +02:00
Wim Taymans
23ec78faea media: handle segment query format mismatch
It's possible that the segment query returns with a different format than what
we asked for, handle this case also.
2013-06-20 11:14:31 +02:00
David Svensson Fors
52eb796bec media: use segment stop in collect_media_stats
Use segment stop instead of duration as range end point.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701185
2013-06-20 10:17:32 +02:00
Ognyan Tonchev
d9e245e62e rtsp-media: Do not leak the element in take_pipeline
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702470
2013-06-17 17:18:40 +02:00
Ognyan Tonchev
7e9df0e112 rtsp-client: Make configure_client_transport virtual
This patch makes configure_client_transport virtual. The functionality is
needed to handle some weird clients sending multicast transport settings as url
options.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702173
2013-06-17 16:18:37 +02:00
Ognyan Tonchev
b5f8ff8232 rtsp-client: Make param_set and param_get virtual
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702072
2013-06-17 16:11:40 +02:00
David Svensson Fors
6151072a2e media: convert_range replaces get_range_times
get_range_times worked for handling UTC ranges for seeks, but we also
need to convert back from NPT to the requested unit in
get_range_string. convert_range is now used for both.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702084
2013-06-14 16:11:34 +02:00
Wim Taymans
3dbe0e17d4 sdp: cleanup sdp info
We don't need to pass the proto, we can more easily check a boolean.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702063
2013-06-14 16:06:46 +02:00
Alexander Schrab
f9f994e33d use 0.0.0.0 or :: for c= line instead of server address 2013-06-14 15:58:52 +02:00
Alexander Schrab
275e2d52a4 use local address, not remote, in SDP
See https://bugzilla.gnome.org/show_bug.cgi?id=702063
2013-06-14 15:52:14 +02:00
David Svensson Fors
7efa871c1f media: possibility to override range time conversion
Make it possible to override the conversion from GstRTSPTimeRange to
GstClockTimes, that is done before seeking on the media
pipeline. Overriding can be useful for UTC ranges, where the default
conversion gives nanoseconds since 1900.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701191
2013-06-03 14:29:05 +02:00
Ognyan Tonchev
c5b3066c33 rtsp-server: Expose the use_client_settings API
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=699935
2013-06-03 12:04:44 +02:00
Alexander Schrab
3e119be829 rtspstream: handle both ipv4 and ipv6 clients
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701129
2013-06-03 11:23:40 +02:00
Wim Taymans
17b07d1c0e Revert "rtsp-sdp: Parse width/height from caps and set SDP attribute"
This reverts commit 5fd034ff1a.

We already have a way to place extra attributes in the SDP by using a string
property with prefix x- or a- in the caps.
2013-05-31 15:43:11 +02:00
Wim Taymans
2a0aaa1019 Revert "rtsp-sdp: Parse framerate caps field and set SDP attribute"
This reverts commit d6a4dee036.

We already have a way to place extra attributes in the SDP, just make a string
property in the payloader with a- or x- prefix.
2013-05-31 15:43:11 +02:00
Wim Taymans
cfdf2e6db5 rtsp: place a- and x- properties as attributes
application/x-rtp has properties with a- and x- prefixes that should be
placed as attributes in the SDP for the media instead of being added to the
fmtp.
2013-05-31 15:43:10 +02:00
Wim Taymans
0a285290cb server: add support for TLS
Add methods to set and get a TLS certificate.
Add vmethod to configure a new connection. By default, configure the TLS
certificate in a new connection if needed.
2013-05-31 11:42:36 +02:00
Wim Taymans
531ffca018 server: remove accept_client vmethod
This vmethod is not very useful so remove it.
2013-05-31 11:14:17 +02:00
Wim Taymans
0091339254 server: don't crash on NULL GError 2013-05-30 17:23:51 +02:00
Patricia Muscalu
aa50aac669 rtsp-session-pool: corrected session timeout detection
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701253
2013-05-30 13:13:05 +02:00
Wim Taymans
7526178a09 client: improve debug 2013-05-30 10:52:46 +02:00
Wim Taymans
d638b03ff9 server: refactor connection setup
Let the server accept the socket connection and construct a GstRTSPConnection
from it. Remove the code from the client and let the client only deal with
a fully configure GstRTSPConnection object.

We will need this later when the server will configure the connection for
TLS.
2013-05-30 07:18:22 +02:00
Wim Taymans
7b880231b1 stream: keep the transport object alive
Keep the transport object alive while we have it as qdata on the
source.
2013-05-30 06:49:20 +02:00
Alexander Schrab
c75e1c6b47 rtsp-server: Do not crash on nmapping of server
* generate error when gst_rtsp_connection_accept fails
* do not stop accepting incoming connections because
  accepting a client fails

https://bugzilla.gnome.org/show_bug.cgi?id=701072
2013-05-27 13:20:36 +02:00
Alexander Schrab
e047c9fec1 rtsp-client: ipv4 adress should not be marked ipv6 even if socket is ipv6
https://bugzilla.gnome.org/show_bug.cgi?id=700953
2013-05-27 11:15:50 +02:00
Sebastian Rasmussen
d6a4dee036 rtsp-sdp: Parse framerate caps field and set SDP attribute
The SDP attribute and its format is described in RFC4566.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=700747
2013-05-23 21:02:58 +02:00
Sebastian Rasmussen
5fd034ff1a rtsp-sdp: Parse width/height from caps and set SDP attribute
The SDP attribute and its format is described in RFC6064.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=700747
2013-05-23 21:02:50 +02:00
Patricia Muscalu
0951aa37e1 rtsp-sdp: add bandwidth line
https://bugzilla.gnome.org/show_bug.cgi?id=699220
2013-05-15 12:36:32 +02:00
Wim Taymans
573b10bc83 media: release lock when removing fakesink 2013-04-23 10:28:35 +02:00
Wim Taymans
0ddd98bfa6 stream: set elements to NULL before removing
When removing a stream, set the elements to NULL first. This avoids
element-is-not-in-NULL-state errors when we dispose the elements.
2013-04-23 10:28:34 +02:00
Wim Taymans
b80b8824be media: listen to pad-removed signals
Listen to the pad-removed signal and remove the stream associated with the
removed pad.
Add signal to be notified of the removed pad.
Remove the fakesink in unprepare()
Fix signatures of the signal methods
2013-04-22 17:34:37 +02:00
Ognyan Tonchev
00291e5285 stream: add method to get the srcpad 2013-04-22 17:32:31 +02:00
Ognyan Tonchev
a26b06cc69 media: disconnect from signal handlers in unprepare()
We connected to the pad-added and no-more-pads signals in prepare() so
we need to disconnect from them in unprepare().

See https://bugzilla.gnome.org/show_bug.cgi?id=698376
2013-04-22 16:40:48 +02:00
Ognyan Tonchev
9b31fcc7f8 media: don't free streams array
Don't free the streams array in the unprepare() method, they were not
added in prepare().

See https://bugzilla.gnome.org/show_bug.cgi?id=698376
2013-04-22 16:25:17 +02:00
Ognyan Tonchev
0bdff0161c media: don't unref the pipeline in unprepare
Unprepare() should undo what prepare() does. Because the pipeline is
not created in prepare(), we should not unref it in unprepare()
2013-04-22 16:19:35 +02:00
Ognyan Tonchev
6081f91351 stream: clear session and caps for reuse
Set the session and caps to NULL after unref otherwise we might unref
them again later.

See https://bugzilla.gnome.org/show_bug.cgi?id=698376
2013-04-22 16:09:22 +02:00
David Svensson Fors
bba7c4042d client: send out teardown signal before tearing down
The advantage is that in the signal handler you get direct access to
information about what streams are about to get torn down (in the
GstRTSPClientState).

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=697686
2013-04-15 12:21:54 +02:00
David Svensson Fors
825d6f0b51 client: expose connection
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=697546
2013-04-15 12:17:34 +02:00
Wim Taymans
a64cb68164 media: add method to get the base_time of the pipeline
Together with a shared clock, this base-time could eventually be sent to
the client so that it can reconstruct the exact running-time of the clock
on the server.
2013-04-12 11:34:38 +01:00
Wim Taymans
36ff679558 media: add GstNetTimeProvider support
Add a property to let the media provide a GstNetTimeProvider for its clock.
Make methods to get the clock and nettimeprovider
Add a x-gst-clock property to the SDP with the IP and port number of the nettime
provider and also the current time of the clock. This should make it possible
for (GStreamer) clients to slave their clock to the server clock.
2013-04-09 22:38:44 +02:00
Wim Taymans
95bf53513f media: wait for buffering to complete
Wait for buffering to complete before changing the state to the target state.
2013-04-09 20:39:58 +02:00
Wim Taymans
ec0718d7c9 media: small cleanup 2013-04-09 20:11:35 +02:00
Olivier Crête
91210f40f2 rtsp-media-factory: g_signal_connect_object is not thread safe, can't use it here
Instead use a GWeakRef which is safe to use

This is a known GLib bug, see:
https://bugzilla.gnome.org/show_bug.cgi?id=667145
2013-03-22 18:59:50 -04:00
Olivier Crête
c18eafbb24 rtsp-media/client: Reply to PLAY request with same type of Range
Remember the type of Range from the PLAY request and use the same type for
the reply.
2013-03-22 15:53:06 +01:00
Patricia Muscalu
8a08fddb41 rtsp-client: expose uri 2013-03-18 23:44:38 +00:00
Olivier Crête
5a39e25949 stream: Select unicast address from pool if appropriate 2013-03-11 11:07:20 +01:00
Olivier Crête
a797cbde06 stream: Properties are always there in Gst 1.0 2013-03-11 11:07:20 +01:00
Olivier Crête
27a057962c address-pool: Verify that multicast addresses are used for multicast and vice-versa 2013-03-11 11:07:20 +01:00
Olivier Crête
d06e68abd1 address-pool: Add unicast addresses 2013-03-11 11:07:20 +01:00
Olivier Crête
4c61c6d308 rtsp-server: Limit the number of threads per server instance
If we exceed the maximum, just round robin the clients over the existing
threads.
2013-03-11 11:07:20 +01:00
Olivier Crête
4071e1b999 rtsp-server: No need to store the GMainContext in the client context 2013-03-11 11:07:20 +01:00
Olivier Crête
b9d111372e Document locking and its order 2013-03-11 11:07:19 +01:00
Olivier Crête
f0ab7ce1bf docs: Generate docs for GstRTSPAddressPool 2013-03-11 11:07:19 +01:00
Olivier Crête
773c48e22f client: Check client provided addresses against the address pool 2013-03-11 11:07:19 +01:00
Olivier Crête
cda75709bb address-pool: Add API to request a specific address from the pool
Also add relevant unit tests.
2013-03-11 11:07:19 +01:00
Olivier Crête
456f4367e3 address-pool: Fix off by one error
When splitting a port range, the port after a skip is not part of range.
2013-03-11 11:07:19 +01:00
Wim Taymans
6db0dbc76c client: make sure the watch exists while sending data
Protect the send_func with a lock. This allows us to wait for sending
to complete before changing the send_func and user_data. We add an
extra ref to the watch to make sure that it remains valid during
sending.
When closing the connection, set the send_func to NULL

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=692433
2013-01-28 11:11:46 +01:00
Wim Taymans
4100b20b0a rtsp-client: set the client backlog
Set the client backlog to a reasonable default
2012-12-14 11:58:29 +01:00
Ognyan Tonchev
0844e8afbc rtsp-media: Make the element a constructor parameter
https://bugzilla.gnome.org/show_bug.cgi?id=689594
2012-12-10 10:25:57 +01:00
Wim Taymans
6beabf1ed4 media: match prepare with unprepare
Really unprepare when there were an equal amount of prepare calls.
2012-11-30 15:03:15 +01:00
Wim Taymans
ca26588c7e media: media has to be unprepared in finalize
Because unprepare takes away the last ref on the media.
2012-11-30 14:58:46 +01:00
Wim Taymans
38addd7822 Revert "client: never call gst_rtsp_media_unprepare, let gst_rtsp_media_finalize do it"
This reverts commit ba5b78ff2f.

We can't use the refcount to trigger unprepare because it is the unprepare call
that removes the last refcount after all messages are consumed. What we should
probably do is make a prepared refcount and only unprepare when the refcount
reaches 0.
2012-11-30 14:36:30 +01:00
Wim Taymans
119674a828 media: let the source unref the last media ref
the last ref to the media is held by the source so we don't need to add more ref
and unrefs, we simply destroy the media when the source is gone.
2012-11-30 13:35:05 +01:00
Wim Taymans
339ea9b085 media: improve debug 2012-11-30 12:54:10 +01:00
Wim Taymans
241baba20a media: check state
Make sure we are in the right state when collecting the position and duration.
Only make ourselves PREPARED when we were previously PREPARING.
2012-11-30 12:53:02 +01:00
Wim Taymans
edf2ef4f0b media: use g_object_ref/unref for GObjects 2012-11-30 10:05:48 +01:00
Alessandro Decina
ba5b78ff2f client: never call gst_rtsp_media_unprepare, let gst_rtsp_media_finalize do it
Calling gst_rtsp_media_unprepare breaks shared medias. Just unref
GstRTSPMedia instances and let gst_rtsp_media_finalize unprepare when a media
isn't being used anymore.
2012-11-30 07:06:17 +01:00
Alessandro Decina
00d9a94e1a Fix compiler warning 2012-11-30 06:17:46 +01:00
Alessandro Decina
e2a7690cb3 Add missing g_type_class_add_private in GstRTSPMediaFactoryURI 2012-11-30 06:14:49 +01:00
Wim Taymans
1abc9be682 small cleanup 2012-11-29 17:21:12 +01:00
Wim Taymans
28fd887547 media: avoid element leak 2012-11-29 17:20:56 +01:00
Wim Taymans
4eb010824e media: require an element in media constructor 2012-11-29 17:20:26 +01:00
Wim Taymans
865c9a6b30 Revert "client: TEARDOWN brings that state to Init again"
This reverts commit 4b61fdad85.

The object is already disposed, there is no point in setting the state.
2012-11-29 17:07:30 +01:00
Wim Taymans
4b61fdad85 client: TEARDOWN brings that state to Init again 2012-11-29 12:30:20 +01:00
Wim Taymans
ad00c5e792 rtsp: make object details private
Make all object details private
Add methods to access private bits
2012-11-29 11:11:05 +01:00
Wim Taymans
e11287eb7c media: check if prepared for some methods
Check that the media object is prepared before doing seek and getting the
current position etc.
Add some g_return checks.
2012-11-28 14:45:30 +01:00
Wim Taymans
d3d74ab77b stream: improve debug 2012-11-28 12:40:18 +01:00
Wim Taymans
fe71114a7d media: unref pipeline in finalize to avoid leaking it 2012-11-28 12:39:37 +01:00
Wim Taymans
d43a31055e rtsp: use gst_object_unref on GstObjects 2012-11-28 12:10:47 +01:00
Wim Taymans
6b36241816 media-factory: require an url 2012-11-28 12:10:14 +01:00
Wim Taymans
20f09bf3e7 server: remove unused include 2012-11-28 11:17:27 +01:00
Wim Taymans
e5ba372808 client: fix factory leak
Keep the factory in the state object only for authorization checks and make
sure we unref it on failure. Also don't keep invalid objects in the state
object.
2012-11-28 11:05:08 +01:00
Wim Taymans
b4c168c71d mounts: add g_return_if guards 2012-11-28 10:40:14 +01:00
Wim Taymans
b3fe3357ab client: improve debug 2012-11-27 12:33:02 +01:00
Wim Taymans
d5389c940d client: improve debug and fix leaks
Cleanup the uri and session when there is a bad request.
2012-11-27 12:24:21 +01:00
Wim Taymans
a26e9b621e client: use 454 when session can't be found
We should use 454 when a session can't be found because there was no session
pool configured in the server. This is not a server configuration problem
because the server on which the request is done might not be the same one that
will keep the sessions for us and so it does not need to support sessions.
2012-11-27 12:11:41 +01:00
Wim Taymans
4782d08bdc client: only free connection when there is one
It's possible that the client doesn't have a connection when we try to free it.
2012-11-27 11:17:45 +01:00
Wim Taymans
18bb9ffa6b client: small cleanup 2012-11-26 17:35:51 +01:00
Wim Taymans
fc0f176a17 client: remove unused include 2012-11-26 17:34:35 +01:00
Wim Taymans
9f8e8bc02d client: fix compilation 2012-11-26 17:34:24 +01:00
Wim Taymans
eb88fa9e76 client: call destroy without the lock 2012-11-26 17:28:29 +01:00
Wim Taymans
33da3af265 client: make the client usable without a socket
Make a method to let the client handle a message and a callback when the client
wants us to send a response message back. This makes it possible to also use the
client object without the sockets, which should make it easier to test.
2012-11-26 17:20:39 +01:00
Wim Taymans
26a4b98ab0 client: small cleanup 2012-11-26 16:45:04 +01:00
Wim Taymans
8da4171055 client: remove reference to server
We don't need to keep a ref to the server
2012-11-26 16:39:26 +01:00
Wim Taymans
4fa7502fd9 client: add locking
Also add some g_return_if()
2012-11-26 16:31:43 +01:00
Wim Taymans
b21b46ec4d client: log more errors 2012-11-26 13:37:20 +01:00
Wim Taymans
f460e7360e client: fix compilation 2012-11-26 13:36:19 +01:00
Wim Taymans
84e72262d0 client: add generic close-after-send support
Add a property to send_response() to close the connection after the response has
been sent to the client.
2012-11-26 13:19:06 +01:00
Wim Taymans
1d53c46d23 MediaMapping -> MountPoints
Describes better what the object manages.
2012-11-26 12:37:55 +01:00