如何讓android4.0可以通過代理看流媒體

來源:互聯網
上載者:User

         在android3.x時代,標題所說的問題是不存在的。但是到了4.0,不知道為什麼android所有的arm版本系統都會預設走V8引擎使用chrome瀏覽器。這時候在測試cts時就發現如果使用代理上網(因為cts中的測項經常需要訪問例如youtube這樣的外網,需要翻牆才能瀏覽)是無法播放youtube視頻的,除開某些視頻是因為格式的問題確實無法播放之外,android4.0自身設計的缺陷佔了很大的原因。因為4.0在建立代理服務的時候使用了非代理解析器的建立方法,使得media在播放的時候根本無法通過代理
網路。當然這部能說人家google的人設計的不行,畢竟在天朝以外的大部分地區是沒有翻牆這一說的,如果讓人家google工程師在設計時考慮的天朝的種種特殊情況,那真是難人所難了。

        沒辦法,為了產品可以通過cts只能自己來改代碼了。首先是在frameworks/base/media/libstagefright/chromium_http/support.cpp   SfRequestContext()下添加:

   property_get("net.proxy.hostname", proxy_name, "");
   std::string host_name = proxy_name;
   if(host_name.length() > 0){
    set_proxy_service(net::ProxyService::CreateFixed(host_name));
   }
   else{
    set_proxy_service(net::ProxyService::CreateWithoutProxyResolver(
        new net::ProxyConfigServiceAndroid, net_log()));
   }

再在packages/apps/Settings/src/com/android/settings/wifi/wificonfigcontroller.java 416行添加 SystemProperties.set("net.proxy.hostname", host);

這樣還差一點,由於每次重新啟動機器的時候android會在wifiservice裡自動判斷重啟前網路連接的狀態,並重連。也就是說這時候是不走settings的,而media重啟後開啟網頁是重新建立proxy_service的,那麼這個時候又會使用CreateWithoutProxyResolver的方法了,而在cts中機器重啟那是經常的事情。所以需要在WIFI的狀態機器裡面再做一點修改:

就是在串連成功後再發一次net.proxy.hostname的環境變數,至於在什麼地方發這個訊息我個人認為只要在狀態機器狀態進入connectsuccess之後到media set_proxy_service之前這段時間內發都可以。

       

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.