Attend XDA's Second Annual Developer Conference, XDA:DevCon 2014!
5,810,846 Members 37,253 Now Online
XDA Developers Android and Mobile Development Forum

Hulu+ is now supported on Prime

Tip us?
 
laword
Old
#21  
Junior Member
Thanks Meter 1
Posts: 18
Join Date: 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
 
droidtard
Old
#22  
Junior Member
Thanks Meter 0
Posts: 6
Join Date: Apr 2012
Sweet I can cancel my cable now. Thanks for the update!
 
willowave
Old
#23  
Senior Member
Thanks Meter 7
Posts: 182
Join Date: Sep 2010
Location: Sioux Falls, SD
Quote:
Originally Posted by chefdave12118 View Post
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?
Galaxy Nexus
HTC Flyer
HTC Rezound
Asus Transformer Prime
Droid Charge
HTC Incredible
Archos 70/8 gig
Droid Eris
 
TweakerL
Old
#24  
Senior Member
Thanks Meter 324
Posts: 234
Join Date: Oct 2010
Location: Rosedale, MD

 
DONATE TO ME
Default 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.
 
TweakerL
Old
#25  
Senior Member
Thanks Meter 324
Posts: 234
Join Date: Oct 2010
Location: Rosedale, MD

 
DONATE TO ME
Default 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.
 
TweakerL
Old
#26  
Senior Member
Thanks Meter 324
Posts: 234
Join Date: Oct 2010
Location: Rosedale, MD

 
DONATE TO ME
Default 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: [ Click to Expand ]
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes


Old but Gold Internet Browser is a Blast from the Past

A Web browser is one of these applications that we can’t live without. We useit … more

Real-World Battery Saving Tips for Android – XDA Developer TV

You need Real-World Battery Saving Tips for your Android device. Our … more

Android L Will Have Data Encryption Turned On by Default

Android L, once it is eventually released, will featuredata encryption turned on by … more

Lock Apps and Functions Easily with Droid Protector

Access and security are some of the key issues facingmobile technology. Whether … more