cd xbox-smartglass-sharp
dotnet build
Print usage
dotnet run -p SmartGlass.Cli -- --help
using SmartGlass;
IEnumerable<SmartGlass.Device> devices = await SmartGlass.Device.DiscoverAsync();
foreach (SmartGlass.Device device in devices)
{
Console.WriteLine($"{device.Name} ({device.HardwareId}) {device.Address}");
}
using SmartGlass;
string liveId = "FD0123456789";
SmartGlass.Device device = await SmartGlass.Device.PowerOnAsync(liveId);
Console.WriteLine($"{device.Name} ({device.HardwareId}) {device.Address}");
using SmartGlass;
SmartGlassClient client = null;
try
{
client = await SmartGlassClient.ConnectAsync("192.168.0.234");
}
catch (SmartGlassException e)
{
Console.WriteLine($"Failed to connect: {e.Message}");
}
catch (TimeoutException)
{
Console.WriteLine($"Timeout while connecting");
}
using SmartGlass;
using SmartGlass.Channels;
using SmartGlass.Channels.Broadcast;
using SmartGlass.Common;
using SmartGlass.Nano;
using SmartGlass.Nano.Packets;
SmartGlassClient client = /* Connect to console */;
// Get general gamestream configuration
GamestreamConfiguration config = GamestreamConfiguration.GetStandardConfig();
/* Modify standard config, if desired */
GamestreamSession session = await client.BroadcastChannel.StartGamestreamAsync(config);
Console.WriteLine(
$"Connecting to NANO // TCP: {session.TcpPort}, UDP: {session.UdpPort}");
NanoClient nano = new NanoClient(hostName, session);
// General Handshaking & Opening channels
await nano.InitializeProtocolAsync();
// Audio & Video client handshaking
// Sets desired AV formats
AudioFormat audioFormat = nano.AudioFormats[0];
VideoFormat videoFormat = nano.VideoFormats[0];
await nano.InitializeStreamAsync(audioFormat, videoFormat);
// Start ChatAudio channel
AudioFormat chatAudioFormat = new AudioFormat(1, 24000, AudioCodec.Opus);
await nano.OpenChatAudioChannelAsync(chatAudioFormat);
IConsumer consumer = /* initialize consumer */;
nano.AddConsumer(consumer);
// Start consumer, if necessary
consumer.Start();
// Tell console to start sending AV frames
await nano.StartStreamAsync();
// Start Controller input channel
await nano.OpenInputChannelAsync(1280, 720);
/* Run a mainloop, to gather controller input events or similar */
Solution: Before doing any network I/O with the library, set the BindAddress to the local IP address of the desired interface.
using System.Net;
using SmartGlass;
// Adjust 192.168.0.1 to your actual local IP address
GlobalConfiguration.BindAddress = IPAddress.Parse("192.168.0.1");
// Do stuff
Project originally developed by Joel Day
Special thanks to Team OpenXbox for their contribution of documentation, tools and samples for the SmartGlass protocol.