OVPro How Display Images with GStreamerFilter

I am changing over from OpenVidu CE to OpenVidu Pro. I’ve got my pro installation on AWS up and running.

On CE, I show icons on the video window using localOvPublisherObj.stream.applyFilter(‘GStreamerFilter’, {‘command’: cmd })

where cmd=‘gdkpixbufoverlay location=/work/images/mic-off-44px.png offset-x=10 offset-y=420’

Per above, the apply filter command references images that I’ve placed on the openvidu CE server in the /work/images folder. I’ve also edited the docker-compose.yaml file to include this line under kms: volumes:

  • /work/images:/work/images

This all works great on CE. kms displays the image icons I specify as overlays on the video.

My question is: How do I do this on OpenVidu Pro, since I cannot manipulate the media nodes. Is there any way?

Thanks,

Mike Russiello
HR Avatar, Inc.

Hello Mike,

It is quite easy if your images are pre-defined. If you know the image files you will be using, then one approach is the following one:

  1. Create a custom kurento-media-server docker image, inheriting from the one used by default in the OpenVidu version you are using. For example, for OpenVidu 2.20.0, kurento-media-server:6.16.0 is used (Releases - OpenVidu Docs)
  2. That custom image should copy the image files you need in a known path. For example /work/images.
  3. Configure your OpenVidu Master Node to use your custom image, once uploaded to DockerHub. You do so like this: On premises - OpenVidu Docs. For example: KMS_IMAGE=your-dockerhub-account/kurento-media-server:6.16.0-custom

This system is very easy to mantain. But it has a counterpart: your Media Nodes will take a little bit longer to launch, as the new image must be downloaded before booting up.

If you want to use autoscaling or need a very quick launch in your Media Nodes for any reason, then you will have to re-generate the Media Node AMI. You ssh into a running Media Node in your AWS dashboard, download the needed images in the desired path, and generate a new AMI. Then configure your new AMI in /opt/openvidu/.env Master Node’s configuration file with property AWS_IMAGE_ID

Thank you Pablo.

That makes sense. I am using autoscaling so have elected to modify a media node, create an ami as you described. I’ve done this and replaced the operating media node with a new one from the new ami. However, I’m still getting this error when I try to apply the filter:

error gdkpixbufoverlay gstgdkpixbufoverlay.c:290 gst_gdk_pixbuf_overlay_set_property() Could not load overlay image: Failed to open file ‘/work/images/genericperson-white-400.png’: No such file or directory
2021-11-30T20:39:22,945300 1 0x00007f2127703700 warning gdkpixbufoverlay gstgdkpixbufoverlay.c:508 gst_gdk_pixbuf_overlay_start() error: Could not load overlay image.

The file is definitely in /work/images and it has full permissions. Also, I’ve edited /opt/kms/docker-compose.yml to include the path as follows:

services:
media-node-controller:
image: openvidu/media-node-controller:5.0.0
restart: always
ulimits:
core: -1
entrypoint: [’/bin/sh’, ‘-c’, ‘/beats/copy_config_files.sh && /usr/local/bin/entrypoint.sh’]
environment:
- KMS_IMAGE=kurento/kurento-media-server:6.16.0
- MEDIASOUP_IMAGE=openvidu/mediasoup-controller:2.20.0-beta2
- METRICBEAT_IMAGE=docker.elastic.co/beats/metricbeat-oss:7.8.0
- FILEBEAT_IMAGE=docker.elastic.co/beats/filebeat-oss:7.8.0
- OPENVIDU_RECORDING_IMAGE=openvidu/openvidu-recording:2.19.0
- NO_COLOR=true
ports:
- 3000:3000
volumes:
- /opt/openvidu/recordings:/opt/openvidu/recordings
- /opt/openvidu/beats:/opt/openvidu/beats
- /var/run/docker.sock:/var/run/docker.sock
- /opt/openvidu/kurento-logs:/opt/openvidu/kurento-logs
- ./beats:/beats
- /work/images:/work/images
logging:
options:
max-size: “100M”

However, it doesn’t seem to be working. Is there somewhere else I should place the files or a different file I should edit so Kurento can find them?

Thanks again,

Mike

That’s weird. If you ssh into your new Media Node, and run

docker exec -it KMS_CONTAINER_ID bash

And go to path /work/images once inside the container… are the images present?
If that’s the case, then this is a complete mistery.

Thank you. I was able to find the container id using docker container ls

I was able to log in using sudo docker exec -it KMS_CONTAINER_ID bash which worked.

When I tried to cd to /work it says no such file or directory.

I also tried to cd to /opt/openvidu/recordings and that was found no problem. I noticed that /opt/openvidu/recordings is owned by root:root while /work/images was owned by ubuntu:ubuntu. All read write execute privileges were granted though. Anyway - could that be the problem?

