Enabling External Encoder in Microsoft Teams Live Events for Extreme Noobs

This is an exciting time with the Teams Collaboration market that got triggered by Slack and has caused giants like Microsoft and Cisco to build and introduce their own versions of Team Collaboration Solutions. Each one is trying to address this market with supposedly unique experiences. While I’m a big fan of Cisco Webex Teams for its completeness of vision, my favorite happens to be Microsoft Teams. The reason is its rebel stance it has taken against the Traditional Office Applications by not adhering to their Architecture. Instead this team (Microsoft Team’s dev team) has gone ahead with open source ecosystem to the extent possible and use the Traditional .Net/Visual C++ copy paste to a minimum. The Efficiency benefits shows up with the relatively tiny installation file in the 70-80 MB range that can be installed by the user without admin rights… this is Preposterous for any Traditional Microsoft developer! I love this open attitude and for a 1-year old software Microsoft Teams is loaded with features and keeps coming up with new features every month. I would advice you to check their twitter feed @MicrosoftTeams if you don’t believe me… In comparison, both Traditional Microsoft oldies and other competition are just too slow to come up with updating their capabilities… Unlike a traditional admin, I’m a person who like rapid change and this fluidity of Microsoft Teams is something I love!

Getting back to the topic, Microsoft recently announced the new feature called Live Events as part of their Meetings Capabilities. While the regular Meetings is for Many-To-Many Real-Time Multi-Media Collaboration……

Live Events is specifically geared for ‘Near Real-time’, ‘Some-to-Many’ Video Collaboration.

Bidirectional capabilities are restricted to text and not voice or video. On the flip side the capacity of the audience is greatly increased beyond the 250-participant limit of regular Meetings. Further capability to bring in External Encoders to make the event rich with Studio like capabilities completely blast all other competition out of the water!

If this was a audio/video blog you should be hearing a loud bomb sound now

