2013-04-17 19 views

risposta

8

Non esiste una roadmap pubblicata per l'API Mirror. Parte della motivazione per l'anteprima del nostro sviluppatore è di capirlo.

In primo luogo, solo per chiarire, lo streaming mostrato in quel video è un Hangout di Google+. Questa è una funzionalità integrata in Glass.

Aggiornamento: Glass ora supporta lo streaming video. Puoi trovare i documenti completi here.

Per aggiungere un flusso video fare un post multipart con l'URL del video come una delle parti, in questo modo:

POST /upload/mirror/v1/timeline HTTP/1.1 
Host: www.googleapis.com 
Authorization: Bearer {auth token} 
Content-Type: multipart/related; boundary="mymultipartboundary" 
Content-Length: {length} 

--mymultipartboundary 
Content-Type: application/json; charset=UTF-8 

{ "text": "Skateboarding kittens" } 
--mymultipartboundary 
Content-Type: video/vnd.google-glass.stream-url 

http://example.com/path/to/kittens.mp4 
--mymultipartboundary-- 
+1

Grande farà sul tracker di problemi. Penso che aggiungere la possibilità di spingere le carte durante un hangout di google sarebbe fantastico. – djscoutmaster

+0

Durante il tentativo di video utente/vnd.google-glass.stream-url il contenuto non viene mai riprodotto. Viene visualizzato il primo frame e l'animazione di caricamento viene eseguita per sempre. Qualche possibilità di vedere alcuni esempi di codice aggiunti ai documenti di questa implementazione? – PrplRugby

+0

@PrplRugby - Ho bisogno di ulteriori dettagli per aiutarti a risolvere i problemi. Ti dispiacerebbe creare una nuova domanda e includere il tuo codice e i payload JSON? – mimming

1

Youtube video streaming è possibile. L'ho fatto in C# .net usando lo spazio dei nomi "YoutubeExtractor". Risolvi l'url del video (.mp4) dal video di you tube e esegui il flusso. Ecco il codice. Ha funzionato bene per me. quando copi l'url ottieni il link you tube che è disponibile dopo aver cliccato share

private static String youtubevideoStream(MainController controller) 
    { 

     string link = "http://youtu.be/9uYKISlL7Vg"; 
     IEnumerable<VideoInfo> videoInfos = DownloadUrlResolver.GetDownloadUrls(link); 
     VideoInfo video = videoInfos.First(info => info.VideoType == VideoType.Mp4 && info.Resolution == 360); 
     String vLink = video.DownloadUrl; 


     TimelineItem videocard= new TimelineItem() 
     { 

      Text = "Menu Card", 
      BundleId = "666", 
      Notification = new NotificationConfig() { Level = "DEFAULT" }, 
      MenuItems = new List<MenuItem>() 
            { 
             new MenuItem() {Action = "DELETE"}, 
            } 

     }; 

     String mediaLink = vLink; 

     if (!String.IsNullOrEmpty(mediaLink)) 
     { 
      Stream stream = null; 
      if (mediaLink.StartsWith("/")) 
      { 
       stream = new StreamReader(controller.Server.MapPath(mediaLink)).BaseStream; 
      } 
      else 
      { 
       HttpWebRequest request = WebRequest.Create(mediaLink) as HttpWebRequest; 

       request.UseDefaultCredentials = false; 


       HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

       byte[] b = null; 
       using (Stream streamFromWeb = response.GetResponseStream()) 
       using (MemoryStream ms = new MemoryStream()) 
       { 
        int count = 0; 
        do 
        { 
         byte[] buf = new byte[1024]; 
         count = streamFromWeb.Read(buf, 0, 1024); 
         ms.Write(buf, 0, count); 
        } while (streamFromWeb.CanRead && count > 0); 
        b = ms.ToArray(); 

        stream = new MemoryStream(b); 
       } 
      } 
      controller.Service.Timeline.Insert(videocard, stream, "video/mp4").Upload(); 
     } 
     else 
     { 
      controller.Service.Timeline.Insert(videocard).Fetch(); 
     }