ant-media / Ant-Media-Server

Ant Media Server is a live streaming engine software that provides adaptive, ultra low latency streaming by using WebRTC technology with ~0.5 seconds latency. Ant Media Server is auto-scalable and it can run on-premise or on-cloud.
https://antmedia.io
Other
4.27k stars 628 forks source link

RTMPS on Community Edition? #5803

Closed farawaysouthwest closed 9 months ago

farawaysouthwest commented 11 months ago

Hi there!

Is stream pushing via RTMPS an enterprise only feature?

I've followed the doc outlined here, got a successful restart on the service, and attempted to push stream via OBS on port 8443, I have also ensured that the port is open on my firewall.

OBS dials for a few seconds then the connection times out, so it is seeing the server, are there any additional troubleshooting methods for this?

mekya commented 11 months ago

Hi @farawaysouthwest,

Thank you for your question.

Yes, community edition supports RTMPS and I think it's better to ask this question on Discussion.

Regards Oguz

Mohit-3196 commented 11 months ago

Hi @farawaysouthwest , How are you?

I wanted to check if you were able to publish RTMPS. I tried it again and it seems to publish fine on my end https://github.com/orgs/ant-media/discussions/4907

Also, please make sure that SSL is enabled on the server.

Thank you.

farawaysouthwest commented 11 months ago

Hi @farawaysouthwest , How are you?

I wanted to check if you were able to publish RTMPS. I tried it again and it seems to publish fine on my end https://github.com/orgs/ant-media/discussions/4907

Also, please make sure that SSL is enabled on the server.

Thank you.

Hi @Mohit-3196, thank you for the followup. I'm still unable to connect vis RTMPS.

I've validated the following:

  1. SSL is installed and enabled, all other pages are serving HTTPS.
  2. The RTMPS bean in red5-core.xml has been uncommented, the server has been restarted.
  3. Firewalls on both the server and the client have been turned completely off as a troubleshooting validation.
  4. Updated to v2.7.0 to ensure there are no bug fix issues that were patched.

I get the following error:

WARN  o.r.server.net.rtmp.RTMPConnection - Stream service was not found for scope: null or non-existant
2023-11-20 18:26:28,801 [NioProcessor-22] 

INFO  o.r.server.net.rtmp.BaseRTMPHandler - connectionClosed: IKVFNQGG1XYKL
Mohit-3196 commented 11 months ago

Hi @farawaysouthwest , I see, Thank you.

Is it possible for you to share your Ant Media Server Web panel login details with me? I can login and check the issue in more detail there.

You can write to me at mohit.dubey@antmedia.io

Cheers

Mohit-3196 commented 11 months ago

Hi @farawaysouthwest ,

Let me know if you have any comments for me.

farawaysouthwest commented 11 months ago

Hi @Mohit-3196, thank you for the followup! Unfortunately, I can not provide login access for security reasons.

As a fellow software engineer, I would hope that a defined error message like I provided would help us define next troubleshooting steps?

Are any any actions I can take to dig deeper into this? I'm running on a standard install of Ubuntu, is there possibly an additional SSL package or configuration item that I could look at?

Mohit-3196 commented 11 months ago

Hi @farawaysouthwest , I could share the error only if I faced any :) but there's no error when I try publishing RTMPS to the community edition. Also, the logs there seem to be related to the RTMP handler.

If you cannot provide the login details, is it possible for you to share the red5-core.xml file so that I can check if things are fine there?

Thank you

mekya commented 11 months ago

hi @Mohit-3196 @farawaysouthwest, Thank you for the discussion.
When I see the following log below, it makes me think that the url is correct. Could you please check the url is in the format rtmps://[{SERVER_ADDRESS}:8443/{APP}/{STREAM_ID}

If it does not help, maybe scheduling a meeting and looking at the problem may save good amount of time.

WARN  o.r.server.net.rtmp.RTMPConnection - Stream service was not found for scope: null or non-existant
2023-11-20 18:26:28,801 [NioProcessor-22] 

INFO  o.r.server.net.rtmp.BaseRTMPHandler - connectionClosed: IKVFNQGG1XYKL
Mohit-3196 commented 11 months ago

Hi @farawaysouthwest, How are you?

Did you have a chance to check the publish URL format as suggested above?

Thank you

farawaysouthwest commented 10 months ago

Hi @farawaysouthwest, How are you?

Did you have a chance to check the publish URL format as suggested above?

