Webrtc Media Server Components - server

It's been a while since I started learning WebRTC and after a lot of research I'm still not able to get what are the components of a Media Server when used. I know that there are many open source projects on GitHub and many vendors are actually selling it commercially but what I'm interested in is the total components which it is made of.
What I know :
1)Media Server is required when you have 1000+clients as it requires a server to manage all the streams.
2) SFU and MCU are part of the Media Server. (NOTE: YES, I'm aware of the terms SFU and MCU).
*What I'm eager to Know is :
The architecture of the Media Server with its component's or layout if any. And am I correct when it comes to the things which I mentioned What I know :
PS: I have done a lot of homework before asking this question and was unable to get an clear picture of the same.

Related

Which server setup would be easiest to send a photo/text from an iOS app (swift) to a place where I can download/access them?

I'm using swift — and the app needs to send a photo and matching text (that a user submits) to a server so that I can download the photo/text.
Would an existing FTP server that I have setup for my website be possible for this application? Or would it make more sense to do something with a web portal?
During my research, I'm finding options like Backendless, Alamofire, Gold Racoon, and various others. They seem like overkill for the simple task I'm looking to accomplish. Is there some minimal service out there that can automate my simple need? If not, which of these options would you recommend for my situation?
Ideally the setup would be free, but I'd be willing to spend up to $100 or $10/month if the service fits.
I'm new to app development so I'm feeling overwhelmed with the options and not sure how to begin researching. I hope beginner questions aren't frowned upon here — I would really appreciate any advise on what I should begin learning to achieve my goal of sending a photo+text from an iOS app to a place where I can access them.
If there are other questions I should be asking to achieve this, please let me know.
For your case there are two main routes to consider
1. BYOS (Bring Your Own Server)
With this option, you are responsible for creating and maintenance of your own server.
Now you can use various services such as Digital Ocean and Amazon for this.
On top of this, you would be responsible for creating your own database and maintaining it as well. Plus, you would need to write server side code along with client side code (the app) in order to instantiate communication between the two.
The advantage of this is that you virtually have control of everything but I think it is pretty clear how painful this task is.
2: BAS (Backend As a Service) Highly recommended
With this route, you simply have to write the app and let another service handle the server side of things. One of the most common ones is Firebase. Most folks including startups go down this route.
There are a bunch of other services out there.
Two Cents:
Whatever option or service you decide to use, I would recommend you make sure that:
a. The service has a good track record.
You do not want something that might end up getting shutdown in the next couple months. I know it is hard to predict this but certain initial guesses/probabilities can be made.
b. Make sure its community is vibrant.
The last thing you as a newbie wants is to be stuck and have no one to help you. Research around and see the different questions people ask and whether or not answers exist.

Need some advice to get a commercial xmpp application developed

I have a business idea which I want to materialize for sometime .. I recently shared my idea with 2 close friends who also found it very interesting, new and doable plus the cost included for the project to start is reasonable and they have planned to invest in it. Much of the success of this project app depends on the proper marketing element out of which most of the time, you have to personally meet up with clients/vendor and make them use your application.
The idea is to connect local ecommerce (retail shops, businesses, vendors, etc.) with users/customers through a messaging app mostly similar to whatsapp. I have already started to look for a xmpp/jabber developer who can accomplish our requirements. We are expecting him to develop the app and also set-up the server requirements. Our budget lies within $3000-4000 range for the project to initiate.
I want the app to have the following aspects:
a) user friendly GUI
b) highly scalable (planning to start within my city located in south asia)
c) location sharing (want users to navigate nearby shops/vendor offering their type of goods/services)
d) have a user review feedback against vendors and an additional page for vendor profile/rating system
e) only customer - vendor chats with functionalities like camera snaps, audio recording (just like whatsapp).
f) both for ios and android
Now the whole idea outlaid, after reading lots of articles, discussion and tutorials, I have some questions (I am a non-technical person btw):
1- I believe ejabberd is the best option as compared to tigase or prosody due to high scability. Is this ok to go with or should I look at other xmpp servers?
2- Currently, I am planning to launch this application within my city (rated as worldwide no.2 as per population stats of above 25m people), should I set-up a local server with high internet bandwith and a powerful machine or should I outsource it to some xmpp hosted server in the US (as their technological infrastructure has always provided quality service).
3- Should I be worried about the developer stealing the source code or is there any effective way to minimize this risk?
4- Any ideas what other things I am missing. This is dead serious for me and I am willing to do anything to get this project on the road.
(P.S.: The idea for this app is similar to the existing app called Lookup but I am planning to add some variations to it)
Thanks and sorry for being a bit lengthy ..
Regards,
Ahmed
ejabberd is indeed likely your best bet. However, be careful about the budget. To launch a quality service in an highly competitive area you have to have a significant budget, both development and marketing, if you expect your project to succeed.

Getting started with servers / networking for an iOS application

