Chainfire Turns Your Bootanimation into a Logging Center

Having a nice boot animation certainly adds a little bit of aesthetic polish to your … more

Android TV Launcher Pushed to Google Play

Over the past decade, the tech universe has seen two drastic and widely contrasting changes with … more

Cyngn, OnePlus, Micromax – The Legal Battle

Recently, a battle has been waging in India over the rights to distribute the commercial … more

Lean Mean Battery Power Saving App Review

We talk a lot about battery topics here at XDA TV. We talk about everything from Power Banks to USB … more

Welcome to XDA

Search to go directly to your device's forum

Register an account

Unlock full posting privileges

Ask a question

No registration required
Post Reply

Hulu+ is now supported on Prime

OP NastroGlide

21st April 2012, 03:57 PM   |  #21  
Junior Member
Thanks Meter: 1
 
18 posts
Join Date:Joined: Feb 2011
Can anyone confirm to have used the hdmi out while using the hulu+ app. Read somewhere hulu blocked the feature.

Sent from my Transformer Prime TF201 using XDA Premium HD app
22nd April 2012, 06:42 AM   |  #22  
Junior Member
Thanks Meter: 0
 
7 posts
Join Date:Joined: Apr 2012
Sweet I can cancel my cable now. Thanks for the update!
6th May 2012, 04:56 AM   |  #23  
Senior Member
Flag Sioux Falls, SD
Thanks Meter: 7
 
182 posts
Join Date:Joined: Sep 2010
More
Quote:
Originally Posted by chefdave12118

I can get in to hulu just fine but when i press play i get this message.



Sent from my Transformer Prime TF201 using XDA Premium HD app

So did anyone get anywhere with this?
14th May 2012, 09:15 PM   |  #24  
Senior Member
Flag Rosedale, MD
Thanks Meter: 328
 
239 posts
Join Date:Joined: Oct 2010
Donate to Me
More
wondering...
wondering...o figure out exactly how the app checks for device compatibility. I tried setting everything in build.prop that's related to device info back to stock values and the app still seems to know that i'm not stock/locked bootloader... I might decompile it later and take a look at the smalis to see if can figure something out. Any help would be appreciated as I haven't done this too many times (last time was for netflix). But I'm sure it should be possible to disable the device check and make it work for everyone else...

For anyone else thinking about the old method of backing it up in a "approved" device with TiBu and restoring it on their prime, it won't work with a phone since phone version = 1.x and tablet version = 2.x. Also I suspect it won't work period because the check seems to take place when the stream is being loaded as opposed to being at app launch like it used to be.

I might also try flashing the stock kernel as I think the only string that I have different from stock (that i can imagine an app has access to) is the kernel's ID string. (using motley right now).

Anyways... Overall I don't think it should be too hard, especially for anyone experienced (not me) but I'll give it a go.
15th May 2012, 01:00 AM   |  #25  
Senior Member
Flag Rosedale, MD
Thanks Meter: 328
 
239 posts
Join Date:Joined: Oct 2010
Donate to Me
More
first steps
Decompiled the apk, and after grepping the error we get "Streaming unavailable" found that it only happens in the file where strings are defined "strings.xml"

4 strings with that text are defined:

user_message_process_drm_error_title
user_message_process_drm_error_message
user_message_drm_error_title
user_message_drm_error_message

what they all have in common is "drm_error" so after grepping that I found two files with possible relevant info,

public.xml:
Code:
    <public type="string" name="user_message_process_drm_error_title" id="0x7f0b00bc" />
    <public type="string" name="user_message_process_drm_error_message" id="0x7f0b00bd" />
    <public type="string" name="user_message_drm_error_title" id="0x7f0b00c0" />
    <public type="string" name="user_message_drm_error_message" id="0x7f0b00c1" />
as.smali > http: / / pastebin.com / F4rAkdkD
Important:
Code:
invoke-direct {v0, v1, v2}, Lcom/hulu/plusx/playback/as;-><init>(Ljava/lang/String;I)V

    sput-object v0, Lcom/hulu/plusx/playback/as;->l:Lcom/hulu/plusx/playback/as;

    new-instance v0, Lcom/hulu/plusx/playback/as;

    const-string v1, "DRM_ERROR"

    const/16 v2, 0xc
AND
Code:
sget-object v2, Lcom/hulu/plusx/playback/as;->l:Lcom/hulu/plusx/playback/as;

    aput-object v2, v0, v1

    const/16 v1, 0xc