Thank you

Hi there!

I can confirm that my url is correct, and that all WAF blocking has been correctly configured.

I don't believe this is something wrong with URL etc. As I stated earlier, I can get a very reliable, repeatable error message in the logs on every failed connection attempt: WARN o.r.server.net.rtmp.RTMPConnection - Stream service was not found for scope: null or non-existent 2023-11-20 18:26:28,801 [NioProcessor-22]

This leads me to believe I have discovered a bug, or possibly there is a configuration error with the red-core file? How would you propose I troubleshoot this further? I could install a fresh VM on a similar system and see if the error persists over there, but I need to know if that would lead to any exploratory action on your part?

Mohit-3196 commented 10 months ago

Hi @farawaysouthwest, When you reported this issue, I ran the community edition on my end, and the rtmps publish worked fine. Therefore I couldn't reproduce the issue. Depending on the log excerpts you shared, my colleague advised checking the publish URL format.

Here's how we can proceed:

  1. You can share your red5-core.xml file with me and I can try running the same on my end.
  2. Depending upon that we can schedule a call and take it forward and then we'll post our findings here.

Let me know if this is OK for you.

Thank you.

Mohit-3196 commented 10 months ago

Hi @farawaysouthwest, How are you?

I'm waiting for the file so that we can proceed to the next step. We have been spending time on this issue for a long now so let's proceed with some increased energy and synergy to find the find the blocker and resolve it.

Thank you.

farawaysouthwest commented 10 months ago

