Changing Android's default MediaPlayer User-Agent string

前端 未结 2 997
小蘑菇
小蘑菇 2020-12-11 11:34

Is it possible to change Android\'s default MediaPlayer User-Agent string? If so, how?

相关标签:
2条回答
  • 2020-12-11 12:02

    You 'just' need to overwrite HTTPDataSource.cpp (see HTTPDataSource::read_at). And then inject it to the core of media player =) (not so easy thing i need to say) look at this research first - The flow of events during the Media Player Creation in Android Framework

    0 讨论(0)
  • 2020-12-11 12:07
        String referer="Referer: http://www.google.com/\r\n",
            useragent="USER-AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36\r\n";
        Map<String,String>mhead;
        VideoView vp;
        void prepareHeader(){
            mhead=new HashMap<String,String>();
            if(android.os.Build.VERSION.SDK_INT >20){
                //if 5.X or higher, Fix User-Agent be force set by system
                mhead.put(referer.split(": ")[0],referer.split(": ")[1]);
                mhead.put(useragent.split(": ")[0],useragent.split(": ")[1]);//"User-Agent" => "USER-AGENT"
            }else{
                //if 4.X or lower, Fix Referer cannot be set
                mhead.put(useragent.split(": ")[0],useragent.split(": ")[1]+referer);//"User-Agent: ... \r\nReferer: ..."
            }
            setVideoURI(Uri.parse(path),mhead);
        }
        void setVideoURI(Uri uri,Map<String,String>mHeaders){
            try{
                Class vpclass=Class.forName("android.widget.VideoView");
                Method[]ms=vpclass.getMethods();
                Method mTarget=null;
                for(Method m:ms){
                    if(m.getName().equals("setVideoURI"))
                        if(m.getParameterTypes().length==2) mTarget=m;
                }
                if(mTarget==null){
                    //AlertDialog(this,"Set Headers Fail","Sorry... your device is not support this way.","ok");
                }else{
                    mTarget.invoke(vp,new Object[]{uri,mHeaders});
                }
            }catch(Exception e){
                //AlertDialog(this,"Set Headers Fail",Arrays.toString(e.getStackTrace()),"ok");
            }
        }
    

    I've tested, it worked at:

    Yulong Coolpad 8722V Android 5.1

    Nox AVD Android 4.4

    Hopes work at your device!

    0 讨论(0)
提交回复
热议问题