I have existing video streaming application which is based client server technlogy.
Existing system is as follows There is data center, client application and gateway. camera is connected with gateway and gateway is connected with data center.client request video to data center and datacenter get it from gateway.
Now we want to use p2p technology here and want to have direct communication between gateway and client.we want to use RTMFP .for client we can use flex, but the existing gtateway code and business logic is written on c++.
Is there any way around to call c++ code from flex.
Thanks
Hey,
Yes this is pretty much possible with flex 4,(ie. only if you are using a desktop application).From a web based swf, running in a browser you cannot start running a C++ code.
I am assuming that you are developing a desktop app.To call a c++ code , you would need to do the things mentioned in the following example link.It is pretty straightforward.
http://www.adobe.com/devnet/air/flex/quickstart/articles/interacting_with_native_process.html
Or, incase you have access to the C++ code, then you can use a few already built classes which allow C++/Flex interaction.
http://anirudhs.chaosnet.org/blog/2008.03.13.html
Related
My company is trying to figure out how to turn our current camera line into ONVIF compliant cameras.
What I've found is the specification documents and a bunch of WSDL files. But everything I've seen so far appears to set up "the client side" of things.
I'm trying to create a middleware service so that our existing cameras can become ONVIF supported.
Are the WSDL files used for both a client and a device?
How do companies program ONVIF compliant cameras? Our's are PTZs, would the PTZ WSDL be what I'm looking for?
How does one start the service device side. Although the specification covers everything it isn't written well for new developers of the standard.
Please help me figure out how I would turn my embedded linux camera in c++ into an ONVIF compliant camera. Do developers use the WSDLs to achieve this?
Thank you!
well one of the most common ways to implement ONVIF is via the gSoap library, it has a very vast guide regarding both client and server use cases. You should go through the server side documentation to get a glimpse of how it works. From a very generalized point of view - it has a wsdl2h tool that takes a set of WSDL files and generates stub code (mostly parsing and I/O code that takes care of creating structure representations of the request data) for you, then using another gSoap tool called soapcpp2 you can generate C/C++ client/server objects (I've worked only with client side, so I guess the guide mentioned above is the best way to understand how to build a server using the generated objects). Then you can host a service and interact with the requests from the camera through this C/C++ object abstraction, which should be quite easy. All the request xmls are deserialized to object instances, and you can just look at the needed fields, create an instance of the needed response object and send it back. At least I've been using gSoap so far for client requests to ONVIF cameras and I'm quite satisfied. Here is a small tutorial from the maintainers of gSoap on how to deploy a simple service.
That being said, I've seen cameras that don't use gSoap or any other high level framework and just parse the request content with any common xml parser and have response string templates that are formatted with the needed values and sent back - if your camera is not very complex this might work, but it depends on your needs. Feel free to ask any follow up questions, at least for me ONVIF was quite a spiders web when I started.
I have seen several examples of native to browser WebRTC applications, like for streaming video files stored on a server to one or more browsers, but is it possible to do the reverse ? I.e. streaming the webcam from the browser to a server, written in C, C++, Java or other ?
It is possible.
WebRTC is using open standards to stream content over the network. You can find all the details in the following RFCs:
http://tools.ietf.org/wg/rtcweb/
If you want to write your own native application that will receive (and even send) WebRTC media you can either get the WebRTC native code from here: http://www.webrtc.org/webrtc-native-code-package and build it into your solution or alternatively use one of the existing SDKs that can provide you this functionality (depending on which platform you want your native application to run on).
If you want to connect WebRTC to existing hardware like a SIP desk phone, you will need to have some sort of a gateway that will have one leg that will communicate with WebRTC on the browser and the other leg that will communicate with your SIP phone.
There are a lot of commercial solutions already out there, but eventually it all comes down to what your needs are.
Is it possible to write C++ code to interface with a server, but to be executed on client side, but on the browser instead of native?
Like, for example, imagine using open source classes so that you produce a file.
But because you don't want all this work to be done on the server, you run it on the browser.
So that the client gives a file or two or more as inputs, then the code runs on his machine, the final result is produced, then this file is uploaded to database on the server.
please see google native client project. http://code.google.com/p/nativeclient/
This is strange question.
You can prepare binaries that do task that you want done on client side and make server send proper binary to client when asked for it. Client then runs this binary and returns results to server.
It is possible if you know configurations of client machines (binaries must work on them). Also it have to be some security layer implemented - you don't want to allow every binary run on client (imagine man-in-the-middle attack when some malicious code is run on client).
I think your request contradicts with the idea behind server-side programming. The main purpose in using server-side programs is to make use of infrastructural components like database, network, etc. in a controlled manner. (The most typical usage of server-side applications are web sites with server side coding like JSP and ASP.)
Since servers are machines that are to be kept secure, a remote application should not be permitted to make changes or access filesystem freely. If you want to do changes on a server like doing database operations or reading/writing files, you should use applications that run on the server or provide interfaces like web services or web sites to remote client applications.
So there are a couple solutions when if you want to do work on the browser, then have the results posted in a server database.
First of all, you must set up your server ready for database work. I have done this using the MEAN stack, set up a MongoDB and interfaced it with the Mongoose API.
Now, for the meat of the question, there are many examples of browsers doing intensive work. The majority of these applications thought is not C++, but it is Javascript.
If you really want to focus on C++ (like i did in the past, in the time i asked this question, wanting to make something big for college), then you could do one of the following:
*Use Google Native Client (NaCl). This is a sandbox for running compiled C and C++ code in the browser efficiently and securely, independent of the user’s operating system.
*Maybe you should want to check out Emscripten, which is a framwork for translating C and C++ code to jaascript. This way, you can have your C or C++ binaries that worked, and have them translated to Javascript, in order to have them work in the browser too.
(Sorry for my english)
First: I have an application created using C++ (this is for performance needs), this application uses an image to make some processing and returns a simple answer (1 or 0 ).
Now I need to expose this application from a webservice.
I think to create a webservice using Rails, but I don't know if it's possible using rails to call the C++ process..
The idea is to use the webservice to get an image sent by a client, pass this image to the C++ application and return (using the webservice) a message to the client, based on the result of C++ application.
Is this possible?
Any example or guideline?
Thanks in advance
EDIT: Solved using Thrift thrift.apache.org
I read something about Thrift .. but i think maybe i can't use to solve this problem (maybe) ..
The idea is use a mobile application (iOS and/or Android) where the user can upload an image to the service. The service take the image and make some image processing, this part (the processing) was written with C++ as standalone application that receive an image and return a message, so when the processing is done, the service receive the result (a message) from the processing app and return this to the mobile application.
So.. is this possible with Thrift (if so, i need to read more)? o i need to use something else?
Thanks in advance
I have never done that before, but I think you should take a look at Thrift which was initially developed by Facebook and allows you to make multiple languages work together via RPC calls.
Thrift allows you to define data types
and service interfaces in a simple
definition file. Taking that file as
input, the compiler generates code to
be used to easily build RPC clients
and servers that communicate
seamlessly across programming
languages.
I encourage you to search on Google with the following keywords : thrift C++ rails webservice etc.
I develop industrial client/server application (C++) with strong real time requirements.
I feel it is time to change the look of the client interface - which is developed in MFC - but I am wondering which would be the right choice.
If I go for a web client is there any way to exchange data between C++ and javascript other than AJAX <-> Web service <-> COM ?
Requirements for the web client are: Quick statuses refresh, user commands, tables
My team had to make that same decision a few months ago...
The cool thing about making it a web application would be that it would be very easy to modify later on. Even the user of the interface (with a little know-how) could modify it to suit his/her needs. Custom software becomes just that much easier.
We went with a web interface and ajax seems the way to go, it was quite responsive.
On the other hand, depending on how strong your real time requirements are, it might prove difficult. We had the challenge of plotting real time data through a browser, we ended up going with a firefox plugin to draw the plot. If you're simply trying to display real time text data, it shouldn't be as big an issue.
Run some tests for your specific application and see what it looks like.
Something else to consider, if you are having a web page be an interface to your server, keep in mind you will need to figure a way to update one client when another changes the state of the server if you plan on allowing multiple interfaces to your server.
I usually build my applications 2-folded :
Have the real heavy-duty application CLI-only. The protocol used is usually text-only based, composed of requests and answers.
Wrap a GUI around as another process that talks to the CLI back-end.
The web interface is then just another GUI to wrap around. It is also much easier to wrap a REST/JSON based API on the CLI interface (just automatically translate the messages).
The debugging is also quite easy to do, since you can just dump the requests between the 2 elements and reproduce the bugs much more easily.
Write an HTTP server in your server to handle the AJAX feedback. If you don't want to serve files, create your server on a non-standard port (eg. 8081) and use a regular web server for the actual web page delivery. Now have your AJAX engine communicate with the server on the Bizarro port instead of port 80.
But it's not that hard to write the file server part, also. If you do that, you also get to generate web pages on-the-fly with your data pre-filled, if you want.
Google Desktop Search does this now. When I search my desktop for 'foobar', the URL that opens is this:
http://127.0.0.1:4664/search?q=foobar&flags=68&num=10
In this case, the 4664 is the Bizarro port. (GoogleDesktop serves all the data here; it only uses the Bizarro port to avoid conflicts with any web server I might be running.)
You may want to consider where your data lives. If your application feeds a back-end database, you could write a web app leaving your c++ code in tact -- the web application would be independent and offer up pages to web users and talk directly to the database -- In this case you have as many options, and more, as you have indicated.