Recording Codec Doesn't Changed

Salam Dears,

We are using the pro version and inside .env we are using VP9 codec and the generated recording has VP8 codec, so how can we force openvidu to use VP9? below is our .env:


# OpenVidu configuration
# ----------------------
# Documentation: https://docs.openvidu.io/en/stable/reference-docs/openvidu-config/

# NOTE: This file doesn't need to quote assignment values, like most shells do.
# All values are stored as-is, even if they contain spaces, so don't quote them.

# Domain name. If you do not have one, the public IP of the machine.
# For example: 198.51.100.1, or openvidu.example.com
# DOMAIN_OR_PUBLIC_IP=xxxxxxx
DOMAIN_OR_PUBLIC_IP=xxxxxxx

# OpenVidu Pro License
OPENVIDU_PRO_LICENSE=xxxxxxxxxx


# OpenVidu SECRET used for apps to connect to OpenVidu server and users to access to OpenVidu Dashboard
OPENVIDU_SECRET=xxxxxxxx

# OpenVidu edition to use. Can be "pro" or "enterprise"
OPENVIDU_EDITION=pro

# Certificate type:
# - selfsigned:  Self signed certificate. Not recommended for production use.
#                Users will see an ERROR when connected to web page.
# - owncert:     Valid certificate purchased in a Internet services company.
#                Please put the certificates files inside folder ./owncert
#                with names certificate.key and certificate.cert
# - letsencrypt: Generate a new certificate using letsencrypt. Please set the
#                required contact email for Let's Encrypt in LETSENCRYPT_EMAIL
#                variable.
CERTIFICATE_TYPE=owncert

# If CERTIFICATE_TYPE=letsencrypt, you need to configure a valid email for notifications
LETSENCRYPT_EMAIL=

# Proxy configuration
# If you want to change the ports on which openvidu listens, uncomment the following lines

# Allows any request to http://DOMAIN_OR_PUBLIC_IP:HTTP_PORT/ to be automatically
# redirected to https://DOMAIN_OR_PUBLIC_IP:HTTPS_PORT/.
# WARNING: the default port 80 cannot be changed during the first boot
# if you have chosen to deploy with the option CERTIFICATE_TYPE=letsencrypt
# HTTP_PORT=xx

# Changes the port of all services exposed by OpenVidu.
# SDKs, REST clients and browsers will have to connect to this port
# HTTPS_PORT=xx

# Old paths are considered now deprecated, but still supported by default.
# OpenVidu Server will log a WARN message every time a deprecated path is called, indicating
# the new path that should be used instead. You can set property SUPPORT_DEPRECATED_API=false
# to stop allowing the use of old paths.
# Default value is true
# SUPPORT_DEPRECATED_API=false

# If true request to with www will be redirected to non-www requests
# Default value is false
# REDIRECT_WWW=false

# How many workers to configure in nginx proxy.
# The more workers, the more requests will be handled
# Default value is 10240
# WORKER_CONNECTIONS=10240

# Access restrictions
# In this section you will be able to restrict the IPs from which you can access to
# Openvidu API and the Administration Panel
# WARNING! If you touch this configuration you can lose access to the platform from some IPs.
# Use it carefully.

# This section limits access to the /dashboard (OpenVidu CE) and /inspector (OpenVidu Pro) pages.
# The form for a single IP or an IP range is:
# ALLOWED_ACCESS_TO_DASHBOARD=xxxx
 and ALLOWED_ACCESS_TO_DASHBOARD=xxxxx
# To limit multiple IPs or IP ranges, separate by commas like this:
# ALLOWED_ACCESS_TO_DASHBOARD=xxxxx
# ALLOWED_ACCESS_TO_DASHBOARD=

# This section limits access to the Openvidu REST API.
# The form for a single IP or an IP range is:
# ALLOWED_ACCESS_TO_RESTAPI=198.51.100.1 and ALLOWED_ACCESS_TO_RESTAPI=198.51.100.0/24
# To limit multiple IPs or or IP ranges, separate by commas like this:
# ALLOWED_ACCESS_TO_RESTAPI=xxxxx
# ALLOWED_ACCESS_TO_RESTAPI=

# Mode of cluster management. Can be auto (OpenVidu manages Media Nodes on its own.
# Parameter KMS_URIS is ignored) or manual (user must manage Media Nodes. Parameter
# KMS_URIS is used: if any uri is provided it must be valid)
OPENVIDU_PRO_CLUSTER_MODE=manual

# Which environment are you using
# Possibles values: aws, on_premise
OPENVIDU_PRO_CLUSTER_ENVIRONMENT=on_premise