I also ran ./media_node report and I’ve included some snippets below.

I appreciate your help.

=======================================
= REPORT INFORMATION =

Creation Date: 01-12-2021
Creation Time: 11:49:03

=======================================
= MEDIA NODE INFORMATION =

Installation Type: Cloud Formation
Openvidu Version: 2.20.0

=======================================
= SYSTEM INFORMATION =

Linux Version:
- Description: Ubuntu 18.04.5 LTS
Docker Version: 20.10.8
Docker Compose Version: 1.25.4

=======================================
= INSTALLATION INFORMATION =

Installation Folder: /opt/kms
Installation Folder Tree:

 |-media_node
 |-beats
 | |-metricbeat-elasticsearch.yml
 | |-filebeat.yml
 | |-copy_config_files.sh
 |-docker-compose.yml

=======================================
= DOCKER RUNNING SERVICES =

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d6862fb9abe docker.elastic.co/beats/filebeat-oss:7.8.0 “/usr/local/bin/dock…” 32 minutes ago Up 32 minutes filebeat-elasticsearch
fde8a2c54e46 docker.elastic.co/beats/metricbeat-oss:7.8.0 “/usr/local/bin/dock…” 32 minutes ago Up 32 minutes metricbeat-elasticsearch
bc45eb8379eb kurento/kurento-media-server:6.16.0 “/entrypoint.sh” 32 minutes ago Up 32 minutes (healthy) kms
c32a44c9a1b7 openvidu/media-node-controller:5.0.0 “/bin/sh -c '/beats/…” 2 months ago Up 32 minutes 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp kms_media-node-controller_1

=======================================
= CONFIGURATION FILES =

================ .env =================

./media_node: line 152: /opt/kms/.env: No such file or directory

========= docker-compose.yml ==========

------------------------------------------------------------------------------

DO NOT MODIFY THIS FILE !!!

Configuration properties should be specified in .env file

This docker-compose file coordinates all services of OpenVidu CE Platform.

Openvidu Version: 2.20.0

Installation Mode: Cloud Formation

------------------------------------------------------------------------------

version: ‘3.1’

services:
media-node-controller:
image: openvidu/media-node-controller:5.0.0
restart: always
ulimits:
core: -1
entrypoint: [’/bin/sh’, ‘-c’, ‘/beats/copy_config_files.sh && /usr/local/bin/entrypoint.sh’]
environment:
- KMS_IMAGE=kurento/kurento-media-server:6.16.0
- MEDIASOUP_IMAGE=openvidu/mediasoup-controller:2.20.0-beta2
- METRICBEAT_IMAGE=docker.elastic.co/beats/metricbeat-oss:7.8.0
- FILEBEAT_IMAGE=docker.elastic.co/beats/filebeat-oss:7.8.0
- OPENVIDU_RECORDING_IMAGE=openvidu/openvidu-recording:2.19.0
- NO_COLOR=true
ports:
- 3000:3000
volumes:
- /opt/openvidu/recordings:/opt/openvidu/recordings
- /opt/openvidu/beats:/opt/openvidu/beats
- /var/run/docker.sock:/var/run/docker.sock
- /opt/openvidu/kurento-logs:/opt/openvidu/kurento-logs
- ./beats:/beats
- /work/images:/work/images
logging:
options:
max-size: “100M”

=======================================
= LOGS =


