Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Odtwarzanie filmów YouTube w smartphonie
Forum PHP.pl > Forum > Przedszkole
bl00keRs
Hej.

Zacznę tak... w php nie siedzę (jedynie co to HTML i CSS ogarniam troszeczkę) i na ten jeden raz nie ma sensu uczyć się php (tak mi się wydaje, że to jest php) i mam pewien nietypowy problem, który chciałbym abyście pomogli mi go rozwiązać.

No to zaczynamy... jest pewien smartphone a w nim a dokładniej w jego menu jest klient/aplikacja YouTube, która poprzez kliknięcie otwiera mobilną wersję serwisu YouTube tj. m.youtube.com
Na Wi-Fi wszystko ładnie pięknie, jak jest film w HD (720p) to odtwarza go bez problemu i wszystko ładnie widać, jak jest 480 to również go odtwarza w tej rozdzielczości zaś na 3G to jest dosłownie katorga... filmy otwierają się w rozdzielczości 240 na której za cholerę nic nie widać i opcji zmiany jej nie ma a to jest sama pixeloza, nic nie widać a 3G jest wszędzie przecież i zawsze zaś Wi-Fi nie....
Sprawdzałem filmy na dailymotion i czy łączę się przez Wi-Fi czy 3G - jakość filmu jest taka sama, więc wina leży tutaj raczej po stronie tego klienta youtube.

Chciałbym w takim razie zapytać się czy mógłby ktoś zerknąć na poniższy kod, który wyciągnąłem z partycji systemowej w smartphonie, który odpowiedzialny jest za tego klienta i ewentualnie powiedzieć czy da radę to jakoś edytować tak, aby filmy na 3G były w takiej samej jakości co po Wi-Fi albo chociaż takiej w której by cokolwiek było widać a nie same pixele.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <script type="text/javascript">
  5.  
  6. var request;
  7. var deviceinfo; // [WVGA: 1(wifi), 0], [QVGA, WQVGA: 3(wifi), 2], [QCIF: 5(wifi), 4]
  8. var WiFiConnected;
  9. var resolution;
  10.  
  11.  
  12. function process()
  13. {
  14. // 1. get streaming ID
  15. var streamingID = widget.youtube.getStreamingID();
  16.  
  17. // 2. make URL
  18. var gDataURL = "http://gdata.youtube.com/feeds/api/videos/" + streamingID;
  19. var serverPath = "/feeds/api/videos/" + streamingID;
  20.  
  21. // 3. youtube.getGData(serverPath)
  22. //var XGDataHeader = widget.youtube.getGData( serverPath );
  23. var GData = widget.youtube.getGData( serverPath );
  24. deviceinfo = GData.charAt(0);
  25. var XGDataHeader = GData.slice(1, GData.length);
  26.  
  27. // 4. request
  28. openURL( gDataURL, XGDataHeader );
  29.  
  30. // 5. parsing and get url
  31.  
  32. // 6. youtube.startStreaming(url)
  33. }
  34.  
  35. function openURL( url, XGDataHeader )
  36. {
  37. if (window.ActiveXObject) {
  38. try {
  39. request = new ActiveXObject("Msxml2.XMLHTTP");
  40. } catch(e) {
  41. try {
  42. request = new ActiveXObject("Microsoft.XMLHTTP");
  43. } catch(e1) {
  44. request = null;
  45. }
  46. }
  47. } else if (window.XMLHttpRequest) {
  48. request = new XMLHttpRequest();
  49. }
  50.  
  51. if ( !request )
  52. return;
  53.  
  54. request.onreadystatechange = handleResponse;
  55. request.open( "GET", url );
  56. request.setRequestHeader( "X-GData-Device", XGDataHeader );
  57. request.send( null );
  58. }
  59.  
  60. function handleResponse()
  61. {
  62. if (request.readyState == 4)
  63. {
  64. if (request.status == 200)
  65. {
  66. var xdoc = request.responseXML;
  67. var url;
  68. var entry = xdoc.getElementsByTagName("entry");
  69. var category = entry[0].getElementsByTagName("category");
  70. var mediagroup = entry[0].getElementsByTagNameNS("*","group");
  71. var mediacontent = mediagroup[0].getElementsByTagNameNS("*", "content");
  72. var format;
  73. var term;
  74. var is_yt3d = 0;
  75. var is_swap = 0;
  76. var is_yt3d_left = 0;
  77. var is_yt3d_right = 0;
  78. var yt3d_left;
  79. var yt3d_right;
  80. var yt3d_params;
  81.  
  82. if ( deviceinfo == '1' )
  83. {
  84. format = '3'; // WVGA
  85. }
  86. else if ( deviceinfo == '3' )
  87. {
  88. format = '9'; // QVGA
  89. }
  90. else if ( deviceinfo == '5' )
  91. {
  92. format = '2'; // QCIF
  93. }
  94. else if ( deviceinfo == '0' || deviceinfo == '2' || deviceinfo == '4' )
  95. {
  96. format = '2'; // QCIF
  97. }
  98. else
  99. {
  100. format = '1'; // rtsp
  101. }
  102.  
  103. for ( i = 0; i < category.length - 1; i++ )
  104. {
  105. term = category[i].getAttribute("term");
  106.  
  107. if ( term == "yt3d:enable=true" )
  108. {
  109. is_yt3d = 1;
  110. }
  111. else if ( term == "yt3d:swap=true" )
  112. {
  113. is_swap = 1;
  114. }
  115. else if ( term.substr(0,10) == "yt3d:left=" )
  116. {
  117. is_yt3d_left = 1;
  118. yt3d_left = term.substring(5);
  119. }
  120. else if ( term.substr(0,11) == "yt3d:right=" )
  121. {
  122. is_yt3d_right = 1;
  123. yt3d_right = term.substring(5);
  124. }
  125. }
  126.  
  127. for ( i = 0; i < mediacontent.length; i++ )
  128. {
  129. if ( mediacontent[i].getAttribute("yt:format") == format )
  130. {
  131. url = mediacontent[i].getAttribute("url");
  132. if ( is_yt3d == 1 )
  133. {
  134. yt3d_param = "yt3d:";
  135. if ( is_swap == 1 )
  136. {
  137. yt3d_param = yt3d_param + "swap;";
  138. }
  139. if ( is_yt3d_left == 1 )
  140. {
  141. yt3d_param = yt3d_param + yt3d_left + ";";
  142. }
  143. if ( is_yt3d_right == 1 )
  144. {
  145. yt3d_param = yt3d_param + yt3d_right + ";";
  146. }
  147. url = yt3d_param + url;
  148. }
  149. widget.youtube.startStreaming( url );
  150. history.go(-1);
  151. return;
  152. }
  153. }
  154.  
  155. // if url is not searched
  156. for ( i = 0; i < mediacontent.length; i++ )
  157. {
  158. if ( mediacontent[i].getAttribute("yt:format") == '1' )
  159. {
  160. url = mediacontent[i].getAttribute("url");
  161. widget.youtube.startStreaming( url );
  162. history.go(-1);
  163. return;
  164. }
  165. }
  166. }
  167. else
  168. {
  169. history.go(-1);
  170. return;
  171. }
  172. }
  173. }
  174.  
  175. </script>
  176. </head>
  177. <body onload="process();" >
  178. <table align="center">
  179. <tr height="50"><td align="center"></td></tr>
  180. <tr height="60"><td align="center"><img src="./youtube.png" width="75" height="31"/></td></tr>
  181. <tr height="60"><td align="center"><img src="./loading.gif" width="27" height="27"/></td></tr>
  182. </table>
  183. </body>
  184. </html>


