One of the advantages of using DatoCMS instead of other content management systems is its video
query, which will return pre-computed video attributes that will help you display videos in your frontend without any additional manipulation.
To make it easy to offer optimized, progressive videos on your projects, we offer a package called @datocms/svelte
that exposes a <VideoPlayer />
component and pairs perfectly with the video query.
To take advantage of it, install the package:
yarn add @datocms/svelte
Then, inside your page, feed content coming from a video
query directly into the <VideoPlayer />
component:
<script>import { onMount } from 'svelte';import { VideoPlayer } from '@datocms/svelte';const query = `query {blogPost {titlecover {coverVideo {video {muxPlaybackIdtitlewidthheightblurUpThumb}}}}}`;let data = null;onMount(async () => {const response = await fetch('https://graphql.datocms.com/', {method: 'POST',headers: {'Content-Type': 'application/json',Authorization: "Bearer YOUR_API_TOKEN",},body: JSON.stringify({ query })})const json = await response.json()data = json.data;});</script>{#if data}<VideoPlayer data={data.blogPost.coverVideo.video} />{/if}<template><div><div v-if="loading">Loading...</div><div v-else-if="error">Something bad happened!</div><div v-else><article v-for="blogPost of data.allBlogPosts" v-bind:key="blogPost.id"><h6>{{blogPost.title}}</h6><video-player :data="blogPost.coverVideo.video" /></article></div></div></template><script setup>import { ref, onMounted } from 'vue'import { VideoPlayer } from "vue-datocms";import { request } from "./datocms";const data = ref(null);const error = ref(null);const loading = ref(true);const HOMEPAGE_QUERY = `query HomePage($limit: IntType) {allBlogPosts(first: $limit) {idtitlecoverVideo {video {muxPlaybackIdtitlewidthheightblurUpThumb}}}}`;onMounted(async () => {try {data.value = await request({query: HOMEPAGE_QUERY,variables: {limit: 10}});} catch (e) {error.value = e;}loading.value = false;})</script>