DEV Community

Abhijeet Chaudhari
Abhijeet Chaudhari

Posted on

Integrating MinIO notifications with your Node.js service, FFmpeg, and Mozilla convert API.

1. How MinIO Sends Notifications
MinIO doesn’t process notifications itself but requires configuration to send them to an external endpoint (like your Node.js service). Here's the general behavior:

Supported Notification Targets: MinIO can send notifications to:
HTTP Webhooks
Message queues like Kafka, RabbitMQ
Serverless compute frameworks or custom REST APIs
Response Handling:
MinIO expects an acknowledgment from the target service (HTTP 200 or 201 for success). If it receives anything other than a success code (e.g., 500 or 400), it will treat the notification as failed.

2. Configuring MinIO to Notify Node.js
To notify your Node.js service about new files:

Configure Notifications:

Use MinIO’s mc admin event add or mc event commands to set up notifications for a specific bucket.
Define the target notification type (e.g., an HTTP webhook to your Node.js service).
How the Notification Works:

When a new file is added to the bucket, MinIO sends an HTTP POST request to the configured webhook with details about the event. The payload includes:
Bucket name
Object name (file path)
Event type (s3:ObjectCreated:*, etc.)
Your Node.js service will receive this data and can act accordingly.

3. Process for Integration
To enable MinIO to trigger FFmpeg and Mozilla’s convert API for transcoding and transcription, the workflow looks like this:

Step 1: MinIO Notifies Your Node.js Service
You configure a MinIO event to notify a specific URL (your Node.js service endpoint) whenever a new file is uploaded.
MinIO sends an HTTP POST request to the service with metadata about the file.

Step 2: Node.js Service Processes the Notification
Your Node.js service listens to these incoming POST requests.
Upon receiving the notification:
Parse the payload to extract file details (e.g., bucket name, file path).
Log and validate the notification data.

Step 3: Start Transcoding and Transcription
The service uses FFmpeg for transcoding:
Fetch the file from MinIO (using the file path from the notification).
Run the transcoding process.
After extracting audio from the video, the Node.js service calls Mozilla’s convert API for transcription.

Step 4: Upload the Result Back
Once the transcoding and transcription are complete:
Upload the processed file (e.g., a transcoded video or a transcript) back to MinIO.
Store the results in a "destination bucket."

Step 5: Notify Clients (Optional)
Use real-time communication (e.g., socket.io) or another webhook to notify the client about the process completion.
4. Code infor for MinIO Notifications
Configuration Only: MinIO handles sending the notification; you don’t need to write code in MinIO itself.

You do, however, need to configure the notification target.
Example: Configure MinIO to send notifications to an HTTP webhook where your Node.js server is listening.
Node.js Service: You will need to write code in your Node.js service to:

Handle the HTTP POST request from MinIO.
Fetch the file from MinIO and start FFmpeg and transcription processing.

5. Summary of the above Steps which I explaind
Setup MinIO Notification:
Configure MinIO to send notifications (e.g., via HTTP) on file upload events.
Node.js Service as Notification Target:
Deploy a Node.js service that receives and processes MinIO notifications.
Integrate FFmpeg and Mozilla API:
Fetch the file based on the notification.
Start processing (transcoding, transcription).
Result Upload:
Upload the processed files or results (e.g., video, transcripts) back to MinIO.
Notify Clients (if required):
Use WebSockets or a similar mechanism to inform clients of the process completion.

Top comments (0)