Hi Dan
I tested this both doing everything within Toolset, so using Views to create a Content Template for single posts and inserting the video via shortcode, and by directly editing the theme template files and using types_render_field to output the video, as you describe.
I found that using Views things worked as expected. There is one proviso, which is that if you use autoplay then you never see the poster, which I think makes sense. (And actually, a minor bug, in that you can set autoplay to anything and it will autoplay, including "off".)
In my case I was just using the standard WordPress post type with a Types video field (slug: my-video) and the post featured image for the poster.
So my content template looked like this:
[wpv-post-body view_template='None']
<p>Video:</p>
[types field='my-video' autoplay='on' width='600' poster='[wpv-post-featured-image size='full' output='url']'][/types]
Then I tried editing the PHP template instead, which is where I had a problem.
I edited my single.php file (I'm just using standard posts and twentysixteen) to modify the start of the Loop output like so:
// Start the loop.
while ( have_posts() ) : the_post();
// Include the single post content template.
get_template_part( 'template-parts/content', 'single' );
// Insert the video
$args = array(
'autoplay' => 'on',
'poster' => the_post_thumbnail_url( 'full' ),
'width' => '640'
);
echo(types_render_field( 'my-video', $args ));
If I used output = raw as in your example it just printed the url of the video to the screen.
The above worked okay, except for the poster. If I disable autoplay (i.e. remove that argument) then the poster was not displayed, instead the url was printed above the non-autoplaying video.
That seems to be a bug, which I will discuss with colleagues now. But if you want to use autoplay then you shouldn't expect the poster to be displayed in any case, and so this bug might not affect you.
If you look through that and let me know how you get on.