kms

  • trap on_error ERR

  • BASE_RTP_FILE=/etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini

  • WEBRTC_FILE=/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini
    ++ id -u

  • [[ 0 -eq 0 ]]

  • [[ -n 40000 ]]

  • set_parameter /etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini minPort 40000

  • local FILE=/etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini

  • local PARAM=minPort

  • local VALUE=40000

  • local ‘COMMENT=;’

  • local ‘REGEX=^;?\sminPort=.

  • grep --extended-regexp -q ‘^;?\sminPort=.’ /etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini

  • sed --regexp-extended -i ‘s/^;?\sminPort=./minPort=40000/’ /etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini

  • [[ -n 65535 ]]

  • set_parameter /etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini maxPort 65535

  • local FILE=/etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini

  • local PARAM=maxPort

  • local VALUE=65535

  • local ‘COMMENT=;’

  • local ‘REGEX=^;?\smaxPort=.

  • grep --extended-regexp -q ‘^;?\smaxPort=.’ /etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini

  • sed --regexp-extended -i ‘s/^;?\smaxPort=./maxPort=65535/’ /etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini

  • [[ -n ‘’ ]]

  • [[ -n ‘’ ]]

  • [[ -n ‘’ ]]

  • [[ -n ‘’ ]]

  • [[ -n ‘’ ]]

  • [[ -n ‘’ ]]

  • sed /::1/d

  • cat /etc/hosts

  • tee /etc/hosts

  • [[ -z ‘’ ]]

  • export ‘GST_DEBUG=2,Kurento*:4,kms*:4,sdp*:4,webrtc*:4,rtpendpoint:4,rtphandler:4,rtpsynchronizer:4,agnosticbin:4’

  • GST_DEBUG=‘2,Kurento*:4,kms*:4,sdp*:4,webrtc*:4,rtpendpoint:4,rtphandler:4,rtpsynchronizer:4,agnosticbin:4’
    ++ id -u

  • RUN_UID=0

  • [[ -n ‘’ ]]

  • echo ‘[Docker entrypoint] Start Kurento Media Server, UID: 0’

  • exec /usr/bin/kurento-media-server ‘’
    [Docker entrypoint] Start Kurento Media Server, UID: 0
    0:00:00.675850544 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0x120000: ‘AVR (Audio Visual Research)’ is not mapped
    0:00:00.675886898 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0x180000: ‘CAF (Apple Core Audio File)’ is not mapped
    0:00:00.675893350 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0x100000: ‘HTK (HMM Tool Kit)’ is not mapped
    0:00:00.675898935 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0xc0000: ‘MAT4 (GNU Octave 2.0 / Matlab 4.2)’ is not mapped
    0:00:00.675903788 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0xd0000: ‘MAT5 (GNU Octave 2.1 / Matlab 5.0)’ is not mapped
    0:00:00.675909336 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0x210000: ‘MPC (Akai MPC 2k)’ is not mapped
    0:00:00.675914610 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0xe0000: ‘PVF (Portable Voice Format)’ is not mapped
    0:00:00.675919598 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0x160000: ‘SD2 (Sound Designer II)’ is not mapped
    0:00:00.675927471 19 0x222bc70 WARN default gstsf.c:98:gst_sf_create_audio_template_caps: format 0x190000: ‘WVE (Psion Series 3)’ is not mapped
    0:00:22.778795673 19 0x222bc70 WARN ladspa gstladspa.c:455:plugin_init: no LADSPA plugins found, check LADSPA_PATH


    kms_media-node-controller_1