# Unique identifier of your cluster. Each OpenVidu Server Pro instance corresponds to one cluster.
# You can launch as many clusters as you want with your license key.
# Cluster ID will always be stored to disk so restarting OpenVidu Server Pro will keep the same previous cluster ID
# if this configuration parameter is not given a distinct value.
# OPENVIDU_PRO_CLUSTER_ID=

# The desired number of Media Nodes on startup. First the autodiscovery process is performed.
# If there are too many Media Nodes after that, they will be dropped until this number is reached.
# If there are not enough, more will be launched.
# This only takes place if OPENVIDU_PRO_CLUSTER_MODE is set to auto
# If set to zero no media servers will be lauched.
# Type: number >= 0
#OPENVIDU_PRO_CLUSTER_MEDIA_NODES=

# How often each running Media Node will send OpenVidu Server Pro Node load metrics, in seconds.
# This property is only used when OPENVIDU_PRO_CLUSTER_LOAD_STRATEGY is 'cpu'. Other load strategies
# gather information synchronously when required
# Type: number >= 0
# OPENVIDU_PRO_CLUSTER_LOAD_INTERVAL=

# Whether to enable or disable autoscaling. With autoscaling the number of Media Nodes will
# be automatically adjusted according to existing load
# Values: true | false
OPENVIDU_PRO_CLUSTER_AUTOSCALING=false

# How often the autoscaling algorithm runs, in seconds
# Type number >= 0
# OPENVIDU_PRO_CLUSTER_AUTOSCALING_INTERVAL=

# If autoscaling is enabled, the upper limit of Media Nodes that can be reached.
# Even when the average load exceeds the threshold, no more Media Nodes will be added to cluster
# Type number >= 0
# OPENVIDU_PRO_CLUSTER_AUTOSCALING_MAX_NODES=

# If autoscaling is enabled, the lower limit of Media Nodes that can be reached.
# Even when the average load is inferior to the threshold, no more Media Nodes will
# be removed from the cluster
# OPENVIDU_PRO_CLUSTER_AUTOSCALING_MIN_NODES=

# If autoscaling is enabled, the upper average load threshold that will trigger the addition
# of a new Media Node.
# Percentage value (0 min, 100 max)
# OPENVIDU_PRO_CLUSTER_AUTOSCALING_MAX_LOAD=

# If autoscaling is enabled, the lower average load threshold that will trigger the removal
# of an existing Media Node.
# Percentage value (0 min, 100 max)
# OPENVIDU_PRO_CLUSTER_AUTOSCALING_MIN_LOAD=

# What parameter should be used to distribute the creation of new sessions
# (and therefore distribution of load) among all available Media Nodes
OPENVIDU_PRO_CLUSTER_LOAD_STRATEGY=streams

# Whether to enable or disable Network Quality API. You can monitor and
# warn users about the quality of their networks with this feature
# OPENVIDU_PRO_NETWORK_QUALITY=false

# If OPENVIDU_PRO_NETWORK_QUALITY=true, how often the network quality
# algorithm will be invoked for each user, in seconds
# OPENVIDU_PRO_NETWORK_QUALITY_INTERVAL=5

# If you want to use Elasticsearch and Kibana, this variable should be set to true.
OPENVIDU_PRO_ELASTICSEARCH=false

# Max days until delete indexes in state of rollover on Elasticsearch
# Type number >= 0
# Default Value is 7
# OPENVIDU_PRO_ELASTICSEARCH_MAX_DAYS_DELETE=

# If you have an external Elasticsearch and Kibana already running, put here the url to elasticsearch and kibana services.
# If you want to use the deployed Elasticsearch and Kibana locally, keep these variables commented.
#OPENVIDU_PRO_ELASTICSEARCH_HOST=
#OPENVIDU_PRO_KIBANA_HOST=

# Speech To Text service module to be enabled. Can be: [disabled, vosk, azure]
# Default is disabled
# OPENVIDU_PRO_SPEECH_TO_TEXT=disabled

# Speech To Text service module Docker image to be used in media nodes
# This parameter is empty by default, because the default image is the one provided by OpenVidu
# If defined, it will override the default image
# OPENVIDU_PRO_SPEECH_TO_TEXT_IMAGE=

# If OPENVIDU_PRO_SPEECH_TO_TEXT=azure, Azure key for the Speech To Text service.
# See https://azure.microsoft.com/en-us/products/cognitive-services/speech-to-text/
# OPENVIDU_PRO_SPEECH_TO_TEXT_AZURE_KEY=

# If OPENVIDU_PRO_SPEECH_TO_TEXT=azure, Azure region in which the Speech To Text service is located (e.g. 'westeurope').
# Default value is empty
# See https://azure.microsoft.com/en-us/products/cognitive-services/speech-to-text/"
# OPENVIDU_PRO_SPEECH_TO_TEXT_AZURE_REGION=

# Where to store recording files. Can be 'local' (local storage) or 's3' (AWS bucket).
# You will need to define a OPENVIDU_PRO_AWS_S3_BUCKET if you use it.
#OPENVIDU_PRO_RECORDING_STORAGE=

# S3 Bucket where to store recording files. May include paths to allow navigating
# folder structures inside the bucket. This property is only taken into account
# if OPENVIDU_PRO_RECORDING_STORAGE=s3
#OPENVIDU_PRO_AWS_S3_BUCKET=

# If OPENVIDU_PRO_RECORDING_STORAGE=s3, the collection of HTTP header values that the internal AWS client  will use during
# the upload process. The property is a key-value map of strings, following the format of a JSON object. For example, for applying
# server-side encryption with AES-256, this header is mandatory: {"x-amz-server-side-encryption":"AES256"}.
# The list of available headers can be found here: https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/Headers.html
# This property is only taken into account if OPENVIDU_PRO_RECORDING_STORAGE=s3
#OPENVIDU_PRO_AWS_S3_HEADERS=

# This property applies to OPENVIDU_PRO_RECORDING_STORAGE=s3 and/or OPENVIDU_PRO_SPEECH_TO_TEXT=aws.
# It is the AWS long-lived credentials access key. Depending on the service you have enabled:
#   - OPENVIDU_PRO_RECORDING_STORAGE=s3: Must have read and write permissions over the bucket defined in property
#       OPENVIDU_PRO_AWS_S3_BUCKET. In this case credentials are optional:
#       if not provided the internal S3 client will try to use the default AWS credentials of the Master Node, if available
#   - OPENVIDU_PRO_SPEECH_TO_TEXT=aws: Must have permissions to manage Amazon Transcribe services.
#       In this case credentials are mandatory.
# OPENVIDU_PRO_AWS_ACCESS_KEY=

# This property applies to OPENVIDU_PRO_RECORDING_STORAGE=s3 and/or OPENVIDU_PRO_SPEECH_TO_TEXT=aws.
# It is the AWS long-lived credentials secret key. Depending on the service you have enabled:
#   - OPENVIDU_PRO_RECORDING_STORAGE=s3: In this case credentials are optional: if not provided then the internal
#       S3 client will try to use the default AWS credentials of the machine, if available.
#   - OPENVIDU_PRO_SPEECH_TO_TEXT=aws: In this case credentials are mandatory.
# OPENVIDU_PRO_AWS_SECRET_KEY=


# This property applies to OPENVIDU_PRO_RECORDING_STORAGE=s3 and/or OPENVIDU_PRO_SPEECH_TO_TEXT=aws.
# It is the AWS region hosting the services. Depending on the service you have enabled:
#   - OPENVIDU_PRO_RECORDING_STORAGE=s3: AWS region in which the S3 bucket is located (e.g. "eu-west-1").
#       If not provided, the region will try to be discovered automatically, although this is not always possible.
#   - OPENVIDU_PRO_SPEECH_TO_TEXT=aws: AWS region where Amazon Transcribe will operate. In this case the property is always mandatory.
#OPENVIDU_PRO_AWS_REGION=

# Whether to enable recording module or not
OPENVIDU_RECORDING=true

# Use recording module with debug mode.
OPENVIDU_RECORDING_DEBUG=false

# Openvidu Folder Record used for save the openvidu recording videos. Change it
# with the folder you want to use from your host.
OPENVIDU_RECORDING_PATH=/opt/openvidu/recordings

# System path where OpenVidu Server should look for custom recording layouts
OPENVIDU_RECORDING_CUSTOM_LAYOUT=/opt/openvidu/custom-layout

# if true any client can connect to
# https://OPENVIDU_SERVER_IP:OPENVIDU_PORT/recordings/any_session_file.mp4
# and access any recorded video file. If false this path will be secured with
# OPENVIDU_SECRET param just as OpenVidu Server dashboard at
# https://OPENVIDU_SERVER_IP:OPENVIDU_PORT
# Values: true | false
# OPENVIDU_RECORDING_PUBLIC_ACCESS=false
OPENVIDU_RECORDING_PUBLIC_ACCESS=true