Here in this case, the first section is part of a constructor and the second part of an array. My guess is that the constructor gathers all kinds of info about the stream and then that information is passed to the array. One possibility here would be to trick the array into thinking there's no DRM error. I think the whole thing would have to do with figuring out what i have in bold in the code "l" and "0xc" as I think one is a variable and the other one controls the value.
15th May 2012, 02:06 AM   |  #26  
Senior Member
Flag Rosedale, MD
Thanks Meter: 328
 
239 posts
Join Date:Joined: Oct 2010
Donate to Me
More
better steps
All right, grepping at the message ids in the public.xml (look at previous post), I was able to find one place where all the checks happen before streaming.

smali\com\hulu\thornx\app\c.smali

Now, I'll try to explain my logic as best I can... feel free to follow the code here:
http: / / pastebin.com / FBrsje1j

grepping each message ID results in this:
Code:
:cond_1a
    new-instance v0, Lcom/hulu/thornx/app/g;

    const v1, 0x7f0b00bc

    const v2, 0x7f0b00bd

    invoke-direct {v0, v1, v2}, Lcom/hulu/thornx/app/g;-><init>(II)V

    goto/16 :goto_1

    :cond_1b
    new-instance v0, Lcom/hulu/thornx/app/g;

    const v1, 0x7f0b00c0

    const v2, 0x7f0b00c1

    invoke-direct {v0, v1, v2}, Lcom/hulu/thornx/app/g;-><init>(II)V

    goto/16 :goto_1
Essentially, it seems to say:
Condition 1A:
Create a new instance of something v0 (I think it's a message dialogue)
Give the variable v1 the value of 0x7f0b00bc
(which is user_message_process_drm_error_title
= "Streaming Unavailable
")

Give the variable v2 the value of 0x7f0b00bd
(which is user_message_process_drm_error_message = "Sorry, we are unable to stream this video. Please check your Internet connection, ensure you have the latest official update for your device, and try again.
")

Invoke v0 (dialogue) with v1 (title) and v2 (message)
Code:
Condition 1B: 
Create a new instance of something v0 (I think it's a message dialogue)
Give the variable v1 the value of 0x7f0b00c0
(which is user_message_drm_error_title = "DRM Error")
Give the variable v2 the value of 0x7f0b00c1
(which is user_message_drm_error_message = "Sorry, we are unable to play this video at the moment. Please check that you have all the latest updates applied to your device and try again.")
Invoke v0 (dialogue) with v1 (title) and v2 (message)
So, essentially Condition 1A and 1B seem to be errors resulting from a failed DRM check. In fact, all conditions 1X seem to be errors that cause the playback to hang:

1C:
Title: user_message_whoops = Whoops!
Message: user_message_unknown_user_error_message_d = Something funny happened.

1D:
Title: user_message_bad_response_title = Bad Response From Server
Message: user_message_bad_response_message_s = We're sorry, but we couldn't parse the response from the server.

1E:
Title: user_message_unknown_error_title = Unknown Error
Message: user_message_unknown_error_message_s_s = %1$s%2$s

Interesting thing to note is that every 1X condition ends with :goto_1 (which to me means that ":goto_1" = bad and possibly ":goto_0" = good)

Searching the file for :cond_1a :cond_1b :cond_1c :cond_1d :cond_1e we can see what calls them:
1D calls 1E; 1C calls 1D; cond_18 calls 1C; and cond_19 calls both 1A and 1B.

Aside from calling cond_1C, cond_18 can also call cond_19 or give out an error with:
Title: user_message_widevine_not_supported_title = Required DRM not supported
Message: user_message_widevine_not_supported_message = Your device does not seem to have support for the required DRM engine. Please check that you have all the latest updates applied to your device and try again.

now, cond_18 is called by cond_17, which can also give the error:
Title: user_message_streaming_error_title = Streaming Unavailable
Message: Sorry, we are unable to stream this video. Please check your Internet connection and try again.

cond_17 is called by cond_15, which can also call cond_16
cond_16 has following error:
Title: user_message_service_error_title = Service Unavailable
Message: user_message_service_error_message_s_s = Hulu Plus could not complete the operation, because an important service is unavailable.

To be continued...
The Following User Says Thank You to TweakerL For This Useful Post: [ View ]
Post Reply Subscribe to Thread
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes