OvenMediaEngine (OME) is a Streaming Server for Sub-Second Latency. It supports WebRTC, RTMP, SRT, MPEG-2 TS, RTSP as input, WebRTC, LL-DASH, MPEG-DASH, HLS as output.

"Sub-Second Latency Streaming Server" OvenMediaEngine

What is OvenMediaEngine?

In short, OvenMediaEngine (OME) is Open-Source Streaming Server with Sub-Second Latency.

OME receives a video/audio source from encoders and cameras such as OvenStreamEncoder, OBS, XSplit, and more to WebRTC, RTMP, SRT, MPEG-2 TS Beta, or RTSP Beta. Then, OME transmits it using WebRTC, Low Latency MPEG-DASH (LLDASH), MPEG-DASH, and HLS.

Like the picture below:

We also provide OvenPlayer, Open-Source HTML5 Player that is very synergistic with OME.

What is the goal of this project?

AirenSoft aims to make it easier for you to build a stable broadcasting/streaming service with Sub-Second Latency. Therefore, we will continue developing and providing the most optimized tools for smooth Sub-Second Latency Streaming.

Would you please click on each link below for details:

Features

  • Ingest
    • Push: WebRTC, RTMP, SRT, MPEG-2 TS
    • Pull: RTSP
  • Sub-Second Streaming with WebRTC
    • WebRTC over TCP (with Embedded TURN Server)
    • ICE (Interactive Connectivity Establishment)
    • DTLS (Datagram Transport Layer Security)
    • SRTP (Secure Real-time Transport Protocol)
    • ULPFEC (Uneven Level Protection Forward Error Correction)
      • VP8, H.264
    • In-band FEC (Forward Error Correction)
      • Opus
    • Embedded WebRTC Signalling Server (WebSocket based)
  • Low Latency Streaming with MPEG-DASH (Chunked CAMF)
  • Legacy Streaming with MPEG-DASH/HLS
  • Embedded Live Transcoder
    • VP8, H.264, Opus, AAC, Bypass
  • Origin-Edge structure
  • Monitoring
  • Beta
    • File Recording
    • RTMP Push Publishing (Re-streaming)
    • Thumbnail
    • REST API
  • Experiment
    • P2P Traffic Distribution (Only WebRTC)

Supported Platforms

We have tested OME on the platforms listed below. However, we think it can work with other Linux packages as well:

  • Docker
  • Ubuntu 18+
  • CentOS 7+
  • Fedora 28+

Getting Started

Docker

docker run -d \
-p 1935:1935 \
-p 3333:3333 \
-p 3478:3478 \
-p 8080:8080 \
-p 9000:9000 \
-p 9999:9999/udp \
-p 4000-4005:4000-4005/udp \
-p 10006-10010:10006-10010/udp \
--name ovenmediaengine \
airensoft/ovenmediaengine:latest

You can also store the configuration files on your host:

docker run -d \
-p 1935:1935 \
-p 3333:3333 \
-p 3478:3478 \
-p 8080:8080 \
-p 9000:9000 \
-p 9999:9999/udp \
-p 4000-4005:4000-4005/udp \
-p 10006-10010:10006-10010/udp \
-v ome-origin-conf:/opt/ovenmediaengine/bin/origin_conf \
-v ome-edge-conf:/opt/ovenmediaengine/bin/edge_conf \
--name ovenmediaengine \
airensoft/ovenmediaengine:latest

The configuration files are now accessible under /var/lib/docker/volumes/ /_data .

Following the above example, you will find them under /var/lib/docker/volumes/ome-origin-conf/_data and /var/lib/docker/volumes/ome-edge-conf/_data.

If you want to put them in a different location, the easiest way is to create a link:

ln -s /var/lib/docker/volumes/ome-origin-conf/_data/ /my/new/path/to/ome-origin-conf \
&& ln -s /var/lib/docker/volumes/ome-edge-conf/_data/ /my/new/path/to/ome-edge-conf

Other Methods

Please read the Getting Started.

How to contribute

Thank you so much for being so interested in OvenMediaEngine.

We need your help to keep and develop our open-source project, and we want to tell you that you can contribute in many ways. Please see our Guidelines, Rules, and Contribute.

We always hope that OvenMediaEngine will give you good inspiration.

For more information

License

OvenMediaEngine is licensed under the GPLv3 or later.

