Wirecast CLI and .wcst documentation

I couldn't fine a proper documentation of how to use Command line interface of what are options in a wcst file for wirecast 8. Is there any PDF somewhere I am missing ?

I could use CLI to launch wirecast with .wcst profile but I also need to autostart the stream. Also it now shows a warning that another wirecast instance is running how to get past that.

Thanks

7replies Oldest first
  • Oldest first
  • Newest first
  • Active threads
  • Popular
  • Wirecast Mac uses Apple Script. Wirecast Windows uses OLE with Perl, Visual Basic and C#. In Wirecast Windows use Help > Open Scripting Documentation and also Show Scripting Examples.

    Reply Like
  • I have been attempting the same thing in Wirecast 8 Pro (Windows) but found that the examples in the documentation are very sparse and no 'full' examples with complete class/method bodies.

    There are some methods and properties available for reference but when I take the example code into a C# project, the Visual Studio compiler complains about 'Marshal' does not contain a definition for 'GetActiveObject' and doesn't even recognize the Late static method. Is there another resource that can help with these kinds of things?

    I'm trying to do CLI as SD is. We're currently running Wirecast 8 Pro on macOS with a PowerShell module I wrote (with AppleScript) to handle a lot of features but because of OS issues, we want to move to Windows, hence the C# changeover.

     

    Any insight or direction would be greatly appreciated.

     

    Thanks.

    Reply Like
  • AH - I looked into the API and in particular apple script... The available capabilities have not been updated in many years leaving the current capabilities unsuitable for my needs. Having said that, I would be interested to know more about what you have done previously.

    Moving on to your question however, the documentation is pretty light-on. No more examples available from what I have found.

    GK

    Reply Like
  • AH Sorry that we don't provide more detailed scripting examples or support. Perhaps we need an area for user to user support.

    Reply Like
  • Sorry that we don't provide more detailed scripting examples or support. Perhaps we need an area for user to user support.

    Agree - that would be helpful. I did build the wiki with that intent - but I've not had time to load up content that I've already got in various pieces.

    Some time back, I did some reverse engineering to try to understand the areas that are not well documented and/or where questions like this have gone unanswered.

    I have not yet documented what each of them are, but it is a starting point. It was my goal to document the various elements that are valid in the XML data structure - but I want to wrap up some of the outstanding bugs with my usage of the standard product first. But thats another topic.

    The first set of data below is what I understand to be XML parameters being loaded into a data structure during startup of Wirecast.

    __int64 __fastcall roRosa::boot_Startup(roRosa *this, __int64 a2, void (*a3)(void))
    {
      zStringID *v3; // rbx
      const char *v4; // rcx
    
      zBoot::Depends((zBoot *)0x7A697261, (unsigned __int64)&zZira::boot_Module, a3);
      v3 = (zStringID *)zStringID::Default((zStringID *)0x7A697261);
      zStringID::Add(v3, 1920169076, "start_time", 0);
      zStringID::Add(v3, 1919251572, "end_time", 0);
      zStringID::Add(v3, 1919251577, "event_type", 0);
      zStringID::Add(v3, 1920166244, "source_id", 0);
      zStringID::Add(v3, 1919710313, "launched_time", 0);
      zStringID::Add(v3, 1916889444, "alias_source_id", 0);
      zStringID::Add(v3, 1918985076, "action_time", 0);
      zStringID::Add(v3, 1918985060, "action_duration", 0);
      zStringID::Add(v3, 1918985062, "action_flags", 0);
      zStringID::Add(v3, 1920164713, "scene_id", 0);
      zStringID::Add(v3, 1919117417, "channel_id", 0);
      zStringID::Add(v3, 1920626546, "zorder", 0);
      zStringID::Add(v3, 1953784167, "template_tag", 0);
      zStringID::Add(v3, 1769174611, "is_virtual_set_decor", 0);
      zStringID::Add(v3, 1919770987, "marker", 0);
      zStringID::Add(v3, 1919182178, "debug_source_name", 0);
      zStringID::Add(v3, 1920362867, "invisible", 0);
      zStringID::Add(v3, 1920298601, "unique_id", 0);
      zStringID::Add(v3, 1851878757, "name", 0);
      zStringID::Add(v3, 1986096245, "value", 0);
      zStringID::Add(v3, 1986353241, "vector_xy", 0);
      zStringID::Add(v3, 1986353751, "vector_zw", 0);
      zStringID::Add(v3, 1919182182, "default_action", 0);
      zStringID::Add(v3, 1919775599, "media_in", 0);
      zStringID::Add(v3, 1919775604, "media_out", 0);
      zStringID::Add(v3, 1919775600, "play_speed", 0);
      zStringID::Add(v3, 1953066341, "timestamp", 0);
      zStringID::Add(v3, 2003072104, "width", 0);
      zStringID::Add(v3, 1751607412, "height", 0);
      zStringID::Add(v3, 1919973734, "play_flags", 0);
      zStringID::Add(v3, 1919772020, "ro_media_type", 0);
      zStringID::Add(v3, 1919774824, "ro_playhead", 0);
      zStringID::Add(v3, 1919117668, "chroma_config_id", 0);
      zStringID::Add(v3, 1918989932, "volume", 0);
      zStringID::Add(v3, 1918989933, "mute", 0);
      zStringID::Add(v3, 1918987631, "audio_monitor", 0);
      zStringID::Add(v3, 1918988398, "audio_pan", 0);
      zStringID::Add(v3, 1918985064, "channel_select", 0);
      zStringID::Add(v3, 1665299248, "channel_bus_quad0", 0);
      zStringID::Add(v3, 1665299249, "channel_bus_quad1", 0);
      zStringID::Add(v3, 1665299250, "channel_bus_quad2", 0);
      zStringID::Add(v3, 1665299251, "channel_bus_quad3", 0);
      zStringID::Add(v3, 1667779888, "channel_map_quad0", 0);
      zStringID::Add(v3, 1667779889, "channel_map_quad1", 0);
      zStringID::Add(v3, 1667779890, "channel_map_quad2", 0);
      zStringID::Add(v3, 1667779891, "channel_map_quad3", 0);
      zStringID::Add(v3, 1918988385, "plugin_active", 0);
      zStringID::Add(v3, 1920234340, "transition_seed", 0);
      zStringID::Add(v3, 1919893842, "ro_respect_aspect_ratio", 0);
      zStringID::Add(v3, 1918194544, "ro_user_scale", 0);
      zStringID::Add(v3, 1667978866, "ck_version", 0);
      zStringID::Add(v3, 1667977035, "ck_configured", 0);
      zStringID::Add(v3, 1667973475, "ck_active", 0);
      zStringID::Add(v3, 1667978563, "ck_user_color", 0);
      zStringID::Add(v3, 1667973986, "ck_key_cb", 0);
      zStringID::Add(v3, 1667974002, "ck_key_cr", 0);
      zStringID::Add(v3, 1667973486, "ck_key_angle", 0);
      zStringID::Add(v3, 1667976056, "ck_key_cutoff", 0);
      zStringID::Add(v3, 1667976303, "ck_luma_clip_lo", 0);
      zStringID::Add(v3, 1667975273, "ck_luma_clip_hi", 0);
      zStringID::Add(v3, 1667973740, "ck_black_clip", 0);
      zStringID::Add(v3, 1667974510, "ck_source_encoding", 0);
      zStringID::Add(v3, 1667974519, "ck_source_encoding_width", 0);
      zStringID::Add(v3, 1667974466, "ck_edge_blend_active", 0);
      zStringID::Add(v3, 1667978582, "ck_source_user_color_value", 0);
      zStringID::Add(v3, 1148600658, "device_aspect_ratio", 0);
      zStringID::Add(v3, 1666206822, "cached_play_flags", 0);
      zStringID::Add(v3, 1665225830, "cached_default_action_flags", 0);
      zStringID::Add(v3, 1667977811, "respect_actual_size", 0);
      zStringID::Add(v3, 1986618441, "video_initialized", 0);
      zStringID::Add(v3, 1382368876, "reflection", 0);
      zStringID::Add(v3, 1382368837, "reflection_enable", 0);
      zStringID::Add(v3, 1382368841, "reflection_interpolator", 0);
      zStringID::Add(v3, 1685277038, "drop_shadow_interpolator", 0);
      zStringID::Add(v3, 1685275982, "drop_shadow_enabled", 0);
      zStringID::Add(v3, 1685274951, "drop_shadow_angle", 0);
      zStringID::Add(v3, 1685275503, "drop_shadow_color", 0);
      zStringID::Add(v3, 1685278534, "drop_shadow_offset", 0);
      zStringID::Add(v3, 1685278544, "drop_shadow_opacity", 0);
      zStringID::Add(v3, 1685275219, "drop_shadow_blur_size", 0);
      zStringID::Add(v3, 1886681680, "ptz_preset", 0);
      zStringID::Add(v3, 1886681669, "ptz_preset_enabled", 0);
      zErrCodeManager::RegisterCodeRange((zErrCodeManager *)0xFFFFF830LL, -999, (unsigned __int64)"rosa errors", v4);
      return roRecycleManager::Default((roRecycleManager *)0xFFFFF830LL);
    }

    In addition to this, there was a bunch of other attributes scattered  throughout the application that are listed below for reference. Not all of these items are valid in XML, but they are associated with the same data structure within Wirecast.

    Some of the ones I am interested in are for example are end_scale and end_position. From what I am guessing, these might be not used in 10.x - but may be previous artefacts from when earlier versions of Wirecast allowed build in for shots... I am assuming these will be in use again in future versions.

    LIKE
    OAuthAccessToken
    SOURCE_SDK_ID_DOC
    access_token
    actualEndTime
    aspect_ratio_type
    asset_icon_scale
    asset_icon_updateFPS
    broadcast_id
    clicked_cell
    codec_quality
    color
    color1
    color_space_override
    custom_stream
    custom_width
    day
    delay
    destination_location_id
    destination_update_id
    down_color
    embeddable
    end_position
    end_scale
    error
    error_message
    error_response
    external_virtualSet_representing_image_path
    file
    fileTypeClass
    flow
    host
    http_status_code
    id
    input_channel_selection
    license
    machineId
    master_audio_monitor
    master_audio_mute
    media_asset_icon_scale
    monitor_selection
    month
    mouse_location
    name
    nominal_range_override
    oauth_access_token
    oauth_renew_token
    obj_buildin_options
    obj_buildin_pos
    obj_buildout_options
    obj_buildout_pos
    obj_still_pos
    obj_still_scale
    output_last_selected
    output_sdk_error
    planned_start_time
    preset
    preview_audio_monitor
    producer
    publicStatsViewable
    publishAt
    rect
    refresh_token
    response
    rtcSessionData
    scheduledEndTime
    scope
    selectedPrivacyIndex
    selected_layer
    selected_playlist_shot_asset
    sessionId
    settings
    shot_assetID
    shot_key
    square_pixel_height
    square_pixel_width
    streamType
    template_path
    text
    text_id
    thumbnail
    token_type
    unique_id
    up_color
    uri
    userId
    user_agent
    vam_state
    video_delay
    video_id
    video_url
    viewers
    web_url
    year
    Reply Like
  • Thanks Greg Kuhnert and CraigS

     

    Please allow me to present the PowerShell module and elaborate on the importance of moving our environment to Windows.

     

    The PowerShell (Core) module I wrote is designed for multi-tracking (requires 8 Pro). It only handles simple functions, like start/stop streaming, changing shots in layers, and a number of asset processing features including creating single-track masters, creating and tagging MP3s, uploading to Vimeo, getting active TCP connections from Wirecast, and more. Right now there is a problem with the MP3 creation that we're trying to iron out.

     

    Why I Need It To Work On Windows

    The module was working great but we've constantly worked against network-related issues in macOS for years. This module automates the cleanup I had to do manually but when the OS isn't working, the automation breaks.

    The latest update (automatically installed) for High Sierra causes the Thunderbolt Ethernet connection to not work at all. Connection attempts are made to a local server (for SMB transfers) but after a timeout, an error is thrown. Sometimes it works by IP (instead of DNS) but it crawls and eventually disconnects. Nothing has changed on this system and we haven't identified the fix. Connect that same ethernet cable to the Ethernet port, and all is well.

    Since day 1 with this iMac (late 2013), we've had numerous network-related issues, including stale shares which when automatically remounted, were named with "-1", so our automation scripts failed because they were looking for /Volumes/share when it was actually /Volumes/share-1. We're also experiencing where an old cached version of the PowerShell module is suddenly used during processing (though a fresh copy is imported during each execution). This requires a safe boot restart to clear the cache for most of our issues to go away - a huge hassle.

    After so many elementary features not working in macOS, I would prefer to port everything to Windows where these types of issues don't exist (renamed SMB mounts, cached module, and so on...).

    Using PowerShell is native and supports classes, or one can compile their own PowerShell cmdlets which is what I am trying to work on. Hence, I am stuck as per my initial post.

    I was planning to post the module on Github but there is more housekeeping to finish first. Once I get to that point, I can follow up with you if it can be of use.

    Reply Like
  • AH 

    I won't try to convince you - It seems like a lot of history there. As an exclusive mac user, I have none of the problems you listed. I am a network engineer by trade years ago... Perhaps there was something that could have changed before to fix your issues.

    Anyway - I'd love to see what you came up with...

    GK

    Reply Like
reply to topic
Like Follow
  • 1 mth agoLast active
  • 7Replies
  • 276Views
  • 4 Following