WM Encoder Snippet
Last changed: -213.199.128.155

.
  // This F# sample is coded after reading a VB sample from code project.
  // See http://www.codeproject.com/vb/net/CaptureScreenAsVideo.asp


  #r "obj/Debug/Interop.WMDEVICECONTROLLib.dll";;
  #r "obj/Debug/Interop.WMEncAgentLocatorLib.dll";;
  #r "obj/Debug/Interop.WMEncAgtLib.dll";;
  #r "obj/Debug/Interop.WMEncoderLib.dll";;
  #r "obj/Debug/Interop.WMPREVIEWLib.dll";;


  open System.Collections
  open System.Collections.Generic


  open WMEncoderLib
  let encoder = new WMEncoderClass() :> WMEncoder


  let srcs = encoder.SourceGroupCollection
  let sg1  = srcs.Add("SG_1")


  let srcAud = sg1.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO) :?> IWMEncAudioSource
  let srcVid = sg1.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO) :?> IWMEncVideoSource2


  do srcVid.SetInput("ScreenCap://ScreenCapture1"   ,null,null) 
  do srcAud.SetInput("Device://Default_Audio_Device",null,null)


  let proCollIE = encoder.ProfileCollection :> IEnumerable 
  let proColl   : IEnumerable<IWMEncProfile> = IEnumerable.untyped_to_typed proCollIE
  do  proColl |> IEnumerable.iter (fun pro -> printf "%s\n" pro.Name)


  let proNameA = "Windows Media Video 8 for Local Area Network (384 Kbps)"
  let profileA = proColl |> IEnumerable.find (fun p -> p.Name = proNameA) 
  do  sg1.Profile <- profileA


  let descr = encoder.DisplayInfo
  do  descr.Author      <- "Author by F#"
  do  descr.Copyright   <- "Copyright XYZ"
  do  descr.Description <- "Capture"
  do  descr.Rating      <- "Rating information"
  do  descr.Title       <- "Title of encoded content"


  do  encoder.Attributes.Add("URL","IP address")


  do srcVid.CroppingBottomMargin <- 2
  do srcVid.CroppingTopMargin    <- 2
  do srcVid.CroppingLeftMargin   <- 2
  do srcVid.CroppingRightMargin  <- 2


  do encoder.File.LocalFileName <- @"C:\Temp\TestFile.avi"


  do encoder.Start()
  do encoder.Stop()