So great features, but how do they actually perform. The Regular Live Events setup and run is pretty simple and well documented, you can check here (https://docs.microsoft.com/en-us/microsoftteams/teams-live-events/what-are-teams-live-events)for more details to get started quickly

Further links here will guide you through on how to enable live events for all or selective users. Everything can be achieved over GUI and boring and hence I’m not going to blog about here…

Now, when the time came to enable External Encoder in my lab account, I had some interesting nerdish adventure and I believe this would be of interest to someone who has just started administering Microsoft Teams and has not faced PowerShell before. If you are an IT Pro who manages Skype for Business Online on a regular basis then this article may be boring and you may want to stop reading….

For the rest of us, join me on a trip to Teams ‘PowerShell’ Wonderland

 

Getting Started

Typically, I wouldn’t have gone into this as I typically try out Office365 stuff from my desktop which is fully setup. This I tried on my new laptop with zero Office365 activity and that meant starting from scratch… Compared to the rest of Microsoft Teams administration, this one was old school and hence this blog

The first thing you need to have is a ‘Windows’ OS, preferably Windows 10 Creators Update or later… if you are something older, then you may have some other adventure in addition to what I experienced😉… Do let me know in the comments.

 

Install Skype Online PowerShell Modules

This usually is supposed to be a boring activity…Just head over to https://download.microsoft.com/download/2/0/5/2050B39B-4DA5-48E0-B768-583533B42C3B/SkypeOnlinePowerShell.Exe

Download and install….

Beyond the need for admin rights what could go wrong??? Wrong…

 

….the old world has to catch you by the throat and install its Goodies …

 

So, head back to https://aka.ms/vs/15/release/VC_redist.x64.exe

Download and install …with admin access of course…Now again try to install the PowerShell Modules

 

After this you need to ‘Restart’! Yippee!

Power of the Shell be with You

Now after Reboot and open the most favorite adventure app called Windows PowerShell… I like the ISE as it lets me interactively check documentation on modules and create scripts… You could have the same adventure as this blog with the regular PowerShell as well…

Now we need to import the modules we ‘Installed’… Other shells don’t have such needs! Why! The explanation is a bit lengthy …but google it and you should get a good answer

 

We Import the modules using the following command

>Import-Module SkypeOnlineConnector

 

This sadly results in an error!

The reason is that by default the execution policy is set to Restricted and hence Mighty Powerful magic like Import-Module is not allowed… So, we need to change to Signed…And not just Signed but to ‘RemoteSigned’ as our execution is going to happen remotely in Office365 Servers…

>Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

You should be presented with a confirmation if you have enough strength to wield such mighty powers and if you want to wield it always

I usually do ‘A’ but you would be safer with ‘Y’

 

Now let’s do the Import

>Import-Module SkypeOnlineConnector

We now get something going and a confirmation appears again if all the new magic skills are something you can handle?

I’m a pro so I say ‘A’ …again if you want to be careful, then choose ‘R’

 

Now we are all loaded up…Time to do some magic…

Let’s prepare to do some magic

First authenticate ourselves… Lets get our credentials into a variable called $userCredential

>$userCredential = Get-Credential

cmdlet Get-Credential at command pipeline position 1

Supply values for the following parameters:

 

Awesome… Now create a session to build a bridge to the Ether World

>$sfbSession = New-CsOnlineSession -Credential $userCredential

> Import-PSSession $sfbSession

If you see this…then it means that It is working!

 

ModuleType Version Name ExportedCommands

———- ——- —- —————-

Script 1.0 tmp_w5fa1s0p.qns {Clear-CsOnlineTelephoneNumberReservation, ConvertTo-JsonForPSWS, Copy-C…

 

Finally! let’s do the stuff we actually wanted to do

Check what is the Broadcast Policy set globally

>Get-CsTeamsMeetingBroadcastPolicy -identity Global

 

Darn it asked for credentials again!

 

But something went wrong….

Creating a new session for implicit remoting of “Get-CsTeamsMeetingBroadcastPolicy” command…

New-PSSession : [admin3a.online.lync.com] Connecting to remote server admin3a.online.lync.com failed with the following error

message : The WinRM client cannot process the request. The authentication mechanism requested by the client is not supported by the

server or unencrypted traffic is disabled in the service configuration. Verify the unencrypted traffic setting in the service

configuration or specify one of the authentication mechanisms supported by the server. To use Kerberos, specify the computer name

as the remote destination. Also verify that the client computer and the destination computer are joined to a domain. To use Basic,

specify the computer name as the remote destination, specify Basic authentication and provide user name and password. Possible

authentication mechanisms reported by server: For more information, see the about_Remote_Troubleshooting Help topic.

At C:\Users\<removed>\AppData\Local\Temp\tmp_w5fa1s0p.qns\tmp_w5fa1s0p.qns.psm1:136 char:17

+ & $script:NewPSSession `

+ ~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : OpenError: (System.Manageme….RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportExce

ption

+ FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed

Exception calling “GetSteppablePipeline” with “1” argument(s): “No session has been associated with this implicit remoting module.”

At C:\Users\<removed>\AppData\Local\Temp\tmp_w5fa1s0p.qns\tmp_w5fa1s0p.qns.psm1:10423 char:13

+ $steppablePipeline = $scriptCmd.GetSteppablePipeline($myI …

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException

+ FullyQualifiedErrorId : RuntimeException

Back to the Spell Book

A bit of googling later it turns out that Import-PSSession only imports the ingredients of our spell but the darn pentagram is stuck in the cloud! So, lets enter the cloud …

> Enter-PSSession $sfbSession

[admin3a.online.lync.com]: PS>

How do you know you are on the cloud…? You see the Command Prompt has changed! You may get a different server name…. but if you reached here…You are doing Good!

Now let’s check the global policy for TeamsMeetingBroadcast…

[admin3a.online.lync.com]: PS> Get-CsTeamsMeetingBroadcastPolicy -identity Global

Description :

AllowBroadcastScheduling : True

AllowBroadcastTranscription : False

BroadcastAttendeeVisibilityMode : EveryoneInCompany

BroadcastRecordingMode : AlwaysEnabled

Key :[{urn:schema:Microsoft.Rtc.Management.Policy.Teams.2017}TeamsMeetingBroadcastPolicy,Tenant{800fdedd-6533-43f5-9557-965b3eca76f6},Global]

ScopeClass : Global

Anchor : Microsoft.Rtc.Management.ScopeFramework.GlobalScopeAnchor

Identity : Global

TypedIdentity : Global

Element : <TeamsMeetingBroadcastPolicy xmlns=”urn:schema:Microsoft.Rtc.Management.Policy.Teams.2017″

AllowBroadcastScheduling=”true” AllowBroadcastTranscription=”false”

BroadcastAttendeeVisibilityMode=”EveryoneInCompany” BroadcastRecordingMode=”AlwaysEnabled” />

We need to specifically focus on the status of AllowBroadcastScheduling to be True… For me it is true and if you have already fiddled on the GUI Policies, then this must be true…else Please go back to the GUI Admin Centre and enable Meeting scheduling to True in the Global Policy

 

Are we there yet?

If you’ve come this far then now we are ready to do the magic we came all this way for

[admin3a.online.lync.com]: PS> Grant-CsTeamsMeetingBroadcastPolicy -Identity <type full user name here> -PolicyName $null -Verbose

 

Whoosh!

VERBOSE: Performing the operation “Grant-CsTeamsMeetingBroadcastPolicy” on target “<the username will appear here>”.

VERBOSE: Audit disabled on Cmdlet level

We finally did it!

 

How do I check?

Head back to the streams portal and click on Create drop down…the user for whom you did the magic should be able to see the ‘Live Event (preview)’

Now head back to Teams Client or Web Page and create a new Live Event Meeting and the user should be able to see the ‘External Encoder’ enabled…

Awesome! Thanks for being with me on this adventure! Now your user can configure External Encoder in their Live Events!

 

I wish the Microsoft Teams Dev Team put a little more effort and do away with this adventure and let the administrator enable/disable the External Encoder from the GUI itself… IMHO, PowerShell for this is overkill as only a few people will be given this magic gauntlet

What Next? I want more adventure…

Now may be a good time to check out Luca Vitali’s article on how to use OBS as a external encoder for your event at https://lucavitali.wordpress.com/2018/08/24/how-to-use-obs-studio-external-encoder-for-live-events/

For other more ‘Not Free’ solutions head on to https://docs.microsoft.com/en-us/stream/live-encoder-setup

All the Best!!

An Approach to Cognify Enterprise Applications

I recently witnessed the setup of my brand new Windows 10 Laptop and was surprised when Cortana guided the installation with voice recognition! This was happening before OS is there on the laptop! … I wouldn’t have imagined this 5 years ago and set off imagining how the experience would have been if the setup designer decided to completely remove any mouse/keyboard inputs. Further, what if Cortana had matured to converse with me naturally without any Pre-Coded questions being asked in sequence! Instead of saying yes or no I dabble about how good the laptop looks and Cortana responds with affirmation or otherwise but gently getting me to respond to the key questions needed to be answered before the full blown OS installation could start… It sounds cool but in future releases this may be the reality!

Back to the topic of Enterprise Applications, Conversational experiences are being continuously developed and improved upon with the bots learning how to converse from both pre-built flows and historical conversation logs. In the enterprise context it now becomes important that CIOs & CTOs start thinking about how their Business Applications can be used on these Conversational Platforms. Enterprise Leaders need to think carefully about how this gets architected and deployed so that it does not become something mechanical and irritating like traditional IVR Solutions. To Succeed in the endeavor we need to look not just at the New Cognitive Platform but also the Services expected to be enabled on the bot and keep the experience exciting so it does not meet the same fate as IVR in terms of experience.

I see the following SUPER aspects of the Solution to be first Scrutinised carefully before project initiation:

  • Service – Look at where the Service is currently performed and check for viability of being able to Integrate with the Cognitive Platform
  • User Experience – Look at how complex is the service to be executed over Automated Interfaces like Phone, Virtual Assistants and Chat UI
  • Peripherals – Look for the peripherals where the services have been provided currently and check if the same can be reused or replacement would be required. Oversight here could lead to Urgent and Expensive replacement later and decreased User Adoption.
  • Environment – Different Services are performed in different work conditions and careful consideration should be made so appropriate services are not provided in certain conditions. For example, speaking out Bank Balance on a Loud Personal Assistant as Speech could embarrass users and lead to privacy concerns of a different nature.
  • Reliability – Here the Cognitive Platform itself should be judged in terms of fragility not just in terms of uptime but in terms of handling edge cases. This is where the continuous unsupervised learning capability needs to be looked at very carefully and evaluated to ensure that the Platform builds up cognition over time.

Here is an approach of how Enterprise Leaders can start moving their workforce to embrace Cognitive Applications

Step 1) Service Audit – Perform an Audit of Services Being performed and the related applications.

Step 2) Cognitive Index Evaluation – User the SUPER aspects to Evaluate the Cognification of each service.

Step 3) Build Road Map – Categorise the Services in terms of ease of introduction and ease of development and batch them in phases.

Step 4) Identify Rollout Strategy – Based on complexity and number of possible solutions and channels under consideration, one or more POCs may need to be initiated followed by bigger rollouts. In case of multiplicity of Business Applications needing to be integrated, then Business Abstraction Layer Solutions could be brought in to significantly boost Integration time.

Step 5) Monitor and Manage –  While the Cognitive Solution brings reduction in service tickets to IT, injection of capabilities like ‘Undirected Engagement’ could lead to monitoring and management of conversations in terms of Ethics, Privacy and Corporate Diversity Policy.

What do you think?

PoPriCl –> My POrtable PRIvate CLoud

Wow …time is running fast! I can’t believe it’s been three months and no blogs in 2017! …Well the wait is over…

So, what am I up to recently… Well you must have read about my ‘Hobby
Stack
’ last year… Now this stack is great if I want to host a tiny Hobby app but becomes problematic for development as it is too reliant on Internet…
Hobby Stack unfortunately does not help me much when I’m in a 10-hour flight? I could run Docker in my laptop but what if I’m having a laptop where I don’t have admin rights and no Hyper-V/VirtualBox? To add to the problems, now Laptops are getting banned as carry-ons. That means, at best tablets and mobiles is all we will have from user side.

I may be taking up some long travel soon and the thought of building my Private Cloud ‘Server’ that I could easily carry in flight is what prompted me to build one and write this blog…

The Requirements

So here are what I would state as the ‘Requirements’ for PoPriCl…

  • The Box Needs to be ‘Portable’ meaning small enough to fit without any problem in a laptop bag and ready for check-in. Also, when in ‘working’ state it should be able to fit comfortably within the confined space of the worst economy seats in a plane.
  • Portable Power’ for >10 Hours -> I don’t think I can code for more than 10 hours on long haul flights…So this looks reasonable. Also, It is reasonable to look for external power but not all flights have USB/AC Ports available in all seats.
  • Portable Wireless Network -> Capability to host its own Wireless Network would eliminate the need for a wireless router and need for congesting Ethernet cables
  • Inexpensive -> The whole Hardware + Software should come in a budget of around ₹5000 … No Monthly recurring costs
  • Currency with my ‘Hobby Stack’ software features to the extent possible…
  • Hosted WebIDE so that I don’t need any Software…even Portable Software on my laptop… Only a bunch of Modern Browsers

That’s it…I don’t ask for too much, right!

The Hardware

The Board

There are many Options here but to satisfy the Portable Power criteria I needed kits that can be powered using Power Banks that supply power over USB. This is usually 5V/2A …That rules out the Intel Edison based x86 IOT Kits which need 12V supply…The rest are just too slow and specifically meant for Low Power IOT and not desktop grade…Outside the x86 world, comes the arm based kits and are powered by mini-USB. Of these I found the Raspberry Pi 3 Model B to be the best fit in my budget and still being desktop grade to handle at least 2-3 small containers easily. This comes with A 1.2GHz 64-bit quad-core ARMv8 CPU,802.11n Wireless LAN and Bluetooth 4.1 / Bluetooth Low Energy (BLE).

Storage

I got a simple 32GB micro SD Card for use as both the OS/Firmware and the Storage.

Power

For Portable power, I was not sure how much would be good enough so I got a 20AH Power Pack… As per my Test it easily lasts for more than 24 hours…. So, I guess I could have used a lower end Power Pack as well.

Total Hardware BoM

Item

Regular Market
Price

Comments

Raspberry Pi 3
Model B

₹2,890

With Case/SD-Card/Power Supply the kits may go to about ₹4,000

SD-Card

₹700+

Better Deals as time passes by. By the time you read this the rates may have gone
down further. Also Lower Capacity is also fine….

Portable Power

₹1500+

The Price Ranges from ₹1500 to ₹2500 …Also considering the
24Hour+ Capacity for 20AH, Lower capacity could be opted for as well

Total

₹5090+

Its slightly over 5K Budget but not too much so excused 😉

How do I make it work for me?

Now that I have the gear, let’s set it up for action…

The Boot Image Mystery

The most common boot image used in Raspberry is the Raspbian. It is small and efficient but I wanted more. I chose to go with Hypriot OS which is fundamentally a Raspbian modified to work well with the latest Docker, swarm and Kubernetes configurations. I found this appealing as I would like to move straight to Developing stuff that tinker with
the knobs in Docker/Kubernetes. I have tried other images but ultimately Hypriot wins.

I used etcher to burn the ISO downloaded from https://blog.hypriot.com/downloads/. Just remember that in the default image the username/password is pirate/hypriot (all small).

Plug the micro SD card into the slot in RasPi and power up the RasPi. Ensure you have a LAN connect, HDMI monitor and USB keyboard attached.

On Login used the pirate/Hypriot combination and login. Now we need to setup the wireless.

Wireless Setup

Power up your AP provider which in my case was my mobile phone with hotspot switched ‘on’.

Scan the local wlan networks using

iwlist wlan0 scan | grep SSID

Ensure that the AP is listed…if yes then ‘Great!’ , else find some other AP that is detectable by RasPi.

 Do not Proceed if your AP is not visible in the scan.

This method below for wlan may change in future versions…(Please keep track of the latest instructions in https://github.com/hypriot/flash#occidentalistxt) to enable Wireless Accesspoint

Open the Hypriot config file

Sudo nano /boot/occidentalis.txt

Change the hostname, wifi ssid and password(plaintext) as needed

# hostname for your Hypriot Raspberry Pi:
hostname= < Your new hostname>
# basic wireless networking options:
wifi_ssid= < correct SSID Name>
wifi_password= <correct password>

Save and exit

Now install adafruit-Occidentalis…

curl -SLs https://apt.adafruit.com/bootstrap | bash

Now try ip addr and you shoud have connected to the AP. If not try rebooting.

Once connected, you are ready with a letting go off, the hdmi screen, keyboard and LAN cable. Now onward you can connect to your RasPi over ssh or using WebIDE….

Congratulations, your device is now a Headless Device 😀

Portable DevOps

Install the excellent Adafruit WebIDE using instructions from https://learn.adafruit.com/webide/installation Or in short download using the
following command

curl https://raw.githubusercontent.com/adafruit/Adafruit-WebIDE/alpha/scripts/install.sh
 | sudo sh

Then access the WebIDE by opening the IP address of the RasPi from chrome on mobile.

[Updated 18th May2017]

Another good WebIDE is the Codiad….And the URL has a very detailed a nd self-explanatory install procedure…

https://www.techcoil.com/blog/how-i-setup-codiad-web-ide-on-my-raspberry-pi-3/

I find Codiad to be better than AdaFruit WebIDE… Check it out…

SSH client on mobile

WebIDE is fine but if you want a quick and dirty SSH connection, then try TerMux client or Terminal IDE on android. Its small and extremely fast.

I hope this helps in your long travels also to be more fun and productive…Bon Voyage!

The Theory on Productivity

Interesting Thoughts came across me in today’s morning walk. Early Morning Walk was recommended by my doctor to avoid regular muscle pulls that I’ve been experiencing for some time. I’ve been performing this Healthy routine for about a few months and have started liking it. The fresh morning air, the varied visuals of nature in different parts of my township and the many people I meet gives a nice crank to start of a productive day. But this is not the first time I’ve done this and till I visited the doctor I didn’t have any motivation to do this activity.

Today I thought about this and extrapolated to how work gets done in Enterprises and some very interesting thoughts came and I’m typing them out now…

I’ve been working on a lot of Unified Communications, Collaboration and Contact Center technologies for over a decade and even crossed the border into miscellaneous Mobility and EUC technologies. When I try to make sense of all these something fundamental seems to be missing. This something has been bothering me as to why all this plethora of technologies landed in the first place. A few interrupted days of introspection and lots of reading later now I can only think of one key word around which all these technologies revolve.

This in my Opinion is the crux of the topic of “Productivity”.

My key intention in the article is to go through what I’ve rounded up on as concepts that help define productivity into a finite and tangible aspect instead ambiguous marketing talk.

Going back to the Pleasant activity: The morning walk is still not performed by everyone. Even after eliminating people who cannot genuinely take a walk, we still have over 99% of people who do not take a walk. Why?

I’m no stranger here. Even I started only after doctor’s advice. But why did I not do this ‘before’ the Doctor’s advice? Personally I believed that if I got up early then I’ll be tired in Office. Secondly ……Aw…I hate to say this……………….I am Lazy……There I said it…Now lets get back to topic

In the Enterprise Setup the reason why employees are hired is to get work done. There is always some system using which the Enterprise works and the Employee becomes the cog in the entire setup. However this cog has the freedom to slow-down, clog up and just go out of sync. It is the Business’s fundamental task to ensure that the cogs perform as per the need but being humans there are always some difference in expected and actual output. This ratio between the actual and expected output is what according to the many Definitions what ‘Productivity’ should be.

I’m not comfortable with this definition, not because it is wrong, but because it does not help me with my flow 😉

So when I look at the ingredients of Productivity, I see three main Entities

  • Activity
  • Knowledge Content
  • Employee Intent

First let us look at ‘Activity

I’m using the word Activity but in your sphere of understanding it could mean Process or System as well based on your background. What I’m referring to is ultimately is the Work that the Employee is supposed to perform. Now how do we measure the activity? This is a question I’ve always pondered if there is one solution but I always land on the solutions…The Reason is a wide array or situations faced, activities performed and bundling of activities by different types of people.

If we try to understand the activities of each entity we see a level-of-control relationship that changes significantly between the entities. By control I do not mean the kind of control between boss and subordinate but rather the ability to change behavior in the lower layer by action on nearby entities. What we however see is the consistent increase in volume of information increasing with every step taken towards Tactical direction. However the Criticality of each information Increases as we go towards the Strategic Direction.

Now though I’ve not been able to find ways to measure activity based productivity, It has been a science that has been studied thoroughly in the past century … However I still believe that the ancient Brawn based understanding is breaking apart in the current Digital Information era.

Talking about ‘Information’ Lets get to the point of ‘Knowledge Content’ that IMO is in a way the ‘Raw Material’ of the Ancient Brawn Era. Knowledge Content has three dimensions:

  • Quantity: How much the person knows is probably the entry criteria for current generation job roles. There are many ways this can be measured, maintained or bleached…but that would call for another blog post.
  • Quality: The Information that the person has without contextual understanding and capability to extrapolate is not usable in most situations. For example a person could know how to how to delete a account in Exchange but the contextual knowledge of knowing that it should only be done with official checks and in certain circumstances with second opinion comes with Intelligence, Maturity and Experience.
  • Networking: It would be unwise to block Today’s individual’s Knowledge Content measurement based on how much that person got trained, learned and is able to apply directly. It now extends to the level of Network the person has to handle tricky situations and productivity goes beyond personal limits. This used to have a a bit less impact in the Pre-Digital Era due to the limits of Networking limited to Physical Access. But even in those days without Networking mankind would not have created the electronic, electrical and mechanical marvels we take for granted. The Current Generation of workforce however come with Network that is global in nature and IMO Interview questions should not be asking about what the person knows but rather whom they would approach to find the solution.

Talking of ‘Approach’ comes the last dimension of Employee Intent. Its simple fact that if the employee is not motivated enough then even if the Activity is highly structured and Employee is Loaded with Knowledge, the job will not get done…

In Summary I believe this formula would bring this all together

Productivity = (Activity * Content * Intent) / Investment

Sadly this is still Subjective and not Objective L…Will infuse Objectivity later…

What do you think? Next I’m thinking how this will impact IT….