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.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
var request;
var deviceinfo; // [WVGA: 1(wifi), 0], [QVGA, WQVGA: 3(wifi), 2], [QCIF: 5(wifi), 4]
var WiFiConnected;
var resolution;
function process()
{
// 1. get streaming ID
var streamingID = widget.youtube.getStreamingID();
// 2. make URL
var gDataURL = "http://gdata.youtube.com/feeds/api/videos/" + streamingID;
var serverPath = "/feeds/api/videos/" + streamingID;
// 3. youtube.getGData(serverPath)
//var XGDataHeader = widget.youtube.getGData( serverPath );
var GData = widget.youtube.getGData( serverPath );
deviceinfo = GData.charAt(0);
var XGDataHeader = GData.slice(1, GData.length);
// 4. request
openURL( gDataURL, XGDataHeader );
// 5. parsing and get url
// 6. youtube.startStreaming(url)
}
function openURL( url, XGDataHeader )
{
if (window.ActiveXObject) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e1) {
request = null;
}
}
} else if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
if ( !request )
return;
request.onreadystatechange = handleResponse;
request.open( "GET", url );
request.setRequestHeader( "X-GData-Device", XGDataHeader );
request.send( null );
}
function handleResponse()
{
if (request.readyState == 4)
{
if (request.status == 200)
{
var xdoc = request.responseXML;
var url;
var entry = xdoc.getElementsByTagName("entry");
var category = entry[0].getElementsByTagName("category");
var mediagroup = entry[0].getElementsByTagNameNS("*","group");
var mediacontent = mediagroup[0].getElementsByTagNameNS("*", "content");
var format;
var term;
var is_yt3d = 0;
var is_swap = 0;
var is_yt3d_left = 0;
var is_yt3d_right = 0;
var yt3d_left;
var yt3d_right;
var yt3d_params;
if ( deviceinfo == '1' )
{
format = '3'; // WVGA
}
else if ( deviceinfo == '3' )
{
format = '9'; // QVGA
}
else if ( deviceinfo == '5' )
{
format = '2'; // QCIF
}
else if ( deviceinfo == '0' || deviceinfo == '2' || deviceinfo == '4' )
{
format = '2'; // QCIF
}
else
{
format = '1'; // rtsp
}
for ( i = 0; i < category.length - 1; i++ )
{
term = category[i].getAttribute("term");
if ( term == "yt3d:enable=true" )
{
is_yt3d = 1;
}
else if ( term == "yt3d:swap=true" )
{
is_swap = 1;
}
else if ( term
.substr(0,10) == "yt3d:left=" ) {
is_yt3d_left = 1;
yt3d_left = term.substring(5);
}
else if ( term
.substr(0,11) == "yt3d:right=" ) {
is_yt3d_right = 1;
yt3d_right = term.substring(5);
}
}
for ( i = 0; i < mediacontent.length; i++ )
{
if ( mediacontent[i].getAttribute("yt:format") == format )
{
url = mediacontent[i].getAttribute("url");
if ( is_yt3d == 1 )
{
yt3d_param = "yt3d:";
if ( is_swap == 1 )
{
yt3d_param = yt3d_param + "swap;";
}
if ( is_yt3d_left == 1 )
{
yt3d_param = yt3d_param + yt3d_left + ";";
}
if ( is_yt3d_right == 1 )
{
yt3d_param = yt3d_param + yt3d_right + ";";
}
url = yt3d_param + url;
}
widget.youtube.startStreaming( url );
history.go(-1);
return;
}
}
// if url is not searched
for ( i = 0; i < mediacontent.length; i++ )
{
if ( mediacontent[i].getAttribute("yt:format") == '1' )
{
url = mediacontent[i].getAttribute("url");
widget.youtube.startStreaming( url );
history.go(-1);
return;
}
}
}
else
{
history.go(-1);
return;
}
}
}
</script>
</head>
<body onload="process();" >
<table align="center">
<tr height="50"><td align="center"></td></tr>
<tr height="60"><td align="center"><img src="./youtube.png" width="75" height="31"/></td></tr>
<tr height="60"><td align="center"><img src="./loading.gif" width="27" height="27"/></td></tr>
</table>
</body>
</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.
Ten post edytował bl00keRs 4.05.2011, 06:44:23