# Which users should receive the recording events in the client side
# (recordingStarted, recordingStopped). Can be all (every user connected to
# the session), publisher_moderator (users with role 'PUBLISHER' or
# 'MODERATOR'), moderator (only users with role 'MODERATOR') or none
# (no user will receive these events)
OPENVIDU_RECORDING_NOTIFICATION=publisher_moderator

# Timeout in seconds for recordings to automatically stop (and the session involved to be closed)
# when conditions are met: a session recording is started but no user is publishing to it or a session
# is being recorded and last user disconnects. If a user publishes within the timeout in either case,
# the automatic stop of the recording is cancelled
# 0 means no timeout
OPENVIDU_RECORDING_AUTOSTOP_TIMEOUT=120

# Maximum video bandwidth sent from clients to OpenVidu Server, in kbps.
# 0 means unconstrained
OPENVIDU_STREAMS_VIDEO_MAX_RECV_BANDWIDTH=1000
# OPENVIDU_STREAMS_VIDEO_MAX_RECV_BANDWIDTH=300

# Minimum video bandwidth sent from clients to OpenVidu Server, in kbps.
# 0 means unconstrained
OPENVIDU_STREAMS_VIDEO_MIN_RECV_BANDWIDTH=300
# OPENVIDU_STREAMS_VIDEO_MIN_RECV_BANDWIDTH=0


# Maximum video bandwidth sent from OpenVidu Server to clients, in kbps.
# 0 means unconstrained
OPENVIDU_STREAMS_VIDEO_MAX_SEND_BANDWIDTH=1000
# OPENVIDU_STREAMS_VIDEO_MAX_SEND_BANDWIDTH=300

# Minimum video bandwidth sent from OpenVidu Server to clients, in kbps.
# 0 means unconstrained
OPENVIDU_STREAMS_VIDEO_MIN_SEND_BANDWIDTH=300
# OPENVIDU_STREAMS_VIDEO_MIN_SEND_BANDWIDTH=0

# All sessions of OpenVidu will try to force this codec. If OPENVIDU_STREAMS_ALLOW_TRANSCODING=true
# when a codec can not be forced, transcoding will be allowed
# Values: MEDIA_SERVER_PREFERRED, NONE, VP8, VP9, H264
# Default value is MEDIA_SERVER_PREFERRED
OPENVIDU_STREAMS_FORCED_VIDEO_CODEC=VP9

# Allow transcoding if codec specified in OPENVIDU_STREAMS_FORCED_VIDEO_CODEC can not be applied
# Values: true | false
# Default value is false
OPENVIDU_STREAMS_ALLOW_TRANSCODING=true

# Use Simulcast video on WebRTC Publishers.
# Senders will encode duplicate video streams with different qualities,
# so the media server is able to select the most appropriate quality stream
# for each Subscriber.
# This setting is honored only if OpenVidu Server was configured to use the
# mediasoup media server. Otherwise, Simulcast will be disabled.
# Values: true | false
# Default: false
#OPENVIDU_WEBRTC_SIMULCAST=false

# Send openvidu-browser logs of clients to Elasticsearch
# Possible values:
# - disabled: Don't send logs. (default)
# - debug: Send all openvidu-browser logs
# - debug_app: Send openvidu-browser logs and frontend app logs
# OPENVIDU_BROWSER_LOGS=disabled

# true to enable OpenVidu Webhook service. false' otherwise
# Values: true | false
OPENVIDU_WEBHOOK=false

# HTTP endpoint where OpenVidu Server will send Webhook HTTP POST messages
# Must be a valid URL: http(s)://ENDPOINT
#OPENVIDU_WEBHOOK_ENDPOINT=

# List of headers that OpenVidu Webhook service will attach to HTTP POST messages
#OPENVIDU_WEBHOOK_HEADERS=

# List of events that will be sent by OpenVidu Webhook service
# Default value is all available events
OPENVIDU_WEBHOOK_EVENTS=[sessionCreated,sessionDestroyed,participantJoined,participantLeft,webrtcConnectionCreated,webrtcConnectionDestroyed,recordingStatusChanged,filterEventDispatched,med
iaNodeStatusChanged,nodeCrashed,nodeRecovered,broadcastStarted,broadcastStopped]

# How often the garbage collector of non active sessions runs.
# This helps cleaning up sessions that have been initialized through
# REST API (and maybe tokens have been created for them) but have had no users connected.
# Default to 900s (15 mins). 0 to disable non active sessions garbage collector
OPENVIDU_SESSIONS_GARBAGE_INTERVAL=900

# Minimum time in seconds that a non active session must have been in existence
# for the garbage collector of non active sessions to remove it. Default to 3600s (1 hour).
# If non active sessions garbage collector is disabled
# (property 'OPENVIDU_SESSIONS_GARBAGE_INTERVAL' to 0) this property is ignored
OPENVIDU_SESSIONS_GARBAGE_THRESHOLD=3600

