Caspar media directory on Google File Stream

#1
Hello awesome community,

We use Google Drive as a way for remote talent to auto-upload media to our Caspar system and build our rundowns. Place media in a folder and it magically shows up Caspar side. Works well with the consumer version of Google Drive, but that doesn't support Team Drives.

So we migrated over to Google File Stream. This almost works in Caspar but it seems to fail as soon as we try and play anything back. The Google File Stream system shows as a unique drive letter on the Windows Caspar system. When I point caspar's config to this drive letter it can read the media as available objects and even seems to be able to grab thumbnails. But as soon as I try and play an object it throws an error:

Code: Select all

[2018-02-17 10:16:42.835] [3932]  [error]   [struct caspar::tag_source_info * __ptr64] = G:/Team Drives/TMRO Studios/LIVE MEDIA//SPACE/11.07/LAUNCHES\Progress MS-08 Launch and Docking.mp4
[2018-02-17 10:16:42.835] [3932]  [error]   Caught at (AMCPCommandQueue Channel 1 for TCP Port 5250):
[2018-02-17 10:16:42.835] [3932]  [error]   
[2018-02-17 10:16:42.835] [3932]  [error]       core\producer\frame_producer.cpp (331): `<lambda_0b473c66a9e2f34723aac9f98f1fd7bd>::operator()'::`1'::catch$2
[2018-02-17 10:16:42.835] [3932]  [error]       00007FFA13E3C1E0 (VCRUNTIME140): (filename not available): _C_specific_handler
[2018-02-17 10:16:42.835] [3932]  [error]       00007FFA13E32D03 (VCRUNTIME140): (filename not available): _TypeMatch
[2018-02-17 10:16:42.835] [3932]  [error]       00007FFA20E64203 (ntdll): (filename not available): RtlCaptureContext
[2018-02-17 10:16:42.835] [3932]  [error]       core\producer\frame_producer.cpp (320): <lambda_0b473c66a9e2f34723aac9f98f1fd7bd>::operator()
[2018-02-17 10:16:42.835] [3932]  [error]       core\producer\frame_producer.cpp (316): caspar::core::do_create_producer
[2018-02-17 10:16:42.835] [3932]  [error]       core\producer\frame_producer.cpp (382): caspar::core::frame_producer_registry::create_producer
[2018-02-17 10:16:42.835] [3932]  [error]       protocol\amcp\amcpcommandsimpl.cpp (400): caspar::protocol::amcp::loadbg_command
[2018-02-17 10:16:42.835] [3932]  [error]       protocol\amcp\amcpcommandsimpl.cpp (460): caspar::protocol::amcp::play_command
[2018-02-17 10:16:42.835] [3932]  [error]       type_traits (1408): std::_Invoker_functor::_Call<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > (__cdecl*& __ptr64)(caspar::protocol::amcp::command_context & __ptr64),caspar::protocol::amcp::command_context & __ptr64>
[2018-02-17 10:16:42.835] [3932]  [error]       type_traits (1476): std::invoke<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > (__cdecl*& __ptr64)(caspar::protocol::amcp::command_context & __ptr64),caspar::protocol::amcp::command_context & __ptr64>
[2018-02-17 10:16:42.835] [3932]  [error]       type_traits (1501): std::_Invoke_ret<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > (__cdecl*& __ptr64)(caspar::protocol::amcp::command_context & __ptr64),caspar::protocol::amcp::command_context & __ptr64>
[2018-02-17 10:16:42.835] [3932]  [error]       functional (209): std::_Func_impl<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > (__cdecl*)(caspar::protocol::amcp::command_context & __ptr64),std::allocator<int>,std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,caspar::protocol::amcp::command_context & __ptr64>::_Do_call
[2018-02-17 10:16:42.835] [3932]  [error]       functional (275): std::_Func_class<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,caspar::protocol::amcp::command_context & __ptr64>::operator()
[2018-02-17 10:16:42.835] [3932]  [error]       protocol\amcp\amcpcommand.h (112): caspar::protocol::amcp::AMCPCommand::Execute
[2018-02-17 10:16:42.835] [3932]  [error]       protocol\amcp\amcpcommandqueue.cpp (106): <lambda_b146f9aee8aafa4989577d7a50b08cf3>::operator()
[2018-02-17 10:16:42.835] [3932]  [error]       functional (209): std::_Func_impl<<lambda_adcc1d275de643d3997d4548168c1475>,std::allocator<int>,void>::_Do_call
[2018-02-17 10:16:42.835] [3932]  [error]       future (750): std::_Packaged_state<void __cdecl(void)>::_Call_immediate
[2018-02-17 10:16:42.835] [3932]  [error]       common\executor.h (234): <lambda_66f462db7b216ba64b393bcbfd7112a8>::operator()
[2018-02-17 10:16:42.835] [3932]  [error]       common\executor.h (286): caspar::executor::run
[2018-02-17 10:16:42.835] [3932]  [error]       00007FF624B2A413 (casparcg): (filename not available): boost::detail::shared_count::swap
[2018-02-17 10:16:42.835] [3932]  [error]       00007FFA1DA7DC05 (ucrtbase): (filename not available): iswascii
[2018-02-17 10:16:42.835] [3932]  [error]       00007FFA1E921FE4 (KERNEL32): (filename not available): BaseThreadInitThunk
[2018-02-17 10:16:42.835] [3932]  [error]       00007FFA20E2EFC1 (ntdll): (filename not available): RtlUserThreadStart
[2018-02-17 10:16:42.835] [3932]  [error]   
[2018-02-17 10:16:42.864] [3932]  [error]   No match found for supplied commands. Check syntax. Turn on log level debug for stacktrace.
[2018-02-17 10:16:42.864] [3932]  [info]    Sent message to 127.0.0.1:404 PLAY FAILED\r\n
I can move back to the old system, but then we lose Team Drive capabilities which kinda sucks. Anyone happen to have any clever ideas or workarounds to be able to make something like this work?

Thanks,

Benjamin

Re: Caspar media directory on Google File Stream

#2
From a quick search it seams, that Google File Stream is a virtual file system, that only downloads the files, when they are accessed. That make the access slower. That works for any document in Word etc. as the software simply waits until the file is open. It will not work, when Caspar tries to play a file. There is a way to mark a file as beeing available offline, but that is probably on a per file basis. It seams that Google Drive works the same as Dropbox or others by downloading the file, whenever a new file is added to the cloud storage. So that would be the way to go.
Didi Kunz
CasparCG Client-Programmer, Template Maker & Live CG-Operator
Media Support, CH-5722 Gränichen, Switzerland http://mediasupport.ch/
Problems? Guide to posting Bug reports & Feature requests

Re: Caspar media directory on Google File Stream

#3
Sorta. I can ask Google File Stream to make an entire folder available offline, which is indeed what we do. Playback off of the SSDs in the file system is instant through Explorer. I can see the files in Caspar Client. But no matter what I do, when trying to play off of Google File Stream's folder it fails to play.

It is creating a virtual drive (G: in my case) -- Although I assumed, likely incorrectly, that whatever pointers they are using to go back to the original file on my local C drive would be seen by Caspar.