Creating dir for beats
Copying beat config files
[Nest] 12 - 09/23/2021, 11:16:42 AM [NestFactory] Starting Nest application…
[Nest] 12 - 09/23/2021, 11:16:42 AM [InstanceLoader] DiscoveryModule dependencies initialized +43ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [InstanceLoader] ConfigHostModule dependencies initialized +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [InstanceLoader] ScheduleModule dependencies initialized +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [InstanceLoader] ConfigModule dependencies initialized +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM ======== MEDIA NODE CONTROLLER CONFIGURATION ========== +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM RECORDINGS_SYSTEM_PATH: /opt/openvidu/recordings +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM LOGS_DIRECTORIES: /opt/openvidu/kurento-logs +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM MAX_LOG_FILES: 10 +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM ======================================================= +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [InstanceLoader] AppModule dependencies initialized +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RoutesResolver] DockerController {/media-node}: +7ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/dockerGatewayIp, GET} route +3ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/getContainerIp/:containerIdOrName, GET} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/getRunningContainers, GET} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/isContainerRunning/:containerNameOrId, GET} route +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/getContainerIdByName/:containerName, GET} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/getContainerByNameOrId/:containerNameOrId, GET} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/getLabelsFromContainerNameOrId/:containerNameOrId, GET} route +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/checkImageExists, POST} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/pullDockerImage, POST} route +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node, POST} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/waitContainer/:containerNameOrId, POST} route +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/stopContainer/:containerNameOrId, DELETE} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/removeContainer/:containerNameOrId, DELETE} route +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/runCommandInContainer/:containerNameOrId, POST} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RoutesResolver] ConfigController {/media-node}: +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/status, GET} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/cpu, GET} route +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/getRequestIp, GET} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/getEnvVariable/:envVariable, GET} route +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/waitForFile, POST} route +1ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [RouterExplorer] Mapped {/media-node/recordings/:recordingId/:recordingFile, DELETE} route +0ms
[Nest] 12 - 09/23/2021, 11:16:42 AM [NestApplication] Nest application successfully started +14ms
Creating dir for beats
Copying beat config files
[Nest] 11 - 11/29/2021, 10:01:56 PM [NestFactory] Starting Nest application…
[Nest] 11 - 11/29/2021, 10:01:58 PM [InstanceLoader] DiscoveryModule dependencies initialized +2327ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [InstanceLoader] ConfigHostModule dependencies initialized +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [InstanceLoader] ScheduleModule dependencies initialized +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [InstanceLoader] ConfigModule dependencies initialized +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM ======== MEDIA NODE CONTROLLER CONFIGURATION ========== +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM RECORDINGS_SYSTEM_PATH: /opt/openvidu/recordings +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM LOGS_DIRECTORIES: /opt/openvidu/kurento-logs +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM MAX_LOG_FILES: 10 +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM ======================================================= +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [InstanceLoader] AppModule dependencies initialized +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RoutesResolver] DockerController {/media-node}: +4ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/dockerGatewayIp, GET} route +3ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/getContainerIp/:containerIdOrName, GET} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/getRunningContainers, GET} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/isContainerRunning/:containerNameOrId, GET} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/getContainerIdByName/:containerName, GET} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/getContainerByNameOrId/:containerNameOrId, GET} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/getLabelsFromContainerNameOrId/:containerNameOrId, GET} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/checkImageExists, POST} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/pullDockerImage, POST} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node, POST} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/waitContainer/:containerNameOrId, POST} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/stopContainer/:containerNameOrId, DELETE} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/removeContainer/:containerNameOrId, DELETE} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/runCommandInContainer/:containerNameOrId, POST} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RoutesResolver] ConfigController {/media-node}: +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/status, GET} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/cpu, GET} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/getRequestIp, GET} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/getEnvVariable/:envVariable, GET} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/waitForFile, POST} route +0ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [RouterExplorer] Mapped {/media-node/recordings/:recordingId/:recordingFile, DELETE} route +1ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [NestApplication] Nest application successfully started +29ms
[Nest] 11 - 11/29/2021, 10:01:58 PM [AuthGuard] First Request from: 172.31.81.87. Security Enabled
[Nest] 11 - 11/29/2021, 10:01:58 PM [AuthGuard] Valid Request from known OpenVidu IP: 172.31.81.87
[Nest] 11 - 11/29/2021, 10:01:58 PM [AuthGuard] Valid Request from known OpenVidu IP: 172.31.81.87
[Nest] 11 - 11/29/2021, 10:01:58 PM [AuthGuard] Valid Request from known OpenVidu IP: 172.31.81.87
[Nest] 11 - 11/29/2021, 10:01:58 PM [AuthGuard] Valid Request from known OpenVidu IP: 172.31.81.87
[Nest] 11 - 11/29/2021, 10:01:58 PM [DockerService] Checking if kms container is running
[Nest] 11 - 11/29/2021, 10:01:58 PM [AuthGuard] Valid Request from known OpenVidu IP: 172.31.81.87
[Nest] 11 - 11/29/2021, 10:01:58 PM [AuthGuard] Valid Request from known OpenVidu IP: 172.31.81.87
[Nest] 11 - 11/29/2021, 10:01:58 PM [DockerService] Checking if kms container is running
[Nest] 11 - 11/29/2021, 10:01:58 PM [DockerService] Launching container kurento/kurento-media-server:6.16.0
[Nest] 11 - 11/29/2021, 10:01:58 PM [DockerService] Object:
{
“Image”: “kurento/kurento-media-server:6.16.0”,
“name”: “kms”,
“Env”: [
“KMS_MIN_PORT=40000”,
“KMS_MAX_PORT=65535”,
“KURENTO_LOG_FILE_SIZE=100”,
“KURENTO_NUMBER_LOG_FILES=10”,
“KURENTO_LOGS_PATH=/opt/openvidu/kurento-logs”
],
“HostConfig”: {
“AutoRemove”: false,
“networkMode”: “host”,
“Binds”: [
“/opt/openvidu/recordings:/opt/openvidu/recordings”,
“/opt/openvidu/kms-crashes:/opt/openvidu/kms-crashes”,
“/opt/openvidu/kurento-logs:/opt/openvidu/kurento-logs”
],
“Ulimits”: [
{
“Name”: “core”,
“Soft”: -1,
“Hard”: -1
}
],
“RestartPolicy”: {
“Name”: “always”
}
},
“Labels”: {
“node”: “Media Node”,
“kms-configuration”: “{“configuration”:{“KURENTO_LOGS_PATH”:”/opt/openvidu/kurento-logs",“KMS_MIN_PORT”:“40000”,“KURENTO_LOG_FILE_SIZE”:“100”,“KURENTO_NUMBER_LOG_FILES”:“10”,“KMS_MAX_PORT”:“65535”},“kmsImage”:“kurento/kurento-media-server:6.16.0”,“mediaNodePrivateIp”:“172.31.91.33”}",
“media-node-private-ip”: “172.31.91.33”
}
}

Ok, we’ve realised where the problem is just now: it is not enough to modify the docker-compose.yml file in your Media Node. The “volumes” section you have modified won’t work in the kurento-media-server container. As you can see, it is for the “media-node-controller” container (which is the controller for all the services in the Media Node).
You will have to crete your own kurento-media-server image inheriting with FROM, and copying the images in the desired path.
Then create your new Media Node AMI with this new image already pulled, so new Media Nodes won’t have to download it from DockerHub.
And don’t forget to set variable KMS_IMAGE in your Master Node .env configuration file.

Thanks for this Pablo. We decided to use image overlays via html/js rather than the gstream