Giter Club home page Giter Club logo

ncast's Introduction

NCast

NCast C# SSDP discovery and content casting. Currently supports renderers such as LG TV's and Google Chromecast.

public SSDPDiscovery Discovery = new SSDPDiscovery();
// Setup the event when a device is discovered
Discovery.DeviceDiscovered += OnDeviceDiscovered;
// Start discovering
Discovery.Start();
private void OnDeviceDiscovered(object sender, SSDPDiscoveredDeviceEventArgs args)
{
    // args.Response contains the device information
    var device = args.Response; // type is SSDPResponse
    
    if (device.DeviceType == DeviceType.Chromecast) {
        
        // Turn the generic SSDP device of known manufacturer into a Chromecast specific device
        var chromeCast = new ChromecastDevice(device);
        // Get the name and details from the Chromecast
        var info = await chromeCast.GetDetail();
    }
}

Creating a client

ChromecastClient = new ChromecastClient(item.Address, 8009);

Launching an application

// Create channels for communication

var connection = ChromecastClient.CreateChannel(DialConstants.DialConnectionUrn);
var heartbeat = ChromecastClient.CreateChannel(DialConstants.DialHeartbeatUrn);
var receiver = ChromecastClient.CreateChannel(DialConstants.DialReceiverUrn);

await ChromecastClient.Connect();
ChromecastClient.Listen();

connection.MessageReceived += OnData;
receiver.MessageReceived += OnData;
heartbeat.MessageReceived += OnData;

// Send the connect message
ChromecastClient.Write(MessageFactory.Connect());

// Launch the YouTube application
ChromecastClient.Write(MessageFactory.Launch("YouTube"));

// Start a 5 second heartbeat
ChromecastClient.StartHeartbeat();

alt tag

Uses the https://github.com/tmds/Tmds.MDns library under the LGPL license.

ncast's People

Contributors

jeremylcarter avatar mangotwo2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ncast's Issues

Make it compatible with universal app

Hi,

your project is very interesting, it's great if i can use this library also with universal app.
I have tried to compile but some classes are missing.

Can you do this?
Tnx in advance

Include Tmds.MDns as a package

Hi @JeremyChild , can you include Tmds.MDns a as a package? I will make a release of Tmds.MDns on the short term. If there are practical issues stopping you from using it as a package let me know and I will fix those in the upcoming release. Thanks, Tom

Help using the code

Sorry to write about that, but your code that play movie won't work (I'm a new c# developer), probably i miss something.

This are the steps that I try:

  1. Open a connection with chromecast a hit play (Null reference) at line 127
  2. Load Application backdrop and hit the button nothing happen.

Could you what are the steps to play a movie/photo to chrome cast.

Thx for your help

Socket error 10053: Software caused connection abort.

Hi,

First of all thanks for all of your work on this neat library!
I'm trying to load media on our styled media receiver application. We have the application already running under our OS X dist so I know the problem isn't with the Chromecast or the media receiver.

This is the code I use to connect to a Chromecast it's within a method with this signature:

void connect(string name, string url)

DeviceAggregate device;
lock (devicesLock)
    device = devices.Where(da => da.Device.Name == name && da.Device.BaseUrl == url).FirstOrDefault();

if (device != null)
{
    this.device = device;

    device.ConnectionChannel.MessageReceived += ConnectionChromecastDataReceived;
    device.HeartbeatChannel.MessageReceived += HeartbeatChromecastDataReceived;
    device.ReceiverChannel.MessageReceived += ReceiverChromecastDataReceived;
    device.MediaChannel.MessageReceived += MediaChromecastDataReceived;

    await device.Client.Write(MessageFactory.Launch("FFFAA501"));
}
else
    App.Logic.browser.ExecuteScriptAsync("chromecastConnected(false, { message: 'The device details were invalid.'});");

After the user has chosen the media he wants to play back, I used this code to try and load the track, this is a preview track from the Spotify preview server to check if it works.

var url = "https://p.scdn.co/mp3-preview/18d0a45538122fbe33f22604d0e5608789c10ae4";

var customData = new Dictionary<string, string>();
customData.Add("title:", "Test preview");
customData.Add("thumb", "https://i.scdn.co/image/c171113a197828a6ee8017d1ede2e78c9a7df654");

var req = new LoadRequest(lastStatus.SessionId, new Media(url, null), true, 0.0, customData);
var req_json = req.ToJson();

await device.Client.Write(MessageFactory.Load(lastStatus.TransportId, req_json));

When I execute the Client.Write() it throws a SocketException saying: An established connection was aborted by the software in your host machine.

The Microsoft docs on this error can be read here. They are saying that it's possibly a time-out of the connection. On discovery I call StartDevice() to get the device details. That should also have started the heartbeat, right?

I'm not sure what I'm doing wrong, I probably just forgot something or misinterpreted some of your examples.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.