Hi @Mohit-3196, Thank you for following up, we have uncovered a more serious issue that I will need to make a separate ticket for, but please see the file below, (Github will not let me attach the file directly), thank you for your help!

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:lang="http://www.springframework.org/schema/lang"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd">

    <!-- DO NOT FORMAT THIS FILE IN ECLIPSE -->

    <bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="customEditors">
            <map>
                <entry key="java.net.SocketAddress" value="org.apache.mina.integration.beans.InetSocketAddressEditor" />
            </map>
        </property>
    </bean>

    <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:/red5.properties" />
    </bean>

    <!-- RTMP -->
    <bean id="rtmpScheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
        <property name="poolSize" value="${rtmp.scheduler.pool_size}" />
        <property name="daemon" value="true" />
        <property name="waitForTasksToCompleteOnShutdown" value="true" />
        <property name="threadNamePrefix" value="RTMPConnectionScheduler-" />
    </bean>

    <bean id="messageExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="${rtmp.executor.core_pool_size}" />
        <property name="maxPoolSize" value="${rtmp.executor.max_pool_size}" />
        <property name="queueCapacity" value="${rtmp.executor.queue_capacity}" />
        <property name="daemon" value="false" />
        <property name="waitForTasksToCompleteOnShutdown" value="true" />
        <property name="threadNamePrefix" value="RTMPConnectionExecutor-" />
    </bean>

    <bean id="deadlockGuardScheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
        <property name="poolSize" value="${rtmp.deadlockguard.sheduler.pool_size}" />
        <property name="daemon" value="false" />
        <property name="waitForTasksToCompleteOnShutdown" value="true" />
        <property name="threadNamePrefix" value="DeadlockGuardScheduler-" />
    </bean>

    <!-- RTMP connection manager -->
    <bean id="rtmpConnManager" class="org.red5.server.net.rtmp.RTMPConnManager" />

    <!-- RTMP Decoding -->
    <!-- Use injection to set the max packet size -->
    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="staticMethod">
            <value>org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.setMaxPacketSize</value>
        </property>
        <property name="arguments" value="${rtmp.max_packet_size}"/>
    </bean>

    <!-- RTMP Handler -->
    <bean id="rtmpHandler" class="org.red5.server.net.rtmp.RTMPHandler">
        <property name="server" ref="red5.server" />
        <property name="statusObjectService" ref="statusObjectService" />
        <!-- Enable this to allow unvalidated connections -->
        <property name="unvalidatedConnectionAllowed" value="true" />
    </bean>

    <!-- RTMP Mina IO Handler -->
    <bean id="rtmpMinaIoHandler" class="org.red5.server.net.rtmp.RTMPMinaIoHandler">
        <property name="handler" ref="rtmpHandler" />
    </bean>

    <!-- RTMP Mina Transport -->
    <bean id="rtmpTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
        <property name="ioHandler" ref="rtmpMinaIoHandler" />
        <property name="addresses">
            <list>
                <value>${rtmp.host}:${rtmp.port}</value>
                <!-- You can now add additional ports and ip addresses
                <value>${rtmp.host}:1936</value>
                 -->
            </list>
        </property>
        <property name="ioThreads" value="${rtmp.io_threads}" />
        <property name="sendBufferSize" value="${rtmp.send_buffer_size}" />
        <property name="receiveBufferSize" value="${rtmp.receive_buffer_size}" />
        <property name="trafficClass" value="${rtmp.traffic_class}" />
        <property name="backlog" value="${rtmp.backlog}" />
        <property name="tcpNoDelay" value="${rtmp.tcp_nodelay}" />
        <property name="keepAlive" value="${rtmp.tcp_keepalive}" />
        <property name="thoughputCalcInterval" value="${rtmp.thoughput_calc_interval}" />
        <property name="enableDefaultAcceptor" value="${rtmp.default_acceptor}" />
        <!-- Pool settings are used when the default acceptor is disabled -->
        <property name="initialPoolSize" value="${rtmp.initial_pool_size}" />
        <property name="maxPoolSize" value="${rtmp.max_pool_size}" />
        <property name="maxProcessorPoolSize" value="${rtmp.max_processor_pool_size}" />
        <property name="executorKeepAliveTime" value="${rtmp.executor_keepalive_time}" />
        <!-- This is the interval at which the sessions are polled for stats. If mina monitoring is not enabled, polling will not occur. -->
        <property name="minaPollInterval" value="${jmx.mina.poll.interval}" />
        <property name="enableMinaMonitor" value="${jmx.mina.monitor.enable}" />
        <property name="enableMinaLogFilter" value="${mina.logfilter.enable}" />
    </bean>

    <!-- RTMP Mina Connection -->
    <bean id="rtmpMinaConnection" scope="prototype" class="org.red5.server.net.rtmp.RTMPMinaConnection">
        <!-- Executor for scheduled tasks -->
        <property name="scheduler" ref="rtmpScheduler" />
        <!-- Executor for incoming messages -->
        <property name="executor" ref="messageExecutor" />
        <!-- Deadlock guard executor -->
        <property name="deadlockGuardScheduler" ref="deadlockGuardScheduler" />
        <!-- Ping clients every X ms. Set to 0 to disable ghost detection code. -->
        <property name="pingInterval" value="${rtmp.ping_interval}" />
        <!-- Disconnect client after X ms of not responding. -->
        <property name="maxInactivity" value="${rtmp.max_inactivity}" />
        <!-- Max. time in milliseconds to wait for a valid handshake. -->
        <property name="maxHandshakeTimeout" value="${rtmp.max_handshake_time}" />
        <!-- Default server bandwidth per connection -->
        <property name="defaultServerBandwidth" value="${rtmp.default_server_bandwidth}" />
        <!-- Default client bandwidth per connection -->
        <property name="defaultClientBandwidth" value="${rtmp.default_client_bandwidth}" />
        <!-- Client bandwidth limit type: 0 = hard, 1 = soft, 2 = dynamic -->
        <property name="limitType" value="${rtmp.client_bandwidth_limit_type}" />
        <!-- Bandwidth detection. If "false" the server will NOT initiate a check -->
        <property name="bandwidthDetection" value="${rtmp.bandwidth_detection}" />
        <!-- Maximum time allowed for a single RTMP packet to be processed -->
        <property name="maxHandlingTimeout" value="${rtmp.max_handling_time}" />
        <!-- Specify the size of queue that will trigger audio packet dropping, disabled if it's 0 -->
        <property name="executorQueueSizeToDropAudioPackets" value="${rtmp.executor.queue_size_to_drop_audio_packets}" />
        <!-- Concurrent collection tweaks -->
        <property name="channelsInitalCapacity" value="${rtmp.channel.initial.capacity}" />
        <property name="channelsConcurrencyLevel" value="${rtmp.channel.concurrency.level}" />
        <property name="streamsInitalCapacity" value="${rtmp.stream.initial.capacity}" />
        <property name="streamsConcurrencyLevel" value="${rtmp.stream.concurrency.level}" />
        <property name="pendingCallsInitalCapacity" value="${rtmp.pending.calls.initial.capacity}" />
        <property name="pendingCallsConcurrencyLevel" value="${rtmp.pending.calls.concurrency.level}" />
        <property name="reservedStreamsInitalCapacity" value="${rtmp.reserved.streams.initial.capacity}" />
        <property name="reservedStreamsConcurrencyLevel" value="${rtmp.reserved.streams.concurrency.level}" />
    </bean>

    <bean id="rtmpsMinaIoHandler" class="org.red5.server.net.rtmps.RTMPSMinaIoHandler">
        <property name="handler" ref="rtmpHandler" />
        <property name="keystorePassword" value="${rtmps.keystorepass}" />
        <property name="keystoreFile" value="${rtmps.keystorefile}" />
        <property name="truststorePassword" value="${rtmps.truststorepass}" />
        <property name="truststoreFile" value="${rtmps.truststorefile}" />
        <property name="cipherSuites">
            <array>
                <value>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</value>
                <value>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</value>
                <value>TLS_ECDHE_RSA_WITH_RC4_128_SHA</value>
                <value>TLS_RSA_WITH_AES_128_CBC_SHA256</value>
                <value>TLS_RSA_WITH_AES_128_CBC_SHA</value>
                <value>SSL_RSA_WITH_RC4_128_SHA</value>
            </array>
        </property>
        <property name="protocols">
            <array>
                <value>TLSv1</value>
                <value>TLSv1.1</value>
                <value>TLSv1.2</value>
            </array>
        </property>
    </bean>

    <!-- RTMPS -->
    <bean id="rtmpsTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
        <property name="ioHandler" ref="rtmpsMinaIoHandler" />
        <property name="addresses">
            <list>
                 <value>${rtmps.host}:${rtmps.port}</value>
            </list>
        </property>
        <property name="ioThreads" value="${rtmp.io_threads}" />
        <property name="tcpNoDelay" value="${rtmp.tcp_nodelay}" />