# Call Detail Record enabled
# Whether to enable Call Detail Record or not
# Values: true | false
OPENVIDU_CDR=false

# Path where the cdr log files are hosted
OPENVIDU_CDR_PATH=/opt/openvidu/cdr

# Openvidu Server Level logs
# --------------------------
# Uncomment the next line and define this variable to change
# the verbosity level of the logs of Openvidu Service
# RECOMENDED VALUES: INFO for normal logs DEBUG for more verbose logs
# OV_CE_DEBUG_LEVEL=INFO

# OpenVidu Java Options
# --------------------------
# Uncomment the next line and define this to add options to java command
# Documentation: https://docs.oracle.com/cd/E37116_01/install.111210/e23737/configuring_jvm.htm#OUDIG00058
# JAVA_OPTIONS=-Xms2048m -Xmx4096m

# ElasticSearch Java Options
# --------------------------
# Uncomment the next line and define this to add options to java command of Elasticsearch
# Documentation: https://docs.oracle.com/cd/E37116_01/install.111210/e23737/configuring_jvm.htm#OUDIG00058
# By default ElasticSearch is configured to use "-Xms2g -Xmx2g" as Java Min and Max memory heap allocation
# ES_JAVA_OPTS=-Xms2048m -Xmx4096m

# Kibana And ElasticSearch Credentials Configuration
# --------------------------
# Kibana And ElasticSearch Basic Auth configuration (Credentials)
# This credentials will aso be valid for Kibana dashboard
ELASTICSEARCH_USERNAME=****
ELASTICSEARCH_PASSWORD=*****

# Media Node Configuration
# --------------------------
# You can add any KMS environment variable as described in the
# documentation of the docker image: https://hub.docker.com/r/kurento/kurento-media-server
# If you want to add an environment variable to KMS, you must add a variable using this prefix: 'KMS_DOCKER_ENV_',
# followed by the environment variable you want to setup.
# For example if you want to setup KMS_MIN_PORT to 50000, it would be KMS_DOCKER_ENV_KMS_MIN_PORT=50000

# Docker hub kurento media server: https://hub.docker.com/r/kurento/kurento-media-server
# Uncomment the next line and define this variable with KMS image that you want use
# By default, KMS_IMAGE is defined in media nodes and it does not need to be specified unless
# you want to use a specific version of KMS
# KMS_IMAGE=kurento/kurento-media-server:7.0.1

# Uncomment the next line and define this variable to change
# the verbosity level of the logs of KMS
# Documentation: https://doc-kurento.readthedocs.io/en/stable/features/logging.html
# KMS_DOCKER_ENV_GST_DEBUG=

# Coturn deployment in media nodes (Experimental)
# --------------------------
# OpenVidu PRO/Enterprise includes a default TURN/STUN deployment (Coturn).
# By default, Coturn is deployed in master nodes, but if you want to deploy
# Coturn in the media nodes, you just need to set OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=true
# Default value is OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=false
# For Coturn to work, you need at least this ports open:
# For master node you need 3478 TCP/UDP open in the master node.
# For Media nodes you need 443 TCP/UDP open in media nodes.
# More info about Coturn configuration in OpenVidu PRO/ENTERPRISE:
#    - https://docs.openvidu.io/en/stable/deployment/pro/on-premises/#coturn-configuration
OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=false

# Private Docker registries for custom images
# --------------------------
# By default OpenVidu PRO/Enterprise uses the public Docker Hub registry to pull the images,
# but if you want to use a private registry, you can define your own repository and credentials
# in this environment variable.
# You can define as many registries as you want, each repository must be separated by a comma.
# The format of the variable is: OPENVIDU_PRO_DOCKER_REGISTRIES=["serveraddress=yourserver.com,username=user,password=pass"]
# OPENVIDU_PRO_DOCKER_REGISTRIES=

# Cloudformation configuration
# --------------------------
# If you're working outside AWS ignore this section
#AWS_DEFAULT_REGION=
#AWS_IMAGE_ID=
#AWS_INSTANCE_TYPE=
#AWS_INSTANCE_ID=
#AWS_KEY_NAME=
#AWS_SUBNET_ID=
#AWS_SECURITY_GROUP=

VP9 only works with Enterprise version with mediasoup.
https://docs.openvidu.io/en/2.29.0/advanced-features/media-codecs/#forced-video-codec

The generated recording codec only changes for Individual recordings in the case of VP9 with mediasoup.