Owner
AirenSoft
AirenSoft is a group of media technology experts.
AirenSoft
Comments
  • I cannot start with a test environment with docker.

    I cannot start with a test environment with docker.

    Describe the bug I think is not a bug, but I am gonna ask you here.

    I am trying to make a little test with OvenMediaEngine, I have 3 components:

    OvenMediaEngine, OvenPlayer and OBS.

    For OvenMediaEngine I am running with the following command:

    docker run -d -p 1935:1935 -p 3333:3333 -p 8080:8080 -p 9000:9000 -p 4000-4005:4000-4005/udp -p 10006-10010:10006-10010/udp nairensoft/ovenmediaengine:latest

    I am emitting with OBS to the container directly by RTMP, that's is working ok.

    But the problem is when I try to watch the video with OvenPlayer, the video never starts.

    And I am configuring in OBS:

    Server: rtmp://127.0.0.1:1935/app/ Stream key: stream

    To Reproduce Steps to reproduce the behavior:

    1. As Server.xml I am using the same as it's configured on the nairensoft/ovenmediaengine:latest image
    2. With Encoder OBS 26.0.2 (All the config by default)
    3. The error is below.

    Expected behavior I want to watch the video, it's a simple test but I do not know what is happening :(

    Logs [2020-11-24 17:54:31.596] I 12 Monitor | stream_metrics.cpp:119 | A new session has started playing #default#app/stream on the WebRTC publihser. WebRTC(1)/Stream total(1)/App total(1) [2020-11-24 17:55:02.059] I 26 Monitor | stream_metrics.cpp:144 | A session has been stopped playing #default#app/stream on the WebRTC publihser. Concurrent Viewers[WebRTC(0)/Stream total(0)/App total(0)]

    Server (please complete the following information):

    • OS: docker
    • OvenMediaEngine Version: latest

    Player (please complete the following information):

    • Browser chrome and firefox
  • Invalid data received from [Mobile only]

    Invalid data received from [Mobile only]

    Any idea why I keep seeing this on the log only on mobile browsers?

    on PC works fine

    on mobile, the WEBRTC does not work but on PC + webcam works perfect

    [SPRtcSignalling:13] HttpServer | web_socket_interceptor.cpp:231 | Invalid data received from <HttpRequest: 0x7f0898001b00, Method: 1, uri: wss://....>

    I tested with and without transport=tcp

  • OvenMediaEngine failed to pull RTSP stream

    OvenMediaEngine failed to pull RTSP stream

    Describe the bug Hello, I use OvenMediaEngine to pull RTSP stream and WebRTC to play, but it fails to pull the stream.

    Expected behavior I hope to be able to pull the RTSP stream normally

    Server (please complete the following information):

    • OS: Centos 7.x
    • OvenMediaEngine Version: v0.12.6

    Player (please complete the following information):

    • Device: Lenovo yoga 14s
    • OS: Windows 10
    • Browser: Microsoft Edge
    • Version : 94.0.992.50

    OvenMediaengine Logs

    [2021-10-18 12:28:45.601] I [SPRtcSignalling:30754] Signalling | rtc_signalling_server.cpp:201  | New client is connected: <ClientSocket: 0x7f5d64001080, #4, Connected, TCP, Nonblocking, 192.168.8.66:62099>
    [2021-10-18 12:28:45.608] I [SPRtcSignalling:30754] Orchestrator | orchestrator.cpp:546  | Trying to pull stream [#default#app/n1rtsp] from provider using origin map: PullProvider
    [2021-10-18 12:28:45.710] E [SPRtcSignalling:30754] RtspMessage | rtsp_message.cpp:124  | Could not parse status-line : RTSP/1.0 500 Internal Server Error
    [2021-10-18 12:28:45.711] E [SPRtcSignalling:30754] RtspcStream | rtspc_stream.cpp:840  | [#default#app/n1rtsp] An error occurred while parsing packet: Invalid packet
    [2021-10-18 12:28:45.711] E [SPRtcSignalling:30754] RtspcStream | rtspc_stream.cpp:263  | No response(CSeq : 0) was received from the rtsp server(rtsp://192.168.8.125/live/1st/living_play)
    [2021-10-18 12:28:45.711] E [SPRtcSignalling:30754] Provider | provider.cpp:152  | RTSPCProvider Application could not create [n1rtsp] stream.
    [2021-10-18 12:28:45.711] E [SPRtcSignalling:30754] Orchestrator | orchestrator.cpp:591  | Could not pull stream [#default#app/n1rtsp] from provider: PullProvider
    [2021-10-18 12:28:45.711] E [SPRtcSignalling:30754] WebRTC Publisher | webrtc_publisher.cpp:440  | Cannot find stream (#default#app/n1rtsp)
    [2021-10-18 12:28:45.711] E [SPRtcSignalling:30754] Signalling | rtc_signalling_server.cpp:292  | Cannot find stream [#default#app/n1rtsp]
    [2021-10-18 12:28:45.711] I [SPRtcSignalling:30754] Signalling | rtc_signalling_server.cpp:339  | Client is disconnected: <WebSocketClient: 0x7f5d6401c740, <ClientSocket: 0x7f5d64001080, #4, Closed, TCP, Nonblocking, 192.168.8.66:62099>> (#default#app / n1rtsp, ufrag: local: (N/A), remote: (N/A))
    

    OvenMediaengine Config

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Server version="8">
    	<Name>OvenMediaEngine</Name>
    	<!-- Host type (origin/edge) -->
    	<Type>origin</Type>
    	<!-- Specify IP address to bind (* means all IPs) -->
    	<IP>*</IP>
    
    	<!-- 
    	To get the public IP address(mapped address of stun) of the local server. 
    	This is useful when OME cannot obtain a public IP from an interface, such as AWS or docker environment. 
    	If this is successful, you can use ${PublicIP} in your settings.
    	-->
    	<StunServer>stun.l.google.com:19302</StunServer>
    
    	<!-- Settings for the ports to bind -->
    	<Bind>
    		<!-- Enable this configuration if you want to use API Server -->
    		<!--
    		<Managers>
    			<API>
    				<Port>8081</Port>
    				<WorkerCount>1</WorkerCount>
    			</API>
    		</Managers>
    		-->
    
    		<Providers>
    			<!-- Pull providers -->
    			<RTSPC>
    				<WorkerCount>1</WorkerCount>
    			</RTSPC>
    			<OVT>
    				<WorkerCount>1</WorkerCount>
    			</OVT>
    			<!-- Push providers -->
    			<RTMP>
    				<Port>1935</Port>
    				<WorkerCount>1</WorkerCount>
    			</RTMP>
    			<SRT>
    				<Port>9999</Port>
    				<WorkerCount>1</WorkerCount>
    			</SRT>
    			<MPEGTS>
    				<!--
    					Listen on port 4000~4005 (<Port>4000-4004,4005/udp</Port>)
    					This is just a demonstration to show that you can configure the port in several ways
    				-->
    				<Port>4000/udp</Port>
    			</MPEGTS>
    			<WebRTC>
    				<Signalling>
    					<Port>3333</Port>
    					<!-- If you want to use TLS, specify the TLS port -->
    					<!-- <TLSPort>3334</TLSPort> -->
    					<WorkerCount>1</WorkerCount>
    				</Signalling>
    
    				<IceCandidates>
    					<!-- 
    						If you want to stream WebRTC over TCP, specify IP:Port for TURN server.
    						This uses the TURN protocol, which delivers the stream from the built-in TURN server to the player's TURN client over TCP. 
    						For detailed information, refer https://airensoft.gitbook.io/ovenmediaengine/streaming/webrtc-publishing#webrtc-over-tcp
    					-->
    					<TcpRelay>*:3478</TcpRelay>
    					<!-- TcpForce is an option to force the use of TCP rather than UDP in WebRTC streaming. (You can omit ?transport=tcp accordingly.) If <TcpRelay> is not set, playback may fail. -->
    					<TcpForce>false</TcpForce>
    
    					<IceCandidate>*:10000/udp</IceCandidate>
    					<TcpRelayWorkerCount>1</TcpRelayWorkerCount>
    				</IceCandidates>
    			</WebRTC>
    		</Providers>
    
    		<Publishers>
    			<OVT>
    				<Port>9000</Port>
    				<WorkerCount>1</WorkerCount>
    			</OVT>
    			<HLS>
    				<Port>80</Port>
    				<!-- If you want to use TLS, specify the TLS port -->
    				<!-- <TLSPort>443</TLSPort> -->
    				<WorkerCount>1</WorkerCount>
    			</HLS>
    			<DASH>
    				<Port>80</Port>
    				<!-- If you want to use TLS, specify the TLS port -->
    				<!-- <TLSPort>443</TLSPort> -->
    				<WorkerCount>1</WorkerCount>
    			</DASH>
    			<WebRTC>
    				<Signalling>
    					<Port>3333</Port>
    					<!-- If you want to use TLS, specify the TLS port -->
    					<!-- <TLSPort>3334</TLSPort> -->
    					<WorkerCount>1</WorkerCount>
    				</Signalling>
    				<IceCandidates>
    					<!-- 
    						If you want to stream WebRTC over TCP, specify IP:Port for TURN server.
    						This uses the TURN protocol, which delivers the stream from the built-in TURN server to the player's TURN client over TCP. 
    						For detailed information, refer https://airensoft.gitbook.io/ovenmediaengine/streaming/webrtc-publishing#webrtc-over-tcp
    					-->
    					<TcpRelay>*:3478</TcpRelay>
    					<!-- TcpForce is an option to force the use of TCP rather than UDP in WebRTC streaming. (You can omit ?transport=tcp accordingly.) If <TcpRelay> is not set, playback may fail. -->
    					<TcpForce>false</TcpForce>
    
    					<IceCandidate>*:10000/udp</IceCandidate>
    					<TcpRelayWorkerCount>1</TcpRelayWorkerCount>
    				</IceCandidates>
    			</WebRTC>
    		</Publishers>
    	</Bind>
    
    	<!-- P2P works only in WebRTC -->
    	<!--
    	<P2P>
    		<MaxClientPeersPerHostPeer>2</MaxClientPeersPerHostPeer>
    	</P2P>
    	-->
    
    	<!--
    		Enable this configuration if you want to use API Server
    		
    		<AccessToken> is a token for authentication, and when you invoke the API, you must put "Basic base64encode(<AccessToken>)" in the "Authorization" header of HTTP request.
    		For example, if you set <AccessToken> to "ome-access-token", you must set "Basic b21lLWFjY2Vzcy10b2tlbg==" in the "Authorization" header.
    	-->
    	<!--
    	<Managers>
    		<Host>
    			<Names>
    				<Name>*</Name>
    			</Names>
    			<TLS>
    				<CertPath>path/to/file.crt</CertPath>
    				<KeyPath>path/to/file.key</KeyPath>
    				<ChainCertPath>path/to/file.crt</ChainCertPath>
    			</TLS>
    		</Host>
    		<API>
    			<AccessToken>ome-access-token</AccessToken>
    		</API>
    	</Managers>
    	-->
    
    	<VirtualHosts>
    		<!-- You can use wildcard like this to include multiple XMLs -->
    		<VirtualHost include="VHost*.xml" />
    		<VirtualHost>
    			<Name>default</Name>
    			<!--Distribution is a value that can be used when grouping the same vhost distributed across multiple servers. This value is output to the events log, so you can use it to aggregate statistics. -->
    			<Distribution>ovenmediaengine.com</Distribution>
    
    			<!-- Settings for multi ip/domain and TLS -->
    			<Host>
    				<Names>
    					<!-- Host names
    						<Name>stream1.airensoft.com</Name>
    						<Name>stream2.airensoft.com</Name>
    						<Name>*.sub.airensoft.com</Name>
    						<Name>192.168.0.1</Name>
    					-->
    					<Name>*</Name>
    				</Names>
    				<!--
    				<TLS>
    					<CertPath>path/to/file.crt</CertPath>
    					<KeyPath>path/to/file.key</KeyPath>
    					<ChainCertPath>path/to/file.crt</ChainCertPath>
    				</TLS>
    				-->
    			</Host>
    
    			<!-- 	
    			Refer https://airensoft.gitbook.io/ovenmediaengine/signedpolicy
    			<SignedPolicy>
    				<PolicyQueryKeyName>policy</PolicyQueryKeyName>
    				<SignatureQueryKeyName>signature</SignatureQueryKeyName>
    				<SecretKey>aKq#1kj</SecretKey>
    
    				<Enables>
    					<Providers>rtmp,webrtc,srt</Providers>
    					<Publishers>webrtc,hls,dash,lldash</Publishers>
    				</Enables>
    			</SignedPolicy>
    			-->
    
    			<!--
    			<AdmissionWebhooks>
    				<TargetUrl></TargetUrl>
    				<SecretKey></SecretKey>
    				<Timeout>3000</Timeout>
    				<Enables>
    					<Providers>rtmp,webrtc,srt</Providers>
    					<Publishers>webrtc,hls,dash,lldash</Publishers>
    				</Enables>
    			</AdmissionWebhooks>
    			-->
    
    			
    			<Origins>
    				<Origin>
    					<Location>/app/n1rtsp</Location>
    					<Pass>
    						<Scheme>rtsp</Scheme>
    						<Urls>
    							<!--<Url>192.168.8.201:554/ch01</Url>-->
    							<Url>192.168.8.125/live/1st/living_play</Url>
    						</Urls>
    					</Pass>
    				</Origin>
    			</Origins>
    		
    			<!-- Settings for applications -->
    			<Applications>
    				<Application>
    					<Name>app</Name>
    					<!-- Application type (live/vod) -->
    					<Type>live</Type>
    					<OutputProfiles>
    						<!-- Enable this configuration if you want to hardware acceleration using GPU -->
    						<!-- 
    						<HardwareAcceleration>false</HardwareAcceleration>
    						-->
    
    						<OutputProfile>
    							<Name>bypass_stream</Name>
    							<OutputStreamName>${OriginStreamName}</OutputStreamName>
    							<Encodes>
    								<Audio>
    									<Bypass>true</Bypass>
    								</Audio>
    								<Video>
    									<Bypass>true</Bypass>
    								</Video>
    								<Audio>
    									<Codec>opus</Codec>
    									<Bitrate>128000</Bitrate>
    									<Samplerate>48000</Samplerate>
    									<Channel>2</Channel>
    								</Audio>
    								<!-- 							
    								<Video>
    									<Codec>vp8</Codec>
    									<Bitrate>1024000</Bitrate>
    									<Framerate>30</Framerate>
    									<Width>1280</Width>
    									<Height>720</Height>
    								</Video>								
    								-->
    							</Encodes>
    						</OutputProfile>
    					</OutputProfiles>
    					<Providers>
    						<OVT />
    						<WebRTC />
    						<RTMP />
    						<SRT />
    						<MPEGTS>
    							<StreamMap>
    								<!--
    									Set the stream name of the client connected to the port to "stream_${Port}"
    									For example, if a client connets to port 4000, OME creates a "stream_4000" stream
    									<Stream>
    										<Name>stream_${Port}</Name>
    										<Port>4000,4001-4004</Port>
    									</Stream>
    									<Stream>
    										<Name>stream_4005</Name>
    										<Port>4005</Port>
    									</Stream>
    								-->
    								<Stream>
    									<Name>stream_${Port}</Name>
    									<Port>4000</Port>
    								</Stream>
    							</StreamMap>
    						</MPEGTS>
    						<RTSPPull />
    						<WebRTC>
    							<Timeout>30000</Timeout>
    						</WebRTC>
    					</Providers>
    					<Publishers>
    						<AppWorkerCount>1</AppWorkerCount>
    						<StreamWorkerCount>8</StreamWorkerCount>
    						<OVT />
    						<WebRTC>
    							<Timeout>30000</Timeout>
    							<Rtx>false</Rtx>
    							<Ulpfec>false</Ulpfec>
    							<JitterBuffer>false</JitterBuffer>
    						</WebRTC>
    						<HLS>
    							<SegmentDuration>5</SegmentDuration>
    							<SegmentCount>3</SegmentCount>
    							<CrossDomains>
    								<Url>*</Url>
    							</CrossDomains>
    						</HLS>
    						<DASH>
    							<SegmentDuration>5</SegmentDuration>
    							<SegmentCount>3</SegmentCount>
    							<CrossDomains>
    								<Url>*</Url>
    							</CrossDomains>
    							<!--
    								Enable DASH player to obtain UTCTiming from OME using /time?iso&ms API
    							-->
    							<UTCTiming>
    								<Scheme>urn:mpeg:dash:utc:http-xsdate:2014</Scheme>
    								<Value>/time?iso&amp;ms</Value>
    							</UTCTiming>
    						</DASH>
    						<LLDASH>
    							<SegmentDuration>5</SegmentDuration>
    							<CrossDomains>
    								<Url>*</Url>
    							</CrossDomains>
    							<!--
    								Use default options for UTCTiming
    									- scheme: urn:mpeg:dash:utc:http-xsdate:2014
    									- value: /time?iso&ms
    							-->
    							<UTCTiming />
    						</LLDASH>
    					</Publishers>
    				</Application>
    			</Applications>
    		</VirtualHost>
    	</VirtualHosts>
    </Server>
    
    
  • Origin out of sync --> trying to open second feed from edge.

    Origin out of sync --> trying to open second feed from edge.

    Describe the bug A clear and concise description of what the bug is.

    Orchestrator | orchestrator.cpp:1312 | Out of sync: origin: 0, domain: 1 (This is a bug)

    To Reproduce Steps to reproduce the behavior:

    1. Set Server.xml as follows '...' Edge.xml:

    `

    OvenMediaEngine edge *
    <!-- Settings for the ports to bind -->
    <Bind>
    	<Providers>
    		<!-- Currently, OME doesn't support using the specified port for OVT Provider -->
    		<OVT>
    			<Port>9001</Port>
    		</OVT>
    	</Providers>
    
    	<Publishers>
            <HLS>
    			<Port>${env:OME_HLS_STREAM_PORT:8090}</Port>
    			<!-- If you want to use TLS, specify the TLS port -->
    			<!-- <TLSPort>8443</TLSPort> -->
    		</HLS>
            <DASH>
    			<Port>${env:OME_DASH_STREAM_PORT:8090}</Port>
    			<!-- If you want to use TLS, specify the TLS port -->
    			<!-- <TLSPort>8443</TLSPort> -->
    		</DASH>
    		<WebRTC>
    			<Signalling>
    				<Port>${env:OME_SIGNALLING_PORT:3334}</Port>
    				<!-- If you want to use TLS, specify the TLS port -->
    				<!-- <TLSPort>5556</TLSPort> -->
    			</Signalling>
    			<IceCandidates>
    				<IceCandidate>${env:OME_ICE_CANDIDATES:*:10000-10005/udp}</IceCandidate>
    			</IceCandidates>
    		</WebRTC>
    	</Publishers>
    </Bind>
    
    <!-- P2P works only in WebRTC -->
    <!--
    <P2P>
    	<MaxClientPeersPerHostPeer>2</MaxClientPeersPerHostPeer>
    </P2P>
    -->
    
    <VirtualHosts>
    	<!-- You can use wildcard like this to include multiple XMLs -->
    	<VirtualHost include="VHost*.xml" />
    	<VirtualHost>
    		<Name>default</Name>
    
    		<!-- Settings for multi domain and TLS -->
    		<Domain>
    			<Names>
    				<!--
    					Domain names
    
    					<Name>stream1.airensoft.com</Name>
    					<Name>stream2.airensoft.com</Name>
    					<Name>*.sub.airensoft.com</Name>
    				-->
    			</Names>
    			<!--
    			<TLS>
    				<CertPath>path/to/file.crt</CertPath>
    				<KeyPath>path/to/file.key</KeyPath>
    				<ChainCertPath>path/to/file.crt</ChainCertPath>
    			</TLS>
    			-->
    		</Domain>
    
    		<SignedURL>
                <CryptoKey>${env:SIGNED_URL_CRYPTO_KEY:}</CryptoKey>
                <QueryStringKey>${env:SIGNED_URL_QUERY_KEY:authtoken}</QueryStringKey>
      </SignedURL>
    
    		<!-- Settings for ProxyPass (It can specify origin for each path) -->
    		<Origins>
    			<Origin>
    				<Location>/deep/</Location>
    				<Pass>
    					<Scheme>ovt</Scheme>
    					<Urls>
    						<Url>172.26.103.48:9000/deep/</Url>
    					</Urls>
    				</Pass>
    			</Origin>
    			<Origin>
    				<Location>/volans</Location>
    				<Pass>
    					<Scheme>ovt</Scheme>
    					<Urls>
    						<Url>172.26.5.170:9000/volans/</Url>
    					</Urls>
    				</Pass>
    			</Origin>
    			<Origin>
    				<Location>/loeve/</Location>
    				<Pass>
    					<Scheme>ovt</Scheme>
    					<Urls>
    						<Url>172.26.125.128:9000/loeve/</Url>
    					</Urls>
    				</Pass>
    			</Origin>
    		</Origins>
    	</VirtualHost>
    </VirtualHosts>
    
    ` I can open the feed of each origin. ws://172.26.103.48:3333/deep/simon -> opens and plays without issue ws://172.26.125.128:3333/loeve/ps -> opens and plays without issue

    Objective: Open the deep/simon feed and the loeve/ps from the Edge OME.

    1 ) I run the Edge OME and use demo.ovenplayer to open the deep/simon feed ws://172.16.10.100:3334/deep/simon (the 16 instead or 26 in the IP is correct) -> this feed will open without issues. 2) I than try to open in a sensor demo player ws://172.16.10.100:3334/loeve/ps and this does not work.

    3)-> if I alter the order, so first open the loeve/ps feed and after that the deep/simon feed it is that feed that does not work.

    So I am unable to to open feeds of two different origin servers.

    Expected behavior A clear and concise description of what you expected to happen.

    I expect both feeds to open.

    Logs Please upload the entire OvenMediaEngine.log. You may delete important personal information. Starting ovenmediaengine_edge_1 ... done Attaching to ovenmediaengine_edge_1 edge_1 | [2020-09-21 13:42:14.061] I 1 Config | config_manager.cpp:144 | Trying to set logfile in directory... (/var/log/ovenmediaengine) edge_1 | [2020-09-21 13:42:14.061] I 1 Config | config_manager.cpp:47 | Trying to load configurations... (edge_conf/Server.xml) edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:244 | OvenMediaEngine v0.10.4 is started on [9ce5a5c471cc] (Linux x86_64 - 5.4.0-40-generic, #44-Ubuntu SMP Tue Jun 23 00:01:04 UTC 2020) edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:246 | With modules: edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:247 | FFmpeg 3.4.7 OME edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:248 | Configuration: --prefix=/opt/ovenmediaengine --enable-gpl --enable-nonfree --extra-cflags=-I/opt/ovenmediaengine/include --extra-ldflags='-L/opt/ovenmediaengine/lib -Wl,-rpath,/opt/ovenmediaengine/lib' --extra-libs=-ldl --enable-shared --disable-static --disable-debug --disable-doc --disable-programs --disable-avdevice --disable-dct --disable-dwt --disable-error-resilience --disable-lsp --disable-lzo --disable-rdft --disable-faan --disable-pixelutils --disable-everything --enable-zlib --enable-libopus --enable-libvpx --enable-libfdk_aac --enable-libx264 --enable-encoder='libvpx_vp8,libvpx_vp9,libopus,libfdk_aac,libx264' --enable-decoder='aac,aac_latm,aac_fixed,h264' --enable-parser='aac,aac_latm,aac_fixed,h264' --enable-network --enable-protocol=tcp --enable-protocol=udp --enable-protocol=rtp --enable-demuxer=rtsp --enable-filter='asetnsamples,aresample,aformat,channelmap,channelsplit,scale,transpose,fps,settb,asettb' edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:249 | libavformat: 57.83.100 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:250 | libavcodec: 57.107.100 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:251 | libavutil: 55.78.100 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:252 | libavfilter: 6.107.100 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:253 | libswresample: 2.9.100 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:254 | libswscale: 4.8.100 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:255 | SRT: 1.3.3 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:256 | SRTP: libsrtp2 2.2.0 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:257 | OpenSSL: OpenSSL 1.1.0g 2 Nov 2017 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:258 | Configuration: compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR=""/opt/ovenmediaengine"" -DENGINESDIR=""/opt/ovenmediaengine/lib/engines-1.1"" -Wa,--noexecstack edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:259 | JsonCpp: 1.9.3 edge_1 | [2020-09-21 13:42:14.063] I 1 OvenMediaEngine | main.cpp:260 | jemalloc: 5.2.1-0-gea6b3e973b477b8061e0076bb257dbd7f3faa756 edge_1 | [2020-09-21 13:42:14.066] I 1 OvenMediaEngine | main.cpp:158 | Trying to create a MediaRouter module edge_1 | [2020-09-21 13:42:14.066] I 1 MediaRouter | media_router.cpp:40 | MediaRouter has been started. edge_1 | [2020-09-21 13:42:14.066] I 1 OvenMediaEngine | main.cpp:161 | Trying to create a WebRTC Publisher module edge_1 | [2020-09-21 13:42:14.066] I 1 Signalling.P2P | rtc_p2p_manager.cpp:27 | P2P is disabled in the configuration edge_1 | [2020-09-21 13:42:14.067] I 1 Ice | ice_port.cpp:89 | ICE port is bound to 0.0.0.0:10000/UDP (0x7f11eb45df90) edge_1 | [2020-09-21 13:42:14.067] I 1 Ice | ice_port.cpp:89 | ICE port is bound to 0.0.0.0:10001/UDP (0x7f11eb45e150) edge_1 | [2020-09-21 13:42:14.067] I 1 Ice | ice_port.cpp:89 | ICE port is bound to 0.0.0.0:10002/UDP (0x7f11eb45e310) edge_1 | [2020-09-21 13:42:14.067] I 1 Ice | ice_port.cpp:89 | ICE port is bound to 0.0.0.0:10003/UDP (0x7f11eb45e4d0) edge_1 | [2020-09-21 13:42:14.067] I 1 Ice | ice_port.cpp:89 | ICE port is bound to 0.0.0.0:10004/UDP (0x7f11eb45e690) edge_1 | [2020-09-21 13:42:14.067] I 1 Ice | ice_port.cpp:89 | ICE port is bound to 0.0.0.0:10005/UDP (0x7f11eb45e850) edge_1 | [2020-09-21 13:42:14.067] I 1 WebRTC | webrtc_publisher.cpp:91 | WebRTC Publisher is listening on 0.0.0.0:3334... edge_1 | [2020-09-21 13:42:14.067] I 1 Publisher | publisher.cpp:18 | WebRTC Publisher has been started. edge_1 | [2020-09-21 13:42:14.067] I 1 OvenMediaEngine | main.cpp:162 | Trying to create a HLS Publisher module edge_1 | [2020-09-21 13:42:14.068] I 1 HTTPPublisher | segment_publisher.cpp:62 | HLS Publisher is listening on 0.0.0.0:8090... edge_1 | [2020-09-21 13:42:14.068] I 1 Publisher | publisher.cpp:18 | HLS Publisher has been started. edge_1 | [2020-09-21 13:42:14.068] I 1 OvenMediaEngine | main.cpp:163 | Trying to create a MPEG-DASH Publisher module edge_1 | [2020-09-21 13:42:14.068] I 1 HTTPPublisher | segment_publisher.cpp:62 | DASH Publisher is listening on 0.0.0.0:8090... edge_1 | [2020-09-21 13:42:14.068] I 1 Publisher | publisher.cpp:18 | DASH Publisher has been started. edge_1 | [2020-09-21 13:42:14.068] I 1 OvenMediaEngine | main.cpp:164 | Trying to create a Low-Latency MPEG-DASH Publisher module edge_1 | [2020-09-21 13:42:14.068] I 1 HTTPPublisher | segment_publisher.cpp:62 | LLDASH Publisher is listening on 0.0.0.0:8090... edge_1 | [2020-09-21 13:42:14.068] I 1 Publisher | publisher.cpp:18 | LLDASH Publisher has been started. edge_1 | [2020-09-21 13:42:14.068] I 1 OvenMediaEngine | main.cpp:165 | Trying to create a OVT Publisher module edge_1 | [2020-09-21 13:42:14.068] I 1 Publisher | publisher.cpp:18 | OVTPublisher has been started. edge_1 | [2020-09-21 13:42:14.068] I 1 OvenMediaEngine | main.cpp:168 | Trying to create a Transcoder module edge_1 | [2020-09-21 13:42:14.068] I 1 Transcoder | transcoder.cpp:38 | Transcoder has been started. edge_1 | [2020-09-21 13:42:14.068] I 1 OvenMediaEngine | main.cpp:171 | Trying to create a MPEG-TS Provider module edge_1 | [2020-09-21 13:42:14.068] I 1 Provider | provider.cpp:35 | MpegtsProvider has been started. edge_1 | [2020-09-21 13:42:14.068] I 1 OvenMediaEngine | main.cpp:172 | Trying to create a RTMP Provider module edge_1 | [2020-09-21 13:42:14.069] I 1 Provider | provider.cpp:35 | RtmpProvider has been started. edge_1 | [2020-09-21 13:42:14.069] I 1 OvenMediaEngine | main.cpp:173 | Trying to create a OVT Provider module edge_1 | [2020-09-21 13:42:14.069] I 1 Provider | provider.cpp:35 | OvtProvider has been started. edge_1 | [2020-09-21 13:42:14.069] I 1 OvenMediaEngine | main.cpp:174 | Trying to create a RTSPC Provider module edge_1 | [2020-09-21 13:42:14.069] I 1 Provider | provider.cpp:35 | RtspcProvider has been started. edge_1 | [2020-09-21 13:42:14.069] I 1 OvenMediaEngine | main.cpp:177 | All modules are initialized successfully edge_1 | [2020-09-21 13:42:14.069] I 1 Monitor | monitoring.cpp:43 | Create HostMetrics(default) for monitoring edge_1 | [2020-09-21 13:42:21.708] I 15 Signalling | rtc_signalling_server.cpp:99 | New client is connected: <ClientSocket: 0x7f11c4401010, #22, state: 4, TCP, 172.16.15.50:51639> edge_1 | [2020-09-21 13:42:21.717] I 15 Orchestrator | orchestrator.cpp:862 | Trying to create an application: [#default#deep] edge_1 | [2020-09-21 13:42:21.717] I 15 Monitor | host_metrics.cpp:52 | Create ApplicationMetrics(#default#deep) for monitoring edge_1 | [2020-09-21 13:42:21.717] I 15 MediaRouter.App | media_router_application.cpp:32 | Created media route application. application id(0), (#default#deep) edge_1 | [2020-09-21 13:42:21.717] I 15 MediaRouter | media_router.cpp:70 | MediaRouter has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.719] I 15 Publisher | application.cpp:55 | WebRTC Publisher Application has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.719] I 15 Publisher | application.cpp:55 | HLS Publisher Application has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.719] I 15 Publisher | application.cpp:55 | DASH Publisher Application has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.720] I 15 Publisher | application.cpp:55 | LLDASH Publisher Application has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.720] I 15 Publisher | application.cpp:55 | OVTPublisher Application has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.720] I 15 Transcoder | transcoder.cpp:73 | Transcoder has created [dynamic][#default#deep] application edge_1 | [2020-09-21 13:42:21.720] I 15 Provider | application.cpp:46 | MpegtsProvider has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.721] I 15 Provider | application.cpp:46 | RtmpProvider has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.721] I 15 Provider | application.cpp:46 | OvtProvider has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.721] I 15 Provider | application.cpp:46 | RtspcProvider has created [#default#deep] application edge_1 | [2020-09-21 13:42:21.721] I 15 Orchestrator | orchestrator.cpp:1280 | Trying to pull stream [#default#deep/simon] from provider using origin map: PullProvider edge_1 | [2020-09-21 13:42:21.741] I 15 Provider | stream.cpp:49 | #default#deep/simon(100) has been started stream edge_1 | [2020-09-21 13:42:21.741] I 15 Provider | application.cpp:116 | #default#deep application has created 0 stream motor edge_1 | [2020-09-21 13:42:21.741] I 15 MediaRouter.App | media_router_application.cpp:205 | Trying to create a stream: [#default#deep/simon(100)] edge_1 | [2020-09-21 13:42:21.741] I 15 Monitor | stream.cpp:254 | edge_1 | [Stream Info] edge_1 | id(100), name(simon), SourceType(Ovt), Created Time (Mon Sep 21 13:42:21 2020) edge_1 | edge_1 | Video Track #0: Bypass(false) Bitrate(0b) codec(1, avc) resolution(1920x1080) framerate(25.00fps) timebase(1/90000) edge_1 | [2020-09-21 13:42:21.741] I 15 Monitor | application_metrics.cpp:56 | Create StreamMetrics(simon) for monitoring edge_1 | [2020-09-21 13:42:21.742] I 15 Publisher | stream.cpp:211 | WebRTC Publisher Application application has started [simon(100)] stream edge_1 | [2020-09-21 13:42:21.742] I 15 Publisher | stream.cpp:211 | HLS Publisher Application application has started [simon(100)] stream edge_1 | [2020-09-21 13:42:21.742] I 15 Publisher | stream.cpp:211 | DASH Publisher Application application has started [simon(100)] stream edge_1 | [2020-09-21 13:42:21.742] I 15 Publisher | stream.cpp:211 | LLDASH Publisher Application application has started [simon(100)] stream edge_1 | [2020-09-21 13:42:21.742] I 15 Publisher | stream.cpp:211 | OVTPublisher Application application has started [simon(100)] stream edge_1 | [2020-09-21 13:42:21.745] I 15 Provider | stream.cpp:36 | OvtProvider Application has started to play [simon(100)] stream edge_1 | [2020-09-21 13:42:21.745] I 15 Provider | stream_motor.cpp:130 | #default#deep/simon(100) stream has added to 0 StreamMotor edge_1 | [2020-09-21 13:42:21.745] I 15 Orchestrator | orchestrator.cpp:1302 | The stream was pulled successfully: [#default#deep/simon] (100) edge_1 | [2020-09-21 13:42:21.837] I 15 Monitor | stream_metrics.cpp:119 | A new session has started playing #default#deep/simon on the WebRTC publihser. WebRTC(1)/Stream total(1)/App total(1) edge_1 | [2020-09-21 13:42:21.845] W 15 Socket | socket_address.cpp:277 | An error occurred while resolve DNS for host [2bcf3f29-3140-4fcb-9267-2e3267f7a629.local] edge_1 | [2020-09-21 13:42:21.845] W 15 Socket | socket_address.cpp:84 | An error occurred: 2bcf3f29-3140-4fcb-9267-2e3267f7a629.local:52897 edge_1 | [2020-09-21 13:42:26.940] I 88 DASH | dash_packetizer.cpp:956 | [0x7f11c368a310] LLDASH segment is ready to stream [#default#deep/simon], segment duration: 5.000000s, count: 1 edge_1 | [2020-09-21 13:42:26.942] W 85 ov.Queue | queue.h:179 | [0x7f11c3685858] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:27.941] W 85 ov.Queue | queue.h:179 | [0x7f11c3685ad8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:27.941] W 85 ov.Queue | queue.h:179 | [0x7f11c3685d58] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:28.717] I 19 Signalling | rtc_signalling_server.cpp:99 | New client is connected: <ClientSocket: 0x7f11c4401290, #26, state: 4, TCP, 172.16.15.50:51649> edge_1 | [2020-09-21 13:42:28.726] I 19 Orchestrator | orchestrator.cpp:862 | Trying to create an application: [#default#loeve] edge_1 | [2020-09-21 13:42:28.726] I 19 Monitor | host_metrics.cpp:52 | Create ApplicationMetrics(#default#loeve) for monitoring edge_1 | [2020-09-21 13:42:28.727] I 19 MediaRouter.App | media_router_application.cpp:32 | Created media route application. application id(1), (#default#loeve) edge_1 | [2020-09-21 13:42:28.727] I 19 MediaRouter | media_router.cpp:70 | MediaRouter has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.728] I 19 Publisher | application.cpp:55 | WebRTC Publisher Application has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.728] I 19 Publisher | application.cpp:55 | HLS Publisher Application has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.728] I 19 Publisher | application.cpp:55 | DASH Publisher Application has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.729] I 19 Publisher | application.cpp:55 | LLDASH Publisher Application has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.729] I 19 Publisher | application.cpp:55 | OVTPublisher Application has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.729] I 19 Transcoder | transcoder.cpp:73 | Transcoder has created [dynamic][#default#loeve] application edge_1 | [2020-09-21 13:42:28.729] I 19 Provider | application.cpp:46 | MpegtsProvider has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.729] I 19 Provider | application.cpp:46 | RtmpProvider has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.730] I 19 Provider | application.cpp:46 | OvtProvider has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.730] I 19 Provider | application.cpp:46 | RtspcProvider has created [#default#loeve] application edge_1 | [2020-09-21 13:42:28.730] I 19 Orchestrator | orchestrator.cpp:1280 | Trying to pull stream [#default#loeve/ps] from provider using origin map: PullProvider edge_1 | [2020-09-21 13:42:30.947] I 19 Provider | stream.cpp:49 | #default#loeve/ps(100) has been started stream edge_1 | [2020-09-21 13:42:30.948] I 19 Provider | application.cpp:116 | #default#loeve application has created 0 stream motor edge_1 | [2020-09-21 13:42:30.948] I 19 MediaRouter.App | media_router_application.cpp:205 | Trying to create a stream: [#default#loeve/ps(100)] edge_1 | [2020-09-21 13:42:30.948] I 19 Monitor | stream.cpp:254 | edge_1 | [Stream Info] edge_1 | id(100), name(ps), SourceType(Ovt), Created Time (Mon Sep 21 13:42:28 2020) edge_1 | edge_1 | Video Track #0: Bypass(false) Bitrate(0b) codec(1, avc) resolution(1024x768) framerate(25.00fps) timebase(1/90000) edge_1 | [2020-09-21 13:42:30.948] I 19 Monitor | application_metrics.cpp:56 | Create StreamMetrics(ps) for monitoring edge_1 | [2020-09-21 13:42:30.948] I 19 Publisher | stream.cpp:211 | WebRTC Publisher Application application has started [ps(100)] stream edge_1 | [2020-09-21 13:42:30.948] I 19 Publisher | stream.cpp:211 | HLS Publisher Application application has started [ps(100)] stream edge_1 | [2020-09-21 13:42:30.948] I 19 Publisher | stream.cpp:211 | DASH Publisher Application application has started [ps(100)] stream edge_1 | [2020-09-21 13:42:30.948] I 19 Publisher | stream.cpp:211 | LLDASH Publisher Application application has started [ps(100)] stream edge_1 | [2020-09-21 13:42:30.948] I 19 Publisher | stream.cpp:211 | OVTPublisher Application application has started [ps(100)] stream edge_1 | [2020-09-21 13:42:30.992] I 19 Provider | stream.cpp:36 | OvtProvider Application has started to play [ps(100)] stream edge_1 | [2020-09-21 13:42:30.992] I 19 Provider | stream_motor.cpp:130 | #default#loeve/ps(100) stream has added to 0 StreamMotor edge_1 | [2020-09-21 13:42:30.992] C 19 Orchestrator | orchestrator.cpp:1312 | Out of sync: origin: 0, domain: 1 (This is a bug) edge_1 | [2020-09-21 13:42:30.993] E 19 Orchestrator | orchestrator.cpp:1319 | Could not pull stream [#default#loeve/ps] from provider: PullProvider edge_1 | [2020-09-21 13:42:30.993] I 19 Orchestrator | orchestrator.cpp:972 | Trying to delete an application: [#default#loeve] (1) edge_1 | [2020-09-21 13:42:30.993] I 19 Monitor | host_metrics.cpp:64 | Delete ApplicationMetrics(#default#loeve) for monitoring edge_1 | [2020-09-21 13:42:30.993] I 19 MediaRouter.App | media_router_application.cpp:164 | Unregistered observer. 0x7f1163047010 app(#default#loeve) type(3) edge_1 | [2020-09-21 13:42:30.993] I 19 MediaRouter.App | media_router_application.cpp:122 | Unregistered connector. 0x7f116304a108 app(#default#loeve) type(0) edge_1 | [2020-09-21 13:42:31.730] I 19 Provider | application.cpp:61 | RtspcProvider has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.730] I 19 MediaRouter.App | media_router_application.cpp:122 | Unregistered connector. 0x7f1163049708 app(#default#loeve) type(2) edge_1 | [2020-09-21 13:42:31.742] I 19 Provider | stream.cpp:55 | #default#loeve/ps(100) has been stopped playing stream edge_1 | [2020-09-21 13:42:31.742] I 19 MediaRouter.App | media_router_application.cpp:290 | Trying to delete a stream: [#default#loeve/ps(100)] edge_1 | [2020-09-21 13:42:31.743] I 19 Publisher | stream.cpp:241 | [ps(100)] WebRTC Publisher Application stream has been stopped edge_1 | [2020-09-21 13:42:31.743] I 19 Publisher | stream.cpp:241 | [ps(100)] HLS Publisher Application stream has been stopped edge_1 | [2020-09-21 13:42:31.743] I 19 Publisher | stream.cpp:241 | [ps(100)] DASH Publisher Application stream has been stopped edge_1 | [2020-09-21 13:42:31.743] I 19 Publisher | stream.cpp:241 | [ps(100)] LLDASH Publisher Application stream has been stopped edge_1 | [2020-09-21 13:42:31.744] I 19 Publisher | stream.cpp:241 | [ps(100)] OVTPublisher Application stream has been stopped edge_1 | [2020-09-21 13:42:31.744] I 19 Provider | application.cpp:61 | OvtProvider has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.744] I 19 MediaRouter.App | media_router_application.cpp:122 | Unregistered connector. 0x7f1163048d08 app(#default#loeve) type(0) edge_1 | [2020-09-21 13:42:31.744] I 19 Provider | application.cpp:61 | RtmpProvider has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.744] I 19 MediaRouter.App | media_router_application.cpp:122 | Unregistered connector. 0x7f1163048308 app(#default#loeve) type(0) edge_1 | [2020-09-21 13:42:31.744] I 19 Provider | application.cpp:61 | MpegtsProvider has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.746] I 19 MediaRouter.App | media_router_application.cpp:164 | Unregistered observer. 0x7f1163027828 app(#default#loeve) type(1) edge_1 | [2020-09-21 13:42:31.746] I 19 MediaRouter.App | media_router_application.cpp:122 | Unregistered connector. 0x7f1163027810 app(#default#loeve) type(1) edge_1 | [2020-09-21 13:42:31.746] I 19 Transcoder | transcoder.cpp:106 | Transcoder has deleted [dynamic][#default#loeve] application edge_1 | [2020-09-21 13:42:31.746] I 19 Publisher | application.cpp:77 | OVTPublisher Application has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.746] I 19 MediaRouter.App | media_router_application.cpp:164 | Unregistered observer. 0x7f116305c508 app(#default#loeve) type(0) edge_1 | [2020-09-21 13:42:31.747] I 19 Publisher | application.cpp:77 | LLDASH Publisher Application has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.747] I 19 MediaRouter.App | media_router_application.cpp:164 | Unregistered observer. 0x7f116306d908 app(#default#loeve) type(0) edge_1 | [2020-09-21 13:42:31.748] I 19 Publisher | application.cpp:77 | DASH Publisher Application has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.748] I 19 MediaRouter.App | media_router_application.cpp:164 | Unregistered observer. 0x7f116305b708 app(#default#loeve) type(0) edge_1 | [2020-09-21 13:42:31.748] I 19 Publisher | application.cpp:77 | HLS Publisher Application has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.748] I 19 MediaRouter.App | media_router_application.cpp:164 | Unregistered observer. 0x7f116305a908 app(#default#loeve) type(0) edge_1 | [2020-09-21 13:42:31.748] I 19 Publisher | application.cpp:77 | WebRTC Publisher Application has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.748] I 19 MediaRouter.App | media_router_application.cpp:164 | Unregistered observer. 0x7f11c442e908 app(#default#loeve) type(0) edge_1 | [2020-09-21 13:42:31.749] I 19 MediaRouter | media_router.cpp:88 | MediaRouter has deleted [#default#loeve] application edge_1 | [2020-09-21 13:42:31.749] I 19 MediaRouter.App | media_router_application.cpp:40 | Destroyed media router application. application id(1), (#default#loeve) edge_1 | [2020-09-21 13:42:31.749] E 19 Signalling | rtc_signalling_server.cpp:190 | Cannot find stream [#default#loeve/ps] edge_1 | [2020-09-21 13:42:31.749] I 19 Signalling | rtc_signalling_server.cpp:237 | Client is disconnected: <WebSocketClient: 0x7f1163006250, <ClientSocket: 0x7f11c4401290, #26, state: 4, TCP, 172.16.15.50:51649>> (#default#loeve / ps, ufrag: local: (N/A), remote: (N/A)) edge_1 | [2020-09-21 13:42:31.938] I 87 DASH | dash_packetizer.cpp:956 | [0x7f11c368a010] DASH segment is ready to stream [#default#deep/simon], segment duration: 5.000000s, count: 3 edge_1 | [2020-09-21 13:42:32.946] I 86 HLS | hls_packetizer.cpp:292 | HLS segment is ready for stream [#default#deep/simon], segment duration: 4.000000s, count: 3 edge_1 | [2020-09-21 13:42:34.254] W 85 ov.Queue | queue.h:179 | [0x7f11c3685858] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:35.229] I 15 Monitor | stream_metrics.cpp:144 | A session has been stopped playing #default#deep/simon on the WebRTC publihser. Concurrent Viewers[WebRTC(0)/Stream total(0)/App total(0)] edge_1 | [2020-09-21 13:42:35.229] I 15 Signalling | rtc_signalling_server.cpp:237 | Client is disconnected: <WebSocketClient: 0x7f11c3606250, <ClientSocket: 0x7f11c4401010, #22, state: 4, TCP, 172.16.15.50:51639>> (#default#deep / simon, ufrag: local: JZow5v, remote: VNxd) edge_1 | [2020-09-21 13:42:37.943] W 85 ov.Queue | queue.h:179 | [0x7f11c36855d8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:46.263] W 85 ov.Queue | queue.h:179 | [0x7f11c3685858] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:47.944] W 85 ov.Queue | queue.h:179 | [0x7f11c3685ad8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:48.262] W 85 ov.Queue | queue.h:179 | [0x7f11c3685d58] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:52.259] W 85 ov.Queue | queue.h:179 | [0x7f11c36855d8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:53.618] W 85 ov.Queue | queue.h:179 | [0x7f11c3685ad8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:42:54.943] W 85 ov.Queue | queue.h:179 | [0x7f11c3685d58] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:01.944] W 85 ov.Queue | queue.h:179 | [0x7f11c3685ad8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:02.955] W 85 ov.Queue | queue.h:179 | [0x7f11c3685d58] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:10.259] W 85 ov.Queue | queue.h:179 | [0x7f11c36855d8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:11.259] W 85 ov.Queue | queue.h:179 | [0x7f11c3685858] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:11.259] W 85 ov.Queue | queue.h:179 | [0x7f11c3685d58] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:12.939] W 85 ov.Queue | queue.h:179 | [0x7f11c3685ad8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:15.626] W 85 ov.Queue | queue.h:179 | [0x7f11c36855d8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:16.624] W 85 ov.Queue | queue.h:179 | [0x7f11c3685858] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:18.943] W 85 ov.Queue | queue.h:179 | [0x7f11c3685ad8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:18.943] W 85 ov.Queue | queue.h:179 | [0x7f11c3685d58] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:21.939] W 85 ov.Queue | queue.h:179 | [0x7f11c3685858] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:24.939] W 85 ov.Queue | queue.h:179 | [0x7f11c3685ad8] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:26.259] W 85 ov.Queue | queue.h:179 | [0x7f11c3685d58] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:26.953] W 85 ov.Queue | queue.h:179 | [0x7f11c3685858] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:36.623] W 85 ov.Queue | queue.h:179 | [0x7f11c3685858] WebRTC Publisher Application/#default#deep/simon StreamWorker Queue size has exceeded the threshold: queue: 100, threshold: 100 edge_1 | [2020-09-21 13:43:36.726] I 91 Provider | stream_motor.cpp:146 | #default#deep/simon(100) stream has deleted from 0 StreamMotor edge_1 | [2020-09-21 13:43:36.726] W 91 Provider | application.cpp:90 | #default#deep/simon(100) stream will be deleted becasue it hasn't been used for 60 seconds edge_1 | [2020-09-21 13:43:36.726] I 91 Provider | stream.cpp:55 | #default#deep/simon(100) has been stopped playing stream edge_1 | [2020-09-21 13:43:36.752] I 91 Provider | application.cpp:155 | #default#deep application has deleted 0 stream motor edge_1 | [2020-09-21 13:43:36.752] I 91 MediaRouter.App | media_router_application.cpp:290 | Trying to delete a stream: [#default#deep/simon(100)] edge_1 | [2020-09-21 13:43:36.752] I 91 Monitor | application_metrics.cpp:68 | Delete StreamMetrics(simon) for monitoring edge_1 | [2020-09-21 13:43:36.752] I 91 Monitor | stream_metrics.cpp:31 | edge_1 | [Stream Info] edge_1 | id(100), name(simon), SourceType(Ovt), Created Time (Mon Sep 21 13:42:21 2020) edge_1 | edge_1 | Video Track #0: Bypass(false) Bitrate(0b) codec(1, avc) resolution(1920x1080) framerate(25.00fps) timebase(1/90000) edge_1 | Elapsed time to connect to origin server : 16.490535 ms edge_1 | Elapsed time in response from origin server : 2.507940 ms edge_1 | edge_1 | edge_1 | >> Statistics edge_1 | Last update time : Mon Sep 21 13:43:36 2020, Last sent time : Mon Sep 21 13:42:35 2020 edge_1 | Bytes in : 34.37MB, Bytes out : 13.07MB, Concurrent connections : 0, Max connections : 1 (Mon Sep 21 13:42:21 2020) edge_1 | edge_1 | >>>> By publisher edge_1 | - Unknown : Bytes out(0B) Concurrent Connections (0) edge_1 | - WebRTC : Bytes out(13.07MB) Concurrent Connections (0) edge_1 | - RTMP : Bytes out(0B) Concurrent Connections (0) edge_1 | - HLS : Bytes out(0B) Concurrent Connections (0) edge_1 | - DASH : Bytes out(0B) Concurrent Connections (0) edge_1 | - LLDASH : Bytes out(0B) Concurrent Connections (0) edge_1 | - Ovt : Bytes out(0B) Concurrent Connections (0) edge_1 | edge_1 | [2020-09-21 13:43:36.753] I 91 Publisher | stream.cpp:241 | [simon(100)] WebRTC Publisher Application stream has been stopped edge_1 | [2020-09-21 13:43:36.753] I 91 Publisher | stream.cpp:241 | [simon(100)] HLS Publisher Application stream has been stopped edge_1 | [2020-09-21 13:43:36.754] I 91 Publisher | stream.cpp:241 | [simon(100)] DASH Publisher Application stream has been stopped edge_1 | [2020-09-21 13:43:36.754] I 91 Publisher | stream.cpp:241 | [simon(100)] LLDASH Publisher Application stream has been stopped edge_1 | [2020-09-21 13:43:36.756] I 91 Publisher | stream.cpp:241 | [simon(100)] OVTPublisher Application stream has been stopped ^CGracefully stopping... (press Ctrl+C again to force) Stopping ovenmediaengine_edge_1 ... done

    Server (please complete the following information):

    • OS: [e.g. iOS]
    • OvenMediaEngine Version: [e.g. v0.10.1]
    • Branch: [e.g. dev]

    Player (please complete the following information): Chrome -> demo.ovenplayer.

    Additional context Add any other context about the problem here.

  • Load Balancer OME with nginx, maybe a OME BUG

    Load Balancer OME with nginx, maybe a OME BUG

    I am trying to use nginx as a load balancer for OME (webrtc) but ovenplayer tells me it tells me it has failed

    WebRTCLoader.js: 622 WebSocket connection to 'ws: //sub.domain.com: 8081 / conectar / endirecto / stream_1280' failed

    The question is that I already have it configured and I do not know what the problem is, or nginx does not work with OME

    nginx.conf

    http {
    .
    .
    .
    .
    
    upstream servers_webrtc {
            server origen01.domain.com:3333 max_conns=200;
           server edge01.domain.com:3333 max_conns=200;
        #i've trayed with ip too
    }
    .
    .
    .
    server {
        listen      <public ip>:8081;
        server_name sub.domain.com ;
    
        #modsecurity on;
        #modsecurity_rules_file /etc/nginx/modsec/main.conf;
    
    location /conectar/ {
                # prevents 502 bad gateway error
                proxy_buffers 8 32k;
                proxy_buffer_size 64k;
                proxy_pass http://servers_webrtc;
    
                # enables WS support
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_read_timeout 999999999;
            }
    
    }
    

    my origin webrtc is ws://origen01.domain.com:3333/endirecto/stream_1280/ ws://origen01.domain.com:3333/endirecto/stream_640/ and my edge is ws://edge01.domain.com:3333/endirecto/stream_1280/ ws://edge01.domain.com:3333/endirecto/stream_640/

    i will apreciate some of help, and if nginx does not work with OME, which peasy to use Load Balancer would you recommend me with a small example .. thank you very much.

    as well with hls,

    really thanks

  • SRT input support

    SRT input support

    SRT is already being used between the origin and edge servers, but it would be interesting to have input support as well. Are SRT input support planned for v1.0? OBS Studio are planning to support SRT output as of version 25.0, and the code is already supported in the release candidates.

    So far I can see rtmp and rtsp support in the src/projects/providers/ folder of the development branch.

    Thank you so much for providing the ovenmediaengine server! I spent days looking for optimal solutions for webrtc livestreaming with sub second latencies, and ovenmediaengine is far ahead of even very expensive market leaders. You guys are a blessing, and it is a joy to see it being actively developed.

  • Adaptive bitrate streaming for HLS, (LL-)MPEG-DASH

    Adaptive bitrate streaming for HLS, (LL-)MPEG-DASH

    In the documentation it is mentioned that OME does currently not support adaptive streaming for HLS, MPEG-DASH but that it may be updated soon. Can you give an indication where this is on your list of priorities? Is this a something that will happen this year?

    This is probably not a small feature to add, but is it something you would accept pull requests for or other collaboration on?

  • Help needed to add rtsp pull stream.

    Help needed to add rtsp pull stream.

    I am new to oven media engine and i have followed this guide to add cctv rtsp stream to oven media engine. I have added

    <VirtualHost>
    			<Name>default</Name>
    
    			<Domain>
    				<Names>
    					<Name>*</Name>
    				</Names>
    			</Domain>
    			
    			<Origins>
    				<Origin>
    					<Location>/app_name/rtsp_stream_name</Location>
    					<Pass>
    						<Scheme>rtsp</Scheme>
    						<Urls><Url>192.168.0.200:554/</Url></Urls>
    					</Pass>
    				</Origin>
    			</Origins>
    		</VirtualHost>
    

    to /var/lib/docker/volumes/ome-origin-conf/_data/Server.xml. And i have got error.

    [2022-01-19 13:52:44.825] E [OvenMediaEngine:1] OvenMediaEngine | main.cpp:264  | An error occurred while load config: [Config] Unknown item found: Server.VirtualHosts.VirtualHost.Domain in origin_conf/Server.xml
    [2022-01-19 13:52:47.576] I [OvenMediaEngine:1] Config | config_manager.cpp:273  | Trying to set logfile in directory... (/var/log/ovenmediaengine)
    [2022-01-19 13:52:47.576] I [OvenMediaEngine:1] Config | config_manager.cpp:295  | Trying to load configurations... (origin_conf/Server.xml)
    [2022-01-19 13:52:47.606] E [OvenMediaEngine:1] OvenMediaEngine | main.cpp:264  | An error occurred while load config: [Config] Unknown item found: Server.VirtualHosts.VirtualHost.Domain in origin_conf/Server.xml
    

    I have tried to change name but the same result. Please help me i am tring to stream rtsp to webrtc.

  • Blackmagic Web presenter HD connection issue with OME

    Blackmagic Web presenter HD connection issue with OME

    Hello,

    I tried using a blackmagic web presenter HD to connect to OME, and it didn't work. I found a similar issue posted a while ago from someone using an atem mini pro and the behavior is the same, checking the logs shows the same behavior of a sort of loop, where the web presenter HD connects, attempts to create a stream, disconnects and repeats it all over again.

    • OS: Ubuntu 18
    • OvenMediaEngine Version: 0.12.1

    here is the link to the other post: https://github.com/AirenSoft/OvenMediaEngine/issues/366

    I'd be happy to send any reports do do further testing to help fix this!

  • The WebRTC fails to push the flow again after the network is disconnected. Procedure

    The WebRTC fails to push the flow again after the network is disconnected. Procedure

    Describe the bug After WebRTC is disconnected from the network, the stream is pushed again. When the client requests offer, the server responds with an error code of 404

    To Reproduce Steps to reproduce the behavior:

    1. WebRTC pushes the flow normally
    2. Remove the network cable
    3. Plug it in
    4. Re-push stream (same webrTC push stream address)
    5. When the stream client requests an offer, the server responds 404
    6. Wait about 10 minutes for the flow to resume

    image image

    Expected behavior I want to be able to push the stream again

    OME Config default configuration

    Player (please complete the following information):

    • Device: pc
    • OS: windows11
    • Browser:Google Chrome 96.0.4664.45
    • OvenMediaEngine Version: v0.12.7
    • push tool:OvenLiveKit-Web v1.0.2

    Additional context Is it possible that OME cannot determine whether the WebSocket connection to the client has been disconnected?

  • Master commit 5651c10 is broken

    Master commit 5651c10 is broken

    Both @basisbit and I have noticed that the latest 5651c10 commit has a critical issue, crashing OME immediately when a stream starts. The issue is similar to what was reported on #357 but now seems to happen with all streams.

    @basisbit I stupidly didn't grab a log before reverting my test environment. Do you have one by chance?

  • Sending WebRTC Input with Gstreamer Signalling Error

    Sending WebRTC Input with Gstreamer Signalling Error

    I am currently trying to setup a Gstreamer Pipeline that sends A/V Streams to Ovenmedia. This does seem to work but Ovenmedia logs about the Session expiring and promptly disconnects my Session. Before the Session expires Playback in the Player does work.

    Could you maybe point me in the right direction which step of the Signalling I am missing or what could be causing this?

    OvenmediaEngine log: https://pastebin.com/vMsbMHPF

    answer SDP: https://pastebin.com/c9MxvGMP Since gstreamer does not seem to add the ice-ufrag to its candidates I manually added those candidate example:

    {"candidates": [{"candidate": "candidate:1 1 UDP 2015363327 172.25.208.148 40788 typ host ufrag irtMLF6z62g77gEoUflHhjI4hGD3Elqk", "sdpMLineIndex": 0, "sdpMid": "isLdaI"}], "command": "candidate", "id": 1076537548, "peer_id": 0}

    Stun Binding: image

    Env:

    • Ubuntu 20.04
    • Release 0.13.2 and latest Master
  • RTP pull from Davinci Resolve

    RTP pull from Davinci Resolve

    Is your feature request related to a problem? Please describe.

    Davinci Resolve, a popular color correction software, has recently released v18. In that version, they announced the Resolve Remote Monitoring Solution. I'm still in contact with Blackmagic Design in order to get specifics on the technology. But from my investigation, it's RTP based.

    Describe the solution you'd like

    Since OME already has the ability to pull RTSP from origin servers, I was wondering how difficult it would be to enable a connection to Davinci Resolve and have OME pull that stream.

  • Multiple synchronized videos in LLHLS

    Multiple synchronized videos in LLHLS

    PROBLEM Right now, each of our streaming boxes delivers three simultaneous feeds to OME which are then played back with OMP. On WebRTC this works fine, and they stay synchronized.

    However on LLHLS, even though it works fine and the catchup mechanisms attempt and succeed to sync the videos, sometimes after a while or even on fresh starts one of the three videos will be consistently and significantly delayed from the other two (a full slice?).

    Streamer -(1)-> OME -(2)-> Players

    I suspect there's two problematic areas here, and with LLHLS (2) is where the problem's at.

    EXPECTATION The three videos stay mostly synchronized, with some catchup action here and there to be expected.

    ENVIRONMENTAL INFORMATION

    • OvenMediaEngine Information airensoft/ovenmediaengine/0.14.2 with host network.

    • Encoder information We use rtsp-simple-server to manage our feeds, the following setup is our fake testing configuration which generates three test videos.

    ./rtsp-simple-server configuration.yaml

    configuration.yaml

    paths:
    
      fixed:
        runOnInit: ffmpeg -re -f lavfi -i testsrc2=d=3600:s=1280x720:r=24,format=yuv420p -f lavfi -i sine=f=440:b=4 -shortest -c:v libx264 -vf format=yuv420p -preset ultrafast -crf 32 -bf 0 -an -f rtsp rtsp://localhost:$RTSP_PORT/$RTSP_PATH
        runOnInitRestart: yes
        runOnReady: ffmpeg -i rtsp://localhost:$RTSP_PORT/fixed -c copy -an -f flv "rtmp://streamingserver.dev:1935/app/cam1"
        runOnReadyRestart: yes
    
      ptz:
        runOnInit: ffmpeg -re -f lavfi -i testsrc2=d=3600:s=1280x720:r=24,format=yuv420p -f lavfi -i sine=f=440:b=4 -shortest -c:v libx264 -vf format=yuv420p -preset ultrafast -crf 32 -bf 0 -an -f rtsp rtsp://localhost:$RTSP_PORT/$RTSP_PATH
        runOnInitRestart: yes
        runOnReady: ffmpeg -i rtsp://localhost:$RTSP_PORT/ptz -c copy -an -f flv "rtmp://streamingserver.dev:1935/app/cam2"
        runOnReadyRestart: yes
    
      desktop:
        runOnInit: ffmpeg -re -f lavfi -i testsrc2=d=3600:s=1280x720:r=24,format=yuv420p -f lavfi -i sine=f=440:b=4 -shortest -c:v libx264 -vf format=yuv420p -preset ultrafast -crf 32 -bf 0 -an -f rtsp rtsp://localhost:$RTSP_PORT/$RTSP_PATH
        runOnInitRestart: yes
        runOnReady: ffmpeg -i rtsp://localhost:$RTSP_PORT/desktop -c copy -an -f flv "rtmp://streamingserver.dev:1935/app/desktop"
        runOnReadyRestart: yes
    
    • Player information No errors

    SETUP INFORMATION AND LOGS OME is proxied with Traefik, it's not ideal because HTTP2 internally from traefik to ome isn't used. I also interested in other people's setups for this, Traefik should support proxying the h2 port but haven't had time to change it.

        labels:
          - traefik.enable=true
    
          - traefik.http.routers.ome.entryPoints=web-secure
          - traefik.http.routers.ome.rule=Host(`ome.ome-test-2.ourdomain.dev`)
          - traefik.http.services.ome.loadbalancer.server.port=8080
          - traefik.http.routers.ome.service=ome
    
          - traefik.http.routers.ome-webrtc.entrypoints=web-secure
          - traefik.http.routers.ome-webrtc.rule=Host(`webrtc.ome-test-2.ourdomain.dev`)
          - traefik.http.services.ome-webrtc.loadbalancer.server.port=3333
          - traefik.http.routers.ome-webrtc.service=ome-webrtc
    
    
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <Server version="8">
    	<Name>OvenMediaEngine</Name>
    	<!-- Host type (origin/edge) -->
    	<Type>origin</Type>
    	<!-- Specify IP address to bind (* means all IPs) -->
    	<IP>*</IP>
    	<PrivacyProtection>false</PrivacyProtection>
    	<!-- 
    	To get the public IP address(mapped address of stun) of the local server. 
    	This is useful when OME cannot obtain a public IP from an interface, such as AWS or docker environment. 
    	If this is successful, you can use ${PublicIP} in your settings.
    	-->
    	<StunServer>stun.l.google.com:19302</StunServer>
    
    	<!-- Settings for the ports to bind -->
    	<Bind>
    		<!-- Enable this configuration if you want to use API Server -->
    		
    		<Managers>
    			<API>
    				<Port>${env:OME_API_PORT:8081}</Port>
    				<WorkerCount>1</WorkerCount>
    			</API>
    		</Managers>
    		
    		<Providers>
    			<!-- Push providers -->
    			<RTMP>
    				<Port>${env:OME_RTMP_PROV_PORT:1935}</Port>
    				<WorkerCount>1</WorkerCount>
    			</RTMP>
    			<SRT>
    				<Port>${env:OME_SRT_PROV_PORT:9999}</Port>
    				<WorkerCount>1</WorkerCount>
    			</SRT>
    		</Providers>
    
    		<Publishers>
    			<!-- The OVT is protocol for ORIGIN-EDGE -->
    			<OVT>
    				<Port>${env:OME_ORIGIN_PORT:9000}</Port>
    				<WorkerCount>1</WorkerCount>
    			</OVT>
                            <LLHLS>
    				<Port>8080</Port>
    				<WorkerCount>1</WorkerCount>
    	  		</LLHLS>
    			<WebRTC>
    				<Signalling>
    					<Port>${env:OME_SIGNALLING_PORT:3333}</Port>
    					<WorkerCount>1</WorkerCount>
    					<!-- If you want to use TLS, specify the TLS port -->
    					<!-- <TLSPort>3334</TLSPort> -->
    				</Signalling>
    				<IceCandidates>
    					<TcpRelay>${env:OME_TCP_RELAY_ADDRESS:*:3478}</TcpRelay>
    					<TcpForce>true</TcpForce>
    					<TcpRelayWorkerCount>1</TcpRelayWorkerCount>
    					<IceCandidate>${env:OME_ICE_CANDIDATES:*:10006/udp}</IceCandidate>
    				</IceCandidates>
    			</WebRTC>
    		</Publishers>
    	</Bind>
    
    <!--
    		Enable this configuration if you want to use API Server
    		
    		<AccessToken> is a token for authentication, and when you invoke the API, you must put "Basic base64encode(<AccessToken>)" in the "Authorization" header of HTTP request.
    		For example, if you set <AccessToken> to "ome-access-token", you must set "Basic b21lLWFjY2Vzcy10b2tlbg==" in the "Authorization" header.
    	-->
    	
    	<Managers>
    		<Host>
    			<Names>
    				<Name>*</Name>
    			</Names>
    	<!--		<TLS>
    				<CertPath>path/to/file.crt</CertPath>
    				<KeyPath>path/to/file.key</KeyPath>
    				<ChainCertPath>path/to/file.crt</ChainCertPath>
    			</TLS> -->
    		</Host>
    		<API>
    			<AccessToken>ome-access-token</AccessToken>
    	<!--		<CrossDomains>
    				<Url>*.airensoft.com</Url>
    				<Url>http://*.sub-domain.airensoft.com</Url>
    				<Url>http?://airensoft.*</Url>
    			</CrossDomains> -->
    		</API>
    	</Managers>
    	
    
    	<VirtualHosts>
    		<!--
    			You can include multiple XML files by doing the following:
    			<VirtualHost include="sites-enabled/*.xml" />
    		-->
    		<VirtualHost include="VHost*.xml" />
    		<VirtualHost>
    			<Name>default</Name>
    			<!--Distribution is a value that can be used when grouping the same vhost distributed across multiple servers. This value is output to the events log, so you can use it to aggregate statistics. -->
    			<Distribution>ovenmediaengine.com</Distribution>
    			
    			<!-- Settings for multi ip/domain and TLS -->
    			<Host>
    				<Names>
    					<!-- Host names
    						<Name>stream1.airensoft.com</Name>
    						<Name>stream2.airensoft.com</Name>
    						<Name>*.sub.airensoft.com</Name>
    						<Name>192.168.0.1</Name>
    					-->
    					<Name>*</Name>
    				</Names>
    				<!--
    				<TLS>
    					<CertPath>path/to/file.crt</CertPath>
    					<KeyPath>path/to/file.key</KeyPath>
    					<ChainCertPath>path/to/file.crt</ChainCertPath>
    				</TLS>
    				-->
    			</Host>
    
    			<!-- Refer https://airensoft.gitbook.io/ovenmediaengine/signedpolicy
    			<SignedPolicy>
    				<PolicyQueryKeyName>policy</PolicyQueryKeyName>
    				<SignatureQueryKeyName>signature</SignatureQueryKeyName>
    				<SecretKey>aKq#1kj</SecretKey>
    
    				<Enables>
    					<Providers>rtmp,webrtc,srt</Providers>
    					<Publishers>webrtc,hls,dash,lldash</Publishers>
    				</Enables>
    			</SignedPolicy>
    			-->
    
    			<!-- Settings for applications -->
    			<Applications>
    				<Application>
    					<Name>app</Name>
    					<!-- Application type (live/vod) -->
    					<Type>live</Type>
    
    					<OutputProfiles>
    						<OutputProfile>
    							<Name>bypass_stream</Name>
    							<OutputStreamName>${OriginStreamName}</OutputStreamName>
    							<Encodes>
    								<Audio>
    									<Bypass>true</Bypass>
    								</Audio>
                							<Video>
    							               <Bypass>true</Bypass>
    						               </Video>
    								<!-- <Video>
    									<Bypass>false</Bypass>
    									<Codec>h264</Codec>
    									<Bitrate>3000000</Bitrate>
    								</Video> -->
    								<Audio>
    									<Codec>opus</Codec>
    									<Bitrate>128000</Bitrate>
    									<Samplerate>48000</Samplerate>
    									<Channel>2</Channel>
    								</Audio>
    							</Encodes>
    						</OutputProfile>
    					</OutputProfiles>
    
    					<Providers>
    						<OVT />
    						<WebRTC />
    						<RTMP />
    						<SRT />
    					</Providers>
    
    					<Publishers>
    						<AppWorkerCount>1</AppWorkerCount>
    						<StreamWorkerCount>8</StreamWorkerCount>
    						<OVT />
    						<WebRTC>
    							<Timeout>30000</Timeout>
    							<Rtx>false</Rtx>
    							<Ulpfec>false</Ulpfec>
    							<JitterBuffer>false</JitterBuffer>
    						</WebRTC>
    						<LLHLS>
    							<ChunkDuration>0.2</ChunkDuration>
    							<SegmentDuration>6</SegmentDuration>
    							<SegmentCount>10</SegmentCount>
    							<CrossDomains>
    								<Url>*</Url>
    							</CrossDomains>
    						</LLHLS>
    						<FILE>
    	       					<RootPath>/recordings</RootPath>
    							<FilePath>/${VirtualHost}/${Application}/${Stream}/${StartTime:YYYYMMDDhhmmss}_${EndTime:YYYYMMDDhhmmss}.ts</FilePath>
    							<InfoPath>/${VirtualHost}/${Application}/${Stream}.xml</InfoPath>
    						</FILE>
    					</Publishers>
    				</Application>
    			</Applications>
    		</VirtualHost>
    	</VirtualHosts>
    </Server>
    
  • Suggestion to add an official ARM-based Docker container

    Suggestion to add an official ARM-based Docker container

    Is your feature request related to a problem? Please describe. Due to ARM processors often being more efficient, cloud providers are providing ARM-based servers at a lower price than x64. ARM is also increasing in popularity in general.

    Describe the solution you'd like I suggest having an official ARM-based Docker container, which can be run at cloud providers with potentially the same performance but with lower costs. It could also be run on home computers with ARM chips.

  • Transcoding issues in docker with Maxwell GPUs GTX9x0 series

    Transcoding issues in docker with Maxwell GPUs GTX9x0 series

    Describe the bug Using a Geforce GTX9x0 series card the following error is produced during transcoding: Failed to configure output pad on Parsed_scale_cuda_2

    To Reproduce Steps to reproduce the behaviour:

    1. Get a computer with a GTX9x0 GPU (Maxwell) (I'm using GTX950)
    2. Build docker image with GPU support
    3. Start a stream with transcoding

    Expected behaviour Transcoding should work as expected.

    Logs

    D [Dech264NV:53] FFmpeg | third_parties.cpp:125  | [AVFilter: 0x7fa9a86d3ec0] Calling cu->cuModuleLoadData(&s->cu_module, scaler_ptx)
    E [Dech264NV:53] FFmpeg | third_parties.cpp:111  | [AVFilter: 0x7fa9a86d3ec0] cu->cuModuleLoadData(&s->cu_module, scaler_ptx) failed
    E [Dech264NV:53] FFmpeg | third_parties.cpp:111  | [AVFilter: 0x7fa9a86d3ec0]  -> CUDA_ERROR_INVALID_PTX: a PTX JIT compilation failed
    E [Dech264NV:53] FFmpeg | third_parties.cpp:111  | [AVFilter: 0x7fa9a86d3ec0] 
    E [Dech264NV:53] FFmpeg | third_parties.cpp:111  | [AVFilter: 0x7fa9a86d3ec0] Failed to configure output pad on Parsed_scale_cuda_2
    

    Server (please complete the following information):

    • Standard docker image running on docker host with GXT900 series GPU and all Nvidia docker drivers setup as from the guide.

    Solution The issue is with the build of FFMPEG and hardcoded drive versions. GTX900 series need version 52 whereas version 60 is hardcoded in the build of the container. The following would work for any other Maxwell architecture users that are struggling:

    --- a/misc/prerequisites.sh
    +++ b/misc/prerequisites.sh
    @@ -232,8 +232,8 @@ install_ffmpeg()
         mkdir -p ${DIR} && \
         cd ${DIR} && \
         curl -sLf https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n${FFMPEG_VERSION}.tar.gz | tar -xz --strip-components=1 && \
    -    sed -i 's/compute_30/compute_60/g' ./configure && \
    -    sed -i 's/sm_30/sm_60/g' ./configure && \
    +    sed -i 's/compute_30/compute_52/g' ./configure && \
    +    sed -i 's/sm_30/sm_52/g' ./configure && \
         PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${PREFIX}/lib64/pkgconfig:${PREFIX}/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH} ./configure \
         --prefix="${PREFIX}" \
         --extra-cflags="-I${PREFIX}/include ${ADDI_CFLAGS}"  \
    

    As the above is a temporary fix for Maxwell users there would probably need to be a solution where we could either override the architecture with either an optional build parameter or do some black magic where prerequisites.sh would be able to detect the minimum version required itself.

    See the following link for a list of GPU architectures with their supported compute capabilities: https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/

    Extra I can do a quick PR with an optional docker build parameter for the optional compute version number if that is decent enough?

  • query by source signal refresh rate.

    query by source signal refresh rate.

    Sometimes, with signals HDMI coming from video sources with 59.94HZ (nearly 60) p or i frame rates, OME has problems with mpeg2 TS input and HLS playback. It seems that the packets arrive out of order and the audio is distorted. It's even hard to get connection to stream. when the refresh rate of the video signal is exactly 50 or 60hz there is no problem. maybe the problem is attributable to the encoder of the HDMI signal and not to OME?

yangwebrtc is a self-developed rtc architecture supporting Webrtc/Srt/Rtmp, including a variety of video and audio codecs and processing, etc.
yangwebrtc is a self-developed rtc architecture supporting Webrtc/Srt/Rtmp, including a variety of video and audio codecs and processing, etc.

YangWebrtc Overview yangwebrtc是一个自主研发的支持Webrtc/Srt/Rtmp的rtc架构,包含多种视音频编解码和处理等。 支持视频会议、高清录播直播、直播互动等多种视音频应用。 可用于远程教育、远程医疗、指挥调度、安防监控、影视录播、协同办公、直播互动等多种行业应用

Jun 15, 2022
media server based on c++11, support webrtc/rtmp/httpflv/websocket flv

cpp_media_server A media server is writen by C++11, and the network io is writen by Boost.Asio. It support rtmp/httpflv/websocket(flv)/webrtc. preinst

Jun 16, 2022
Even newer Custom Firmware for Xiaomi Cameras based on Hi3518ev200 Chipset. It includes free RTSP, ONVIF and other improvements based on the work by roleoroleo
Even newer Custom Firmware for Xiaomi Cameras based on Hi3518ev200 Chipset. It includes free RTSP, ONVIF and other improvements based on the work by roleoroleo

Why this Yi-Hack-V5 firmware? The answer is simple: missing updates, RTSP and not based on the latest stock firmware (which features improvements and

Jun 11, 2022
Use rtsp protocol to push local H265 video encoding files

rtspServerH265 Use rtsp protocol to push local H265 video encoding files 项目介绍 C++11实现的RTSP服务器和推流器。主要完成对H265视频编码文件的RTSP推流 使用说明 1.编译并运行程序; 2.打开VLC软件,在媒体

May 18, 2022
RTSP Wasm Player
RTSP Wasm Player

RTSP Wasm Player Overview # RTSP WebSocket Proxy RTSP/Webcam/File > FFmpeg open > Packets > WebSocket # WS Wasm Player WebSocket > Packets > Wasm FFm

Jun 8, 2022
Smartstreaming is a high-performance and scalable streaming media server.

1. introduction Smartstreaming is a high-performance and scalable streaming media server. 2. design | io | Coroutine | | transport | tcp/udp/srt/quic

Jan 7, 2022
Pear - WebRTC Toolkit for IoT/Embedded Device

Pear is a WebRTC SDK written in C. The SDK aims to integrate IoT/Embedded device with WebRTC applications.

Jun 16, 2022
webrtc c++ library for mediasoup with full sfu c++ demo
webrtc c++ library for mediasoup with full sfu c++ demo

项目说明: 本项目是基于mediasoup v3 版本 webrtc m84版本 的sfu的js版本修改成的c++版本,支持和js版本一样的完整demo功能,但是本项目是直接把worker进程代码集成 到了demo可以直接代码级别的调用,支持VC2019,xcode,CLion的开发环境,可以直接断

Jun 19, 2022
Yangwebrtc - Webrtc Libary for PC, non-google lib
Yangwebrtc - Webrtc Libary for PC, non-google lib

MetaRTC(yangwebrtc) Overview MetaRTC(yangwebrtc)是一个自主研发的支持Webrtc/Srt/Rtmp的rtc架构,包含多种视音频编解码和处理等。 yangwebrtc为PC版本 metaRTC为嵌入式版本 https://github.com/metar

Jun 15, 2022
Program for IP TV streaming on the network via HTTP

msd Rozhuk Ivan [email protected] 2011 - 2021 msd - Multi stream daemon. Program for organizing IP TV streaming on the network via HTTP. Licence BSD

May 11, 2022
Hack to allow live streaming from wyze cameras to vlc or mpv on your desktop.
Hack to allow live streaming from wyze cameras to vlc or mpv on your desktop.

Wyze Cam Live Streaming This is a hack to allow live streaming from a wyze cam on your local network. Installation - New! The simplest fix for wyze ev

Jun 23, 2022
a simple example of video streaming with a ESP32 AI Thinker
a simple example of video streaming with a ESP32 AI Thinker

esp32-video-streaming its a simple camera system that im trying to make for fun I want to make an async server but idk it doesnt works correctly and w

Mar 9, 2022
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.

Video Stabilization Contents General Info Installation To Do General Info Video stabilization is a software-based approach in real-time to eliminating

Mar 7, 2022
Console based Streaming Music Player [W.I.P]

?? quanta It's a command line music player that can streams same music to multiple devices, hence creating a surround sound system. Or just use it as

Jan 27, 2022
A UE4 plugin used ffmpeg library to record/publish game viewport output and in-game audio.

Streaming A UE4 plugin used ffmpeg library to record/publish game viewport output and in-game audio. GPL license beacuse used ffmpeg. Structures GameV

Feb 25, 2022
FFmpeg Kit for applications. Supports Android, Flutter, iOS, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.
FFmpeg Kit for applications. Supports Android, Flutter, iOS, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.

FFmpeg Kit for applications. Supports Android, Flutter, iOS, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.

Jun 18, 2022
PowerVS is a standalone broadcast video server based on ffmpeg
PowerVS is a standalone broadcast video server based on ffmpeg

PowerVS PowerVS is a standalone broadcast video server based on ffmpeg ?? Table of Contents About Getting Started Running the tests Usage Development

Mar 17, 2022
A pure C linux MJPEG over HTTP server

mjpeg2http A pure C linux MJPEG over HTTP server Summary mjpeg2http is a minimalistic server primarily targeted to run on embedded computers, like rou

Apr 21, 2022
SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181.
SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181.

SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181.

Jun 23, 2022
yangwebrtc is a self-developed rtc architecture supporting Webrtc/Srt/Rtmp, including a variety of video and audio codecs and processing, etc.
yangwebrtc is a self-developed rtc architecture supporting Webrtc/Srt/Rtmp, including a variety of video and audio codecs and processing, etc.

YangWebrtc Overview yangwebrtc是一个自主研发的支持Webrtc/Srt/Rtmp的rtc架构,包含多种视音频编解码和处理等。 支持视频会议、高清录播直播、直播互动等多种视音频应用。 可用于远程教育、远程医疗、指挥调度、安防监控、影视录播、协同办公、直播互动等多种行业应用

Jun 15, 2022