I'm developing an iOS social networking application that will involve users sharing and rating photos. I've spent about the last year or so on and off teaching myself how to develop in cocoa touch and now I'm ready to get started with the networking aspect of the app. Unfortunately, I have 0 networking / database experience and was wondering if anyone had any good advice on what things to consider and where / how to get started. In all likelihood I'm probably not going to build my own server and instead will go with something like rack space. Any advice would be appreciated.
Getting started to iOS Networking application. Here are the required things:-
You really need good backend developing experience in MySQL and complex database queries Plus experience in developing web services. At the root you need server host for backend and Admin module as you mentioned in question like race space or any other. You need to spend some months with mysql backend,web service and admin module implementation.
For fully functional social networking app your first task will be to manage users. Log in/Sign up will be there. Every user can post his status and can comment to other user's status.All status posts or comments will have their unique id and relationships to userid's table. May be image uploading and comments on photo will also be there So there will be lots of tables and relationships between them on backend side.
For Social Networking app, amount of work will be bigger on both backend/web service side and iOS side.
This is a pretty abstract question.
Eventually, you're going to have to focus on a particular architecture ( which database, which network technology), but before you do that, you need to get an outline idea of what the available options are and what the strengths and weaknesses of each are.
The server database is probably the easiest, as it doesn't make such a big difference. The choices are an sql database ( mysql, sqllite ....), not an sql database ( nosql, in memory tables) or some higher level abstraction where you can hide the differences and decide later ( core data for example). This may be constrained by your deployment decisions, you'll have more choices of rack options if you go for LAMP (Linux, Apache, MySql, PHP) for example. If you stick with apple kit and use a MacOS X back end, you may have additional options for network architecture ( DistributedObjects for instance.
The network architecture is also a difficult choice from a wide range of choices. There are really dozens of options with lots of different pros and cons. As this is your first foray into this area, I'd count ease of use and availability of help high among your priorities. Here are a few popular technologies you might want to investigate ( in alphabetical order to minimise flammability :) ). DistributedObjects ( apple), JAXP, JSON, RPC, SOAP, XML ( bare, without the soapy bits).
One more question you should ask yourself is "Can you get away with just a database connection, or do you need to do processing on the back end?". If you can, you might be able to get away with just using a remote database and then you only need to learn core data ( which will still keep you busy for a long time).
Once you've decided what technologies you want to use, then you can start learning.
You mentioned using a hosted server. You'll want to be able to run a test server locally. Fortunately almost all the worthwhile options for both database and network technology will run on any unix-like machine, so you can probably use your regular dev machine.
Also bear in mind that some of these choices are religious, so everyone you read will have strong biases ( myself definitely included).

About Googles PubSubHubbub drawback

I was reading a paper titled "An Optimized Web Feed Aggregation Approach for Generic Feed Types" and googles PubSubHubbub protocol was discussed and the paper stated its drawback something like
Furthermore, there are patch systems such as pubsubhubbub (Google 2010) which can be seen as a mod-erator between feed readers and servers. All of these solutions only work if both, client and server support the extensions, which is rarely the case. Pubsubhubbub, for example,is only supported by 2 % of the feeds in our dataset.
I have never really interacted with this protocol , does it require clients (subscribers) to have some sort of a software on their system like feed listeners are required on the client side(subscribers) for obtaining feeds (is that what the above means) ?
I am not sure where they pulled that 2% number from, but it is probably not right.
For example, all the major blogging platforms support PubSubHubbub. A lot of news outlets (HuffPo, Gawker, Foxnews, ABCLocal...) support the protocol too.
Many other services, like Craigslist, Getglue, (even StackOverflow) . A lot of other services, like Github or Instagram do support PubSubHubbub-like APIs for JSON resources, even though this is outside of the current (0.3) spec.
The list goes on and on and on.
Now as far as complexity, it really isn't that difficult for a huge benefit. The "clients" (technically these are web servers) need to visible, accessible outside the firewall.
For publishers, it is even easier as they just need to ping (a simple HTTP POST request) the hub that they've chosen previously.

Are there any open source cross platform NAT punch throughs?

Are there any open source cross platform NAT punch throughs?
I haven't seen one, but you'll find more information than you require here:
http://www.enchantedage.com/node/8
It's not terribly hard to implement, just a bit of work.
There is code on the page that demonstrates this that builds on unix and windows, including both the server portion (the introducer) and the client portions. It doesn't list a license, but the author indicates in the readme that the technique is free, and re-implementing it from the information on the page and the source code example appears to be relatively easy.
The author appears to be the owner of the website enchantedage, so you can probably contact them directly for more information.
The best I've seen is UDT, which is a reliable UDP library that also includes a "rendezvous" connect mode that helps take care of the NAT punching. All you have to do is figure out the external IP address and port and somehow get it to the other client (and vice versa). Once you know that information, you both connect and bind at the same time (with rendezvous mode set) and it'll do its best to figure out the rest.
I haven't got an answer here I'm afraid, but I do know that a couple of years ago there was some research done in area that ended up spawning some IETF documents. The curious reader might already be familiar with these:
https://datatracker.ietf.org/doc/html/draft-ietf-behave-rfc3489bis-18
https://datatracker.ietf.org/doc/html/draft-ietf-behave-turn-13
possibly https://datatracker.ietf.org/doc/html/draft-ietf-mmusic-ice-19
(...your-link-here: some research that I probably have missed)