Znacie się tutaj na rzeczy, więc będziecie wiedzieli najlepiej czy idzie tutaj coś ogarnąć w tej sprawie i ewentualnie prosiłbym o podmiankę kodu w celu ułatwienia życia jeżeli da radę.

Pozdrawiam.
sadistic_son
To nie jest php tylko javascript. Zmień tag w temacie. No i muszę Cię raczej rozczarować. Nie sądzę żeby znalazł się tutaj jakiś dobroczyńca co czeka aby za kogoś odwalić całą robotę. To forum dla programujących/uczących się. Jeśli już to szukaj pomocy w dziale Gotowe Rozwiązania.
bl00keRs
Okej, a mógłby chociaż zerknąć czy takie coś jest realne do wykonania?
Oczywiście klient po podmienieniu kodu musi chodzić a z pewnością jak zbyt dużo się pozmienia i nie to co trzeba to chodzić nie będzie.

Mógłby ktoś przenieść ten temat do działu "Gotowe rozwiązania" w takim razie?
sadistic_son
Z javascripta to ze mnie miernota ale z tego co rozumiem to trzeba by bylo pokombinowac ze zmienną deviceinfo z linijki 7. Popróbuj przypisywać jej kolejne wartości od 0 do 5 (zamiast linijki 24 to -> deviceinfo=0; itd.) sprawdzając i wifi i 3g. Przy którejś z cyfr nie powinno być różnicy między wifi a 3g.
bl00keRs
Hehehe próbowałem już tego ale sprawdzę jeszcze raz dzisiaj bo może coś przeoczyłem smile.gif

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.