What is the difference between Java modules and HTTP providers? I have read the definition in the documentation(docs/about-the-wowza-streaming-engine-java-api) but I am finding it difficult to understand the concepts.
What are the major differences between them?
What are the kind of works that modules should do and not the providers and vice versa?
Why are modules tied to an application, but providers are not?
What kind of data can modules access to but not the providers and vice versa?
A custom provider can be added by editing the VHost.xml file. How can a custom module be added without using the Streaming Manager?
An HTTP provider is typically an interface that supports a Wowza Streaming Engine (WSE) module or function. They’re not necessarily comparable.
A developer can create a Java module to extend WSE capabilities. For example, the StreamPublisher module, among a variety of capabilities, enables WSE to use VOD assets to source a live stream using a set of date/time playlists in an SMIL file. This module uses an optional HTTP provider to allow manipulation of the playlist streams.
Separately, to extend WSE core functionality, an HTTP provider can be configured (without a module), to function as an interface. An example of this would be the ability to insert metadata into an active source stream.
Most modules and HTTP providers are configured outside Wowza Streaming Engine Manager (WSEM).
For a better idea of what modules are capable of doing, take a look at these Module Examples.
How do I configure modules, providers and listeners from the Java code? If it is not possible to add them from the Java code, then which config files should be modified to add them?
Each module is different. The examples reference the required configuration steps. This usually involves (but isn’t limited to) modifying VHost.xml, Server.xml, and Application.xml.
I suggest you practice this to get a feel for the nuances of working with Java modules. Do you have a particular requirement you are working to solve?
With Java modules, you can define module boundaries, specify which packages are exposed to other modules, and enforce strong encapsulation. This helps improve code maintainability, scalability, and security by reducing the coupling between different parts of the application.
HTTP providers are typically used in Java applications to interact with web services, consume APIs, or perform HTTP-based communication with external systems. They abstract away the low-level details of the HTTP protocol and provide higher-level APIs for developers to work with.