</bean>

    <!-- Enable when you need it. - - >
    <bean id="rtmpProxyTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
        <property name="ioHandler" ref="debugProxyIoHandler" />
        <property name="address" value="${proxy.source_host}" />
        <property name="port" value="${proxy.source_port}" />
        <property name="ioThreads" value="${rtmp.io_threads}" />
        <property name="tcpNoDelay" value="${rtmp.tcp_nodelay}" />
    </bean>

    <bean id="debugProxyIoHandler" class="org.red5.server.net.proxy.DebugProxyHandler">
        <property name="codecFactory" ref="rtmpCodecFactory" />
        <property name="forward" value="${proxy.destination_host}:${proxy.destination_port}" />
        <property name="dumpTo" value="./webapps/dump/" />
    </bean>
-->
</beans>
Mohit-3196 commented 10 months ago

Hi @farawaysouthwest, Thank you for the file.

Let me check and get back to you.

Mohit-3196 commented 10 months ago

Hi @farawaysouthwest, Please use this file

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:lang="http://www.springframework.org/schema/lang"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd">

    <!-- DO NOT FORMAT THIS FILE IN ECLIPSE -->

    <bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="customEditors">
            <map>
                <entry key="java.net.SocketAddress" value="org.apache.mina.integration.beans.InetSocketAddressEditor" />
            </map>
        </property>
    </bean>

    <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:/red5.properties" />
    </bean>

    <!-- RTMP -->
    <bean id="rtmpScheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
        <property name="poolSize" value="${rtmp.scheduler.pool_size}" />
        <property name="daemon" value="true" />
        <property name="waitForTasksToCompleteOnShutdown" value="true" />
        <property name="threadNamePrefix" value="RTMPConnectionScheduler-" />
    </bean>

    <bean id="messageExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="${rtmp.executor.core_pool_size}" />
        <property name="maxPoolSize" value="${rtmp.executor.max_pool_size}" />
        <property name="queueCapacity" value="${rtmp.executor.queue_capacity}" />
        <property name="daemon" value="false" />
        <property name="waitForTasksToCompleteOnShutdown" value="true" />
        <property name="threadNamePrefix" value="RTMPConnectionExecutor-" />
    </bean>

    <bean id="deadlockGuardScheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
        <property name="poolSize" value="${rtmp.deadlockguard.sheduler.pool_size}" />
        <property name="daemon" value="false" />
        <property name="waitForTasksToCompleteOnShutdown" value="true" />
        <property name="threadNamePrefix" value="DeadlockGuardScheduler-" />
    </bean>

    <!-- RTMP connection manager -->
    <bean id="rtmpConnManager" class="org.red5.server.net.rtmp.RTMPConnManager" />

    <!-- RTMP Decoding -->
    <!-- Use injection to set the max packet size -->
    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="staticMethod">
            <value>org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.setMaxPacketSize</value>
        </property>
        <property name="arguments" value="${rtmp.max_packet_size}"/>
    </bean>

    <!-- RTMP Handler -->
    <bean id="rtmpHandler" class="org.red5.server.net.rtmp.RTMPHandler">
        <property name="server" ref="red5.server" />
        <property name="statusObjectService" ref="statusObjectService" />
        <!-- Enable this to allow unvalidated connections -->
        <property name="unvalidatedConnectionAllowed" value="true" />
    </bean>

    <!-- RTMP Mina IO Handler -->
    <bean id="rtmpMinaIoHandler" class="org.red5.server.net.rtmp.RTMPMinaIoHandler">
        <property name="handler" ref="rtmpHandler" />
    </bean>

    <!-- RTMP Mina Transport -->
    <bean id="rtmpTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
        <property name="ioHandler" ref="rtmpMinaIoHandler" />
        <property name="addresses">
            <list>
                <value>${rtmp.host}:${rtmp.port}</value>
                <!-- You can now add additional ports and ip addresses
                <value>${rtmp.host}:1936</value>
                 -->
            </list>
        </property>
        <property name="ioThreads" value="${rtmp.io_threads}" />
        <property name="sendBufferSize" value="${rtmp.send_buffer_size}" />
        <property name="receiveBufferSize" value="${rtmp.receive_buffer_size}" />
        <property name="trafficClass" value="${rtmp.traffic_class}" />
        <property name="backlog" value="${rtmp.backlog}" />
        <property name="tcpNoDelay" value="${rtmp.tcp_nodelay}" />
        <property name="keepAlive" value="${rtmp.tcp_keepalive}" />
        <property name="thoughputCalcInterval" value="${rtmp.thoughput_calc_interval}" />
        <property name="enableDefaultAcceptor" value="${rtmp.default_acceptor}" />
        <!-- Pool settings are used when the default acceptor is disabled -->
        <property name="initialPoolSize" value="${rtmp.initial_pool_size}" />
        <property name="maxPoolSize" value="${rtmp.max_pool_size}" />
        <property name="maxProcessorPoolSize" value="${rtmp.max_processor_pool_size}" />
        <property name="executorKeepAliveTime" value="${rtmp.executor_keepalive_time}" />
        <!-- This is the interval at which the sessions are polled for stats. If mina monitoring is not enabled, polling will not occur. -->
        <property name="minaPollInterval" value="${jmx.mina.poll.interval}" />
        <property name="enableMinaMonitor" value="${jmx.mina.monitor.enable}" />
        <property name="enableMinaLogFilter" value="${mina.logfilter.enable}" />
    </bean>

    <!-- RTMP Mina Connection -->
    <bean id="rtmpMinaConnection" scope="prototype" class="org.red5.server.net.rtmp.RTMPMinaConnection">
        <!-- Executor for scheduled tasks -->
        <property name="scheduler" ref="rtmpScheduler" />
        <!-- Executor for incoming messages -->
        <property name="executor" ref="messageExecutor" />
        <!-- Deadlock guard executor -->
        <property name="deadlockGuardScheduler" ref="deadlockGuardScheduler" />
        <!-- Ping clients every X ms. Set to 0 to disable ghost detection code. -->
        <property name="pingInterval" value="${rtmp.ping_interval}" />
        <!-- Disconnect client after X ms of not responding. -->
        <property name="maxInactivity" value="${rtmp.max_inactivity}" />
        <!-- Max. time in milliseconds to wait for a valid handshake. -->
        <property name="maxHandshakeTimeout" value="${rtmp.max_handshake_time}" />
        <!-- Default server bandwidth per connection -->
        <property name="defaultServerBandwidth" value="${rtmp.default_server_bandwidth}" />
        <!-- Default client bandwidth per connection -->
        <property name="defaultClientBandwidth" value="${rtmp.default_client_bandwidth}" />
        <!-- Client bandwidth limit type: 0 = hard, 1 = soft, 2 = dynamic -->
        <property name="limitType" value="${rtmp.client_bandwidth_limit_type}" />
        <!-- Bandwidth detection. If "false" the server will NOT initiate a check -->
        <property name="bandwidthDetection" value="${rtmp.bandwidth_detection}" />
        <!-- Maximum time allowed for a single RTMP packet to be processed -->
        <property name="maxHandlingTimeout" value="${rtmp.max_handling_time}" />
        <!-- Specify the size of queue that will trigger audio packet dropping, disabled if it's 0 -->
        <property name="executorQueueSizeToDropAudioPackets" value="${rtmp.executor.queue_size_to_drop_audio_packets}" />
        <!-- Concurrent collection tweaks -->
        <property name="channelsInitalCapacity" value="${rtmp.channel.initial.capacity}" />
        <property name="channelsConcurrencyLevel" value="${rtmp.channel.concurrency.level}" />
        <property name="streamsInitalCapacity" value="${rtmp.stream.initial.capacity}" />
        <property name="streamsConcurrencyLevel" value="${rtmp.stream.concurrency.level}" />
        <property name="pendingCallsInitalCapacity" value="${rtmp.pending.calls.initial.capacity}" />
        <property name="pendingCallsConcurrencyLevel" value="${rtmp.pending.calls.concurrency.level}" />
        <property name="reservedStreamsInitalCapacity" value="${rtmp.reserved.streams.initial.capacity}" />
        <property name="reservedStreamsConcurrencyLevel" value="${rtmp.reserved.streams.concurrency.level}" />
    </bean>

    <!-- RTMPS -->
    <!-- Notes to self:
         https://www.openssl.org/docs/apps/ciphers.html#TLS-v1.2-cipher-suites
         https://www.sslshopper.com/article-how-to-disable-weak-ciphers-and-ssl-2-in-tomcat.html
    -->
    <bean id="rtmpsMinaIoHandler" class="org.red5.server.net.rtmps.RTMPSMinaIoHandler">
        <property name="handler" ref="rtmpHandler" />
        <property name="keystorePassword" value="${rtmps.keystorepass}" />
        <property name="keystoreFile" value="${rtmps.keystorefile}" />
        <property name="truststorePassword" value="${rtmps.truststorepass}" />
        <property name="truststoreFile" value="${rtmps.truststorefile}" />
        <property name="cipherSuites">
            <array>
                <value>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</value>
                <value>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</value>
                <value>TLS_ECDHE_RSA_WITH_RC4_128_SHA</value>
                <value>TLS_RSA_WITH_AES_128_CBC_SHA256</value>
                <value>TLS_RSA_WITH_AES_128_CBC_SHA</value>
                <value>SSL_RSA_WITH_RC4_128_SHA</value>
            </array>
        </property>
        <property name="protocols">
            <array>
                <value>TLSv1</value>
                <value>TLSv1.1</value>
                <value>TLSv1.2</value>
            </array>
        </property>
    </bean>

    <bean id="rtmpsTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
        <property name="ioHandler" ref="rtmpsMinaIoHandler" />
        <property name="addresses">
            <list>
                 <value>${rtmps.host}:${rtmps.port}</value>
            </list>
        </property>
        <property name="ioThreads" value="${rtmp.io_threads}" />
        <property name="tcpNoDelay" value="${rtmp.tcp_nodelay}" />
    </bean>

    <!-- Enable when you need it.
    <bean id="rtmpProxyTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
        <property name="ioHandler" ref="debugProxyIoHandler" />
        <property name="address" value="${proxy.source_host}" />
        <property name="port" value="${proxy.source_port}" />
        <property name="ioThreads" value="${rtmp.io_threads}" />
        <property name="tcpNoDelay" value="${rtmp.tcp_nodelay}" />
    </bean>

    <bean id="debugProxyIoHandler" class="org.red5.server.net.proxy.DebugProxyHandler">
        <property name="codecFactory" ref="rtmpCodecFactory" />
        <property name="forward" value="${proxy.destination_host}:${proxy.destination_port}" />
        <property name="dumpTo" value="./webapps/dump/" />
    </bean>
    -->
</beans>

It should work for you. In case it doesn't, please let me know.

Thank you.

Mohit-3196 commented 10 months ago

Hi @farawaysouthwest, How are you?

Were you able to try with this file that I shared? Please let back to me after you check it.

Thank you.

Mohit-3196 commented 10 months ago

Hi @farawaysouthwest, I'm closing this issue now for inactivity. Please feel free to reopen the issue for any comments that you may have.

Thank you and Happy New Year :)