{"id":5783,"date":"2025-01-09T15:24:17","date_gmt":"2025-01-09T06:24:17","guid":{"rendered":"https:\/\/blog.criware.com\/?p=5783"},"modified":"2025-08-06T17:34:12","modified_gmt":"2025-08-06T08:34:12","slug":"sofdec-seamless-playback","status":"publish","type":"post","link":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/","title":{"rendered":"Sofdec Seamless Playback"},"content":{"rendered":"<p>In our <a href=\"https:\/\/blog.criware.com\/index.php\/2025\/01\/06\/video-playback-on-meshes-with-sofdec\/\">latest post<\/a> about Sofdec, we learned how you can render movies &#8211; even with an alpha channel &#8211; on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.\u00a0 Since this only involves streaming pre-rendered images, it can be achieved quickly while keeping a low CPU load.<\/p>\n<p>The picture below shows how video branching, for example when the user presses the A or B buttons \u2013 is an efficient and simple way to make the narrative evolve in different directions.<\/p>\n<p style=\"\n    display: block;\n    max-width: 650px;\n    margin: 0 auto;\n\tmargin-bottom:25px;\n\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seection.png\" alt=\"\" width=\"3521\" height=\"1554\" class=\"alignnone size-full wp-image-5786\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seection.png 3521w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seection-300x132.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seection-1024x452.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seection-768x339.png 768w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seection-1536x678.png 1536w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seection-2048x904.png 2048w\" sizes=\"auto, (max-width: 3521px) 100vw, 3521px\" \/><\/p>\n<p>CRI Sofdec offers convenient functions for the seamless concatenation of videos. The Unity scene below is from our official SDK.<br \/>\n<strong>SDK\\unity\\samples\\UnityProject\\Assets\\Scenes\\crimana\\basic\\Scene_06_SeamlessSequencePlayback.unity<\/strong><\/p>\n<p>Let&#8217;s take a look at this example.&nbsp;<\/p>\n<div style=\"max-width: 700px; margin: 0 auto; margin-bottom:30px;\">\n<div style=\"width: 800px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-5783-1\" width=\"800\" height=\"428\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seamless-playback-video2.mp4?_=1\" \/><a href=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seamless-playback-video2.mp4\">https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/seamless-playback-video2.mp4<\/a><\/video><\/div>\n<\/div>\n<p>For this scene, seven video files were first prepared (shown below). Each time the player presses a button from 1 to 7, the corresponding video is added to the playlist. The videos continue to be seamlessly concatenated and played (in the order of the buttons pressed) until the end of the playlist is reached.<\/p>\n<p style=\"\n    display: block;\n    max-width: 650px;\n    margin: 0 auto;\n\"><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/7-videos.png\" alt=\"\" width=\"1374\" height=\"499\" class=\"alignnone size-full wp-image-5784\" srcset=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/7-videos.png 1374w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/7-videos-300x109.png 300w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/7-videos-1024x372.png 1024w, https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/7-videos-768x279.png 768w\" sizes=\"auto, (max-width: 1374px) 100vw, 1374px\" \/>\n<\/p>\n<p>&nbsp;<\/p>\n<p>This demo relies on the following script:<\/p>\n<p><strong>SDK\\unity\\samples\\UnityProject\\Assets\\Scenes\\crimana\\basic\\Scene_06_SeamlessSequencePlayback.cs<\/strong><\/p>\n<p>The code listed below displays the 7 buttons in the top left corner of the screen.<\/p>\n<p style=\"margin-bottom:0px\";>\nThe <strong>SetFile<\/strong> function provided by the movie controller object of CRI Sofdec is used to add videos to a playlist. The first video is added by passing the <strong>SetMode.New<\/strong> flag, and the subsequent videos are added by passing <strong>SetMode.Append<\/strong>. Once the playback is initiated, the videos in the playlist will automatically start playing seamlessly one after the other.\n<\/p>\n<pre style=\"width: 94%; margin-bottom: 0px; padding-bottom: 40px;\"><code class=\"hljs php\">\r\nGUILayout.BeginHorizontal(); {\r\n  GUI.enabled = (player_status != Player.Status.PlayEnd);\r\n  for (int i = 0; i < contentsList.Length; i++) {\r\n    string button_string = (i == currentIdx) ? (\"<\" + (i + 1).ToString() + \">\") : (i + 1).ToString();\r\n    if (Scene_00_GUI.Button(button_string, GUILayout.MinHeight(40), GUILayout.MinWidth(40))) {\r\n\r\n      if (entryList.Count == 0) {\r\n        <b style=\"background-color: #bfe0ef;\">movieController.player.SetFile<\/b>(null, contentsList[i], <b style=\"background-color: #bfe0ef;\">Player.SetMode.New<\/b>);\r\n        currentIdx = i;\r\n        entryList.Add(i);\r\n      } else {\r\n        \/* If the number of entries in the plug-in is insufficient, it returns false. *\/\r\n        bool set_result = <b style=\"background-color: #bfe0ef;\">movieController.player.SetFile<\/b>(null, contentsList[i], <b style=\"background-color: #bfe0ef;\">Player.SetMode.Append<\/b>);\r\n        if (set_result) {\r\n          entryList.Add(i);\r\n        } else {\r\n          Debug.Log(\"failed SetEntry (entry pool is empty).\");\r\n        }\r\n      }\r\n\r\n    }\r\n  }\r\n  GUI.enabled = true;\r\n}\r\nGUILayout.EndHorizontal();\r\n\r\n<\/code><\/pre>\n<p>As you can see from the code above, it is also possible to trigger events &#8211; when the playback of a specific video starts or ends &#8211; by checking the value of the player status enumeration <strong>Player.Status<\/strong> (in this example, <strong>Player.Status.PlayEnd<\/strong> was checked).<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In our latest post about Sofdec, we learned how you can render movies &#8211; even with an alpha channel &#8211;<\/p>\n","protected":false},"author":2,"featured_media":5793,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[6,7,23],"tags":[],"class_list":["post-5783","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sofdec","category-tutorials","category-unity"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"In our latest post about Sofdec, we learned how you can render movies - even with an alpha channel - on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"criware\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\n\t\t<!-- Google tag (gtag.js) --> <script async src=\"https:\/\/www.googletagmanager.com\/gtag\/js?id=G-3KHVJQ0K75\"><\/script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-3KHVJQ0K75'); <\/script>\n\t\t<meta property=\"og:locale\" content=\"en_GB\" \/>\n\t\t<meta property=\"og:site_name\" content=\"CRI Middleware Blog - Unleash creativity, boost productivity.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Sofdec Seamless Playback - CRI Middleware Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"In our latest post about Sofdec, we learned how you can render movies - even with an alpha channel - on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/08\/CRI-Blog_Title-banner_03.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/08\/CRI-Blog_Title-banner_03.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2025-01-09T06:24:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-08-06T08:34:12+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Sofdec Seamless Playback - CRI Middleware Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"In our latest post about Sofdec, we learned how you can render movies - even with an alpha channel - on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/08\/CRI-Blog_Title-banner_03.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#blogposting\",\"name\":\"Sofdec Seamless Playback - CRI Middleware Blog\",\"headline\":\"Sofdec Seamless Playback\",\"author\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/author\\\/crich2_admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/blog.criware.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Blog-Picture-20241217_Sofdec_SeamlessPlayback_Blog.jpg\",\"width\":800,\"height\":445},\"datePublished\":\"2025-01-09T15:24:17+09:00\",\"dateModified\":\"2025-08-06T17:34:12+09:00\",\"inLanguage\":\"en-GB\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#webpage\"},\"articleSection\":\"Sofdec, Tutorials, Unity\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.criware.com#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.criware.com\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/category\\\/sofdec\\\/#listItem\",\"name\":\"Sofdec\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/category\\\/sofdec\\\/#listItem\",\"position\":2,\"name\":\"Sofdec\",\"item\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/category\\\/sofdec\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#listItem\",\"name\":\"Sofdec Seamless Playback\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.criware.com#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#listItem\",\"position\":3,\"name\":\"Sofdec Seamless Playback\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/category\\\/sofdec\\\/#listItem\",\"name\":\"Sofdec\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/#organization\",\"name\":\"CRI Middleware Blog\",\"description\":\"Unleash creativity, boost productivity.\",\"url\":\"https:\\\/\\\/blog.criware.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/blog.criware.com\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/CRI-Blog_Title-banner_03.png\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#organizationLogo\",\"width\":262,\"height\":81},\"image\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/author\\\/crich2_admin\\\/#author\",\"url\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/author\\\/crich2_admin\\\/\",\"name\":\"criware\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#webpage\",\"url\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/\",\"name\":\"Sofdec Seamless Playback - CRI Middleware Blog\",\"description\":\"In our latest post about Sofdec, we learned how you can render movies - even with an alpha channel - on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.\",\"inLanguage\":\"en-GB\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/author\\\/crich2_admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/author\\\/crich2_admin\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/blog.criware.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Blog-Picture-20241217_Sofdec_SeamlessPlayback_Blog.jpg\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#mainImage\",\"width\":800,\"height\":445},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/index.php\\\/2025\\\/01\\\/09\\\/sofdec-seamless-playback\\\/#mainImage\"},\"datePublished\":\"2025-01-09T15:24:17+09:00\",\"dateModified\":\"2025-08-06T17:34:12+09:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.criware.com\\\/#website\",\"url\":\"https:\\\/\\\/blog.criware.com\\\/\",\"name\":\"CRI Middleware Blog\",\"description\":\"Unleash creativity, boost productivity.\",\"inLanguage\":\"en-GB\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.criware.com\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Sofdec Seamless Playback - CRI Middleware Blog","description":"In our latest post about Sofdec, we learned how you can render movies - even with an alpha channel - on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.","canonical_url":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":"&lt;!-- Google tag (gtag.js) --&gt; &lt;script async src=\"https:\/\/www.googletagmanager.com\/gtag\/js?id=G-3KHVJQ0K75\"&gt;&lt;\/script&gt; &lt;script&gt; window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-3KHVJQ0K75'); &lt;\/script&gt;"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#blogposting","name":"Sofdec Seamless Playback - CRI Middleware Blog","headline":"Sofdec Seamless Playback","author":{"@id":"https:\/\/blog.criware.com\/index.php\/author\/crich2_admin\/#author"},"publisher":{"@id":"https:\/\/blog.criware.com\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/Blog-Picture-20241217_Sofdec_SeamlessPlayback_Blog.jpg","width":800,"height":445},"datePublished":"2025-01-09T15:24:17+09:00","dateModified":"2025-08-06T17:34:12+09:00","inLanguage":"en-GB","mainEntityOfPage":{"@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#webpage"},"isPartOf":{"@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#webpage"},"articleSection":"Sofdec, Tutorials, Unity"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/blog.criware.com#listItem","position":1,"name":"Home","item":"https:\/\/blog.criware.com","nextItem":{"@type":"ListItem","@id":"https:\/\/blog.criware.com\/index.php\/category\/sofdec\/#listItem","name":"Sofdec"}},{"@type":"ListItem","@id":"https:\/\/blog.criware.com\/index.php\/category\/sofdec\/#listItem","position":2,"name":"Sofdec","item":"https:\/\/blog.criware.com\/index.php\/category\/sofdec\/","nextItem":{"@type":"ListItem","@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#listItem","name":"Sofdec Seamless Playback"},"previousItem":{"@type":"ListItem","@id":"https:\/\/blog.criware.com#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#listItem","position":3,"name":"Sofdec Seamless Playback","previousItem":{"@type":"ListItem","@id":"https:\/\/blog.criware.com\/index.php\/category\/sofdec\/#listItem","name":"Sofdec"}}]},{"@type":"Organization","@id":"https:\/\/blog.criware.com\/#organization","name":"CRI Middleware Blog","description":"Unleash creativity, boost productivity.","url":"https:\/\/blog.criware.com\/","logo":{"@type":"ImageObject","url":"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/08\/CRI-Blog_Title-banner_03.png","@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#organizationLogo","width":262,"height":81},"image":{"@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/blog.criware.com\/index.php\/author\/crich2_admin\/#author","url":"https:\/\/blog.criware.com\/index.php\/author\/crich2_admin\/","name":"criware"},{"@type":"WebPage","@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#webpage","url":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/","name":"Sofdec Seamless Playback - CRI Middleware Blog","description":"In our latest post about Sofdec, we learned how you can render movies - even with an alpha channel - on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.","inLanguage":"en-GB","isPartOf":{"@id":"https:\/\/blog.criware.com\/#website"},"breadcrumb":{"@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#breadcrumblist"},"author":{"@id":"https:\/\/blog.criware.com\/index.php\/author\/crich2_admin\/#author"},"creator":{"@id":"https:\/\/blog.criware.com\/index.php\/author\/crich2_admin\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/blog.criware.com\/wp-content\/uploads\/2025\/01\/Blog-Picture-20241217_Sofdec_SeamlessPlayback_Blog.jpg","@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#mainImage","width":800,"height":445},"primaryImageOfPage":{"@id":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/#mainImage"},"datePublished":"2025-01-09T15:24:17+09:00","dateModified":"2025-08-06T17:34:12+09:00"},{"@type":"WebSite","@id":"https:\/\/blog.criware.com\/#website","url":"https:\/\/blog.criware.com\/","name":"CRI Middleware Blog","description":"Unleash creativity, boost productivity.","inLanguage":"en-GB","publisher":{"@id":"https:\/\/blog.criware.com\/#organization"}}]},"og:locale":"en_GB","og:site_name":"CRI Middleware Blog - Unleash creativity, boost productivity.","og:type":"article","og:title":"Sofdec Seamless Playback - CRI Middleware Blog","og:description":"In our latest post about Sofdec, we learned how you can render movies - even with an alpha channel - on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.","og:url":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/","og:image":"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/08\/CRI-Blog_Title-banner_03.png","og:image:secure_url":"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/08\/CRI-Blog_Title-banner_03.png","article:published_time":"2025-01-09T06:24:17+00:00","article:modified_time":"2025-08-06T08:34:12+00:00","twitter:card":"summary_large_image","twitter:title":"Sofdec Seamless Playback - CRI Middleware Blog","twitter:description":"In our latest post about Sofdec, we learned how you can render movies - even with an alpha channel - on any object meshes. Another great feature for games is the seamless concatenation of videos during playback. For instance, in interactive storytelling, you could switch to different videos based on the choices of the player.","twitter:image":"https:\/\/blog.criware.com\/wp-content\/uploads\/2021\/08\/CRI-Blog_Title-banner_03.png"},"aioseo_meta_data":{"post_id":"5783","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"titles":[],"descriptions":[],"socialPosts":{"email":[],"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2025-01-09 05:37:04","updated":"2025-08-06 08:38:01","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/blog.criware.com\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/blog.criware.com\/index.php\/category\/sofdec\/\" title=\"Sofdec\">Sofdec<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tSofdec Seamless Playback\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/blog.criware.com"},{"label":"Sofdec","link":"https:\/\/blog.criware.com\/index.php\/category\/sofdec\/"},{"label":"Sofdec Seamless Playback","link":"https:\/\/blog.criware.com\/index.php\/2025\/01\/09\/sofdec-seamless-playback\/"}],"_links":{"self":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/5783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/comments?post=5783"}],"version-history":[{"count":22,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/5783\/revisions"}],"predecessor-version":[{"id":5810,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/posts\/5783\/revisions\/5810"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media\/5793"}],"wp:attachment":[{"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/media?parent=5783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/categories?post=5783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.criware.com\/index.php\/wp-json\/wp\/v2\/tags?post=5783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}