Products
Products
Video Hosting
Upload and manage your videos in a centralized video library.
Image Hosting
Upload and manage all your images in a centralized library.
Galleries
Choose from 100+templates to showcase your media in style.
Video Messaging
Record, and send personalized video messages.
CincoTube
Create your own community video hub your team, students or fans.
Pages
Create dedicated webpages to share your videos and images.
Live
Create dedicated webpages to share your videos and images.
For Developers
Video API
Build a unique video experience.
DeepUploader
Collect and store user content from anywhere with our file uploader.
Solutions
Solutions
Enterprise
Supercharge your business with secure, internal communication.
Townhall
Webinars
Team Collaboration
Learning & Development
Creative Professionals
Get creative with a built in-suite of editing and marketing tools.
eCommerce
Boost sales with interactive video and easy-embedding.
Townhall
Webinars
Team Collaboration
Learning & Development
eLearning & Training
Host and share course materials in a centralized portal.
Sales & Marketing
Attract, engage and convert with interactive tools and analytics.
"Cincopa helped my Enterprise organization collaborate better through video."
Book a Demo
Resources
Resources
Blog
Learn about the latest industry trends, tips & tricks.
Help Centre
Get access to help articles FAQs, and all things Cincopa.
Partners
Check out our valued list of partners.
Product Updates
Stay up-to-date with our latest greatest features.
Ebooks, Guides & More
Customer Stories
Hear how we've helped businesses succeed.
Boost Campaign Performance Through Video
Discover how to boost your next campaign by using video.
Download Now
Pricing
Watch a Demo
Demo
Login
Start Free Trial
CMS, ensuring efficient storage, retrieval, and SEO optimization. Images and videos are essential components in web and mobile platforms, and their schemas must be structured for scalability and performance. By applying best practices such as correct data types, normalization, and metadata organization, content management becomes more streamlined, and search engine visibility improves. JSON-LD schema markup further enhances SEO by adding structured metadata like descriptions, thumbnails, and licensing details. Unified Media Schema Design A unified media schema consolidates shared fields into a single table, while specialized tables for images and videos store format-specific metadata. This approach minimizes redundancy, ensures scalability, and allows the schema to accommodate versioning and localization. Schema Example for Media Assets The following schema provides an example of how to organize both images and videos: -- Base media table for shared fields CREATE TABLE media ( media_id SERIAL PRIMARY KEY, media_type VARCHAR(10) NOT NULL CHECK (media_type IN ('image', 'video')), title VARCHAR(255), description TEXT, file_url TEXT NOT NULL, creator_id INT REFERENCES users(user_id), upload_date TIMESTAMPTZ DEFAULT NOW(), status VARCHAR(20) NOT NULL ); -- Subtype tables for specialized metadata CREATE TABLE images ( media_id INT PRIMARY KEY REFERENCES media(media_id), resolution VARCHAR(20), thumbnail_url TEXT, small_image_url TEXT, medium_image_url TEXT ); CREATE TABLE videos ( media_id INT PRIMARY KEY REFERENCES media(media_id), duration INT, resolution VARCHAR(20), hls_url TEXT, dash_url TEXT ); Explanation : Base Media Table : The media table stores shared fields common to all media types, including the title, description, and file URL. It differentiates between images and videos using the media_type field. Specialized Metadata Tables : Separate tables store specific data for images and videos, ensuring the system is organized and scalable. For example, image-specific fields like thumbnail_url are stored in the images table, and video-specific fields like hls_url are stored in the videos table. Versioning and Localization Managing versions and localizations of media content ensures that the most up-to-date and culturally relevant video or image content is served to users. This can be achieved through version control for media and the ability to manage multiple language versions of the same media asset. Version Control A media_versions table tracks the different versions of media content, allowing changes to be managed across media types. CREATE TABLE media_versions ( version_id SERIAL PRIMARY KEY, media_id INT REFERENCES media(media_id), version_number INT, upload_date TIMESTAMPTZ DEFAULT NOW(), status VARCHAR(20) NOT NULL ); Localization Localization ensures that media content can be adapted to various languages, allowing for internationalized metadata. The media_translations table stores translations for titles, descriptions, and other relevant content fields. CREATE TABLE media_translations ( translation_id SERIAL PRIMARY KEY, media_id INT REFERENCES media(media_id), language_code VARCHAR(10), title VARCHAR(255), description TEXT, UNIQUE (media_id, language_code) -- Critical for data integrity ); Explanation : Version Control : The media_versions table provides a mechanism to track and manage multiple versions of media assets, ensuring that updates are applied efficiently. Localization : The media_translations table enables the CMS to handle media content in multiple languages. Each translation is linked to a media_id, maintaining consistency and integrity across versions. Security Implementation Securing media content is essential to prevent unauthorized access, data breaches, and piracy. Proper security measures should be implemented for file upload, storage, and access control. File Upload Validation To prevent the upload of malicious files, file validation should check both the MIME type and file content. Example MIME Validation : ALLOWED_MIME_TYPES = {'image/jpeg', 'video/mp4'} def validate_file_type(file): if file.mime_type not in ALLOWED_MIME_TYPES: raise InvalidFileTypeError() # Validate file content (check magic bytes or file signature) if not is_valid_content(file): raise InvalidFileContentError() Explanation : File Type Validation : This code ensures only approved file types (e.g., image/jpeg and video/mp4) are uploaded, preventing the introduction of unsupported file types. Content Validation : In addition to checking the MIME type, the file’s content is also validated, ensuring that the file matches its declared type and reducing the risk of malicious files being uploaded. Encryption at Rest and in Transit For protecting media files from unauthorized access, encryption should be applied both during storage (at rest) and during transmission (in transit). Example : Encrypting Files Using AWS KMS const AWS = require('aws-sdk'); const s3 = new AWS.S3(); const params = { Bucket: 'your-bucket', Key: 'your-video.mp4', Body: fs.createReadStream('path-to-video.mp4'), ServerSideEncryption: 'aws:kms', // Use AWS KMS for encryption }; s3.upload(params, function(err, data) { if (err) { console.log('Error uploading video: ', err); } else { console.log('Video uploaded successfully: ', data); } }); Explanation : Encryption : By using AWS KMS for server-side encryption, video files are securely stored in the cloud. Data is encrypted during upload and at rest, ensuring protection from unauthorized access. SEO and Structured Data Map schema fields to JSON-LD markup for rich media previews. For SEO purposes, both images and videos should be marked up with structured data to improve visibility in search engines. Image JSON-LD Example { '@context': 'https://schema.org', '@type': 'ImageObject', 'name': 'Example Image', 'description': 'A sample image for schema design', 'contentUrl': 'https://cdn.example.com/image.jpg', 'uploadDate': '2023-05-01T12:00:00Z', 'thumbnail': 'https://cdn.example.com/thumbnail.jpg' } Video JSON-LD Example { '@context': 'https://schema.org', '@type': 'VideoObject', 'name': 'Example Video', 'description': 'A demo video for schema design', 'contentUrl': 'https://cdn.example.com/video.mp4', 'uploadDate': '2023-05-01T12:00:00Z', 'thumbnail': 'https://cdn.example.com/thumbnail.jpg', 'duration': 'PT2M', 'embedUrl': 'https://www.example.com/embed/video' } Explanation : Structured Data : The JSON-LD examples demonstrate how to add metadata about images and videos to help search engines understand the content better. This increases the chances of the media being featured in search engine results, enhancing visibility. Media Optimization Schema Extensions Enhancing the video and image schema to support multiple versions and resolutions ensures content is optimized for different use cases and devices. Responsive Images To improve image delivery, store URLs for different renditions of an image, such as small, medium, and large sizes. ALTER TABLE images ADD COLUMN large_image_url TEXT; Adaptive Video Streaming For videos, store URLs for different resolutions (e.g., 1080p, 720p) to support adaptive streaming based on the viewer’s bandwidth and device capabilities. ALTER TABLE videos ADD COLUMN video_1080p_url TEXT; ALTER TABLE videos ADD COLUMN video_720p_url TEXT; Explanation : Responsive Images : Adding a large_image_url field ensures that high-resolution images are available for larger screens or high-definition displays. Adaptive Streaming : Storing URLs for multiple video resolutions enables the CMS to serve the optimal video quality based on network conditions and device specifications. NoSQL Schema Considerations While this article focuses on relational databases, it’s important to mention that NoSQL or document-oriented databases (e.g., MongoDB) can also be used for media management. In NoSQL databases, media metadata is often stored as documents rather than tables. For instance, a media document in MongoDB might look like: { '_id': ObjectId('60d21b4667d0d8992e610c85'), 'media_id': ObjectId('60d21b4667d0d8992e610c84'), 'language_code': 'en', 'title': 'Example Video', 'description': 'A demo video for schema design', 'duration': 120, 'video_url': 'https://example.com/video.mp4' } Explanation : NoSQL Data Storage : Media metadata in a NoSQL database is stored in documents, providing flexibility for applications with unstructured data. This approach is useful for content that evolves quickly or has varied data types. Database Performance and Indexing For high-performance queries, it’s crucial to index key fields such as status , upload_date , and foreign keys ( creator_id ). This improves query speed, particularly when dealing with large media libraries. Example Indexing for Media Assets -- Index for images based on status and upload date CREATE INDEX idx_status_date ON images(status, upload_date); -- Index for videos based on status and creator CREATE INDEX idx_video_status_creator ON videos(status, creator_id); Explanation : Indexing : The indexes help speed up queries by organizing the data in a way that allows quick retrieval based on status, upload_date, or creator_id. This is crucial when managing large-scale media libraries, as it significantly reduces query times.