[gnome-network-displays/cc-tmp: 18/80] cc: second connect request for media LOAD




commit 9c46ce31530ac90ec28a0239fab71e1b8cf3c1ec
Author: Anupam Kumar <kyteinsky gmail com>
Date:   Fri Jul 29 09:55:44 2022 +0530

    cc: second connect request for media LOAD
    
    finally casting videos works!!

 src/cc/cc-comm.c | 34 ++++++++++++++++++++++------------
 src/nd-cc-sink.c |  4 +++-
 2 files changed, 25 insertions(+), 13 deletions(-)
---
diff --git a/src/cc/cc-comm.c b/src/cc/cc-comm.c
index 426a16f..03d45bd 100644
--- a/src/cc/cc-comm.c
+++ b/src/cc/cc-comm.c
@@ -26,17 +26,15 @@ static void cc_comm_listen (CcComm *comm);
 static void cc_comm_read (CcComm *comm, gsize io_bytes, gboolean read_header);
 
 
-static void
-cc_comm_load_media (CcComm *comm)
+static gboolean
+cc_comm_load_media_cb (CcComm *comm)
 {
-  gboolean send_ok = cc_comm_send_request (comm, MESSAGE_TYPE_MEDIA, "{ \"type\": \"LOAD\", \"media\": { 
\"contentId\": 
\"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4\";, 
\"streamType\": \"BUFFERED\", \"contentType\": \"video/mp4\" }, \"requestId\": 4 }", NULL);
-
-  if (!send_ok)
+  if (!cc_comm_send_request (comm, MESSAGE_TYPE_MEDIA, "{ \"type\": \"LOAD\", \"media\": { \"contentId\": 
\"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4\";, 
\"streamType\": \"BUFFERED\", \"contentType\": \"video/mp4\" }, \"requestId\": 4 }", NULL))
   {
     g_warning ("NdCCSink: something went wrong with load media");
   }
 
-  g_clear_pointer (&comm->destination_id, g_free);
+  return FALSE;
 }
 
 static void
@@ -111,8 +109,19 @@ cc_comm_parse_json_data (CcComm *comm, char *payload)
               json_reader_read_member (reader, "transportId");
               const char *transport_id = json_reader_get_string_value (reader);
               g_debug ("CcComm: Transport Id: %s!", transport_id);
+
+              // start a new virtual connection
               comm->destination_id = g_strdup (transport_id);
-              cc_comm_load_media (comm);
+              // g_clear_pointer (&comm->sender_id, g_free);
+              // comm->sender_id = g_strdup ("sender-gnd");
+              g_debug ("CcComm: Sending second connect request");
+              if (!cc_comm_send_request(comm, MESSAGE_TYPE_CONNECT, NULL, NULL))
+              {
+                g_warning ("CcComm: Something went wrong with VC request for media");
+                return TRUE;
+              }
+              // call the LOAD media request after 4 seconds
+              g_timeout_add_seconds (4, G_SOURCE_FUNC (cc_comm_load_media_cb), comm);
             }
           json_reader_end_member (reader);
         json_reader_end_element (reader);
@@ -499,7 +508,7 @@ cc_comm_send_request (CcComm * comm, enum MessageType message_type, char *utf8_p
     binary_payload.len = 0;
 
     message = cc_comm_build_message(
-      "sender-0",
+      comm->sender_id,
       "urn:x-cast:com.google.cast.tp.deviceauth",
       CASTCHANNEL__CAST_MESSAGE__PAYLOAD_TYPE__BINARY,
       &binary_payload,
@@ -508,17 +517,18 @@ cc_comm_send_request (CcComm * comm, enum MessageType message_type, char *utf8_p
 
   case MESSAGE_TYPE_CONNECT:
     message = cc_comm_build_message(
-      "sender-0",
+      comm->sender_id,
       "urn:x-cast:com.google.cast.tp.connection",
       CASTCHANNEL__CAST_MESSAGE__PAYLOAD_TYPE__STRING,
       NULL,
-      "{ \"type\": \"CONNECT\" }");
-      // "{ \"type\": \"CONNECT\", \"userAgent\": \"GND/0.90.5  (X11; Linux x86_64)\", \"connType\": 0, 
\"origin\": {}, \"senderInfo\": { \"sdkType\": 2, \"version\": \"X11; Linux x86_64\", \"browserVersion\": 
\"X11; Linux x86_64\", \"platform\": 6, \"connectionType\": 1 } }");
+      // "{ \"type\": \"CONNECT\" }");
+      "{ \"type\": \"CONNECT\", \"userAgent\": \"GND/0.90.5  (X11; Linux x86_64)\", \"connType\": 0, 
\"origin\": {}, \"senderInfo\": { \"sdkType\": 2, \"version\": \"X11; Linux x86_64\", \"browserVersion\": 
\"X11; Linux x86_64\", \"platform\": 6, \"connectionType\": 1 } }");
+      message.destination_id = comm->destination_id;
     break;
 
   case MESSAGE_TYPE_DISCONNECT:
     message = cc_comm_build_message(
-      "sender-0",
+      comm->sender_id,
       "urn:x-cast:com.google.cast.tp.connection",
       CASTCHANNEL__CAST_MESSAGE__PAYLOAD_TYPE__STRING,
       NULL,
diff --git a/src/nd-cc-sink.c b/src/nd-cc-sink.c
index cce8dc2..2021b2c 100644
--- a/src/nd-cc-sink.c
+++ b/src/nd-cc-sink.c
@@ -361,6 +361,9 @@ nd_cc_sink_sink_start_stream (NdSink *sink)
 
   g_debug ("NdCCSink: Attempting connection to Chromecast: %s", self->remote_name);
 
+  self->comm.sender_id = g_strdup ("sender-gnd");
+  self->comm.destination_id = g_strdup ("receiver-0");
+
   // open a TLS connection to the CC device
   if (!cc_comm_make_connection(&self->comm, self->remote_address, &error))
     {
@@ -396,7 +399,6 @@ nd_cc_sink_sink_start_stream (NdSink *sink)
   // strncat (self->comm.sender_id, six_digits, 6);
 
   // set sender_id after connection (sender-xxxxxx)
-  self->comm.sender_id = "sender-0";
 
   // send pings to device every 5 seconds
   self->ping_timeout_handle = g_timeout_add_seconds(5, G_SOURCE_FUNC (cc_comm_send_ping), &self->comm);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]