Skip to content

Commit

Permalink
vidstream & megaF direct scrap implementation
Browse files Browse the repository at this point in the history
- Replace-string Inject embed.js on android and electron
- Fetch keys if last mediainfo failed
  • Loading branch information
amarullz committed Jul 18, 2024
1 parent 782b6ba commit df1d01b
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 5 deletions.
5 changes: 4 additions & 1 deletion app/src/main/assets/inject/view_player.html
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@
{file:med.sources[0].file}
],
tracks:[]
}
},
keys:window.__QKEYS
};
for (var i=0;i<med.tracks.length;i++){
dat.result.tracks.push({
Expand All @@ -113,6 +114,7 @@
});
}
window.__JWMEDIA=dat;
console.warn(JSON.stringify(dat));
$p('mediainfo',dat);
}
else{
Expand Down Expand Up @@ -164,5 +166,6 @@
}

findjw();

})();
</script>
62 changes: 61 additions & 1 deletion app/src/main/assets/view/m.js
Original file line number Diff line number Diff line change
Expand Up @@ -1852,6 +1852,61 @@ const wave={
});
});
},

/* Vidstream data scrapper */
vidstream:{
keys:
[
"NeBk5CElH19ucfBU",
"Z7YMUOoLEjfNqPAt",
"eO74cTKZayUWH8x5"
],
get:function(u,cb){
var vidLoc=u.substring(0,u.indexOf("?"));
var vidSearch=u.substring(u.indexOf("?"));
var vidHost=vidLoc.split('/')[2];
var vidId=vidLoc.substring(vidLoc.lastIndexOf("/")+1);
/* No Keys Yet */
if (!wave.vidstream.keys){
cb(null);
return;
}
if (wave.vidstream.keys.length<3){
cb(null);
return;
}
var k1=VRF.safeBtoa(VRF.rc4(wave.vidstream.keys[0],vidId));
var k2=VRF.safeBtoa(VRF.rc4(wave.vidstream.keys[1],vidId));
var mediaUrl='https://'+vidHost+'/mediainfo/'+k1+vidSearch+'&h='+k2;
console.log("[VIDSTREAM] VideoID: "+vidId+" -> Mediainfo = "+mediaUrl);
$ap(mediaUrl,function(r){
if (r.ok){
try{
var d=JSON.parse(r.responseText);
try{
var de=decodeURIComponent(
VRF.rc4(wave.vidstream.keys[2],
VRF.safeAtob(d.result))
);
d.result=JSON.parse(de);
cb(d);
console.log("[VIDSTREAM] Got Mediainfo Data: "+JSON.stringify(d)+"");
return;
}catch(e){}
}catch(e){}
}
cb(null);
},
{
"X-Org-Prox":"https://"+vidHost+"/",
"X-Ref-Prox":u,
'X-Requested-With':'XMLHttpRequest',
'Accept':'application/json, text/javascript, */*; q=0.01'
}
);
}
},

vidplayGetData:function(u,cb){
var vidHost=u.split('/')[2];
if (vidHost.indexOf("mp4upload.com")>-1){
Expand All @@ -1863,10 +1918,11 @@ const wave={
return;
}
else{
cb(null);
wave.vidstream.get(u,cb);
return;
}

/* Old legacy Vidplay - todo: delete + cleanup old vidplay functions */
wave.vidplayGetMedia(u,function(url){
if (url){
$ap(url,function(r){
Expand Down Expand Up @@ -6810,6 +6866,10 @@ const pb={
pb.pb_track_pos.innerHTML='PREPARE VIDEO';
_API.setVizPageCb(null);

if ('keys' in d){
wave.vidstream.keys=JSON.parse(JSON.stringify(d.keys));
}

var urivid="";
try{
if (d.data.media.sources){
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/java/com/amarullz/androidtv/animetvjmto/AnimeApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

import androidx.core.content.FileProvider;

import com.google.common.base.Utf8;

import org.chromium.net.CronetEngine;
import org.json.JSONObject;

Expand All @@ -33,6 +35,7 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
Expand Down Expand Up @@ -358,6 +361,18 @@ public void injectString(ByteArrayOutputStream buffer, String inject){
buffer.write(injectByte, 0, injectByte.length);
}

public void replaceString(ByteArrayOutputStream buffer, String src,
String replace){
try {
String out=buffer.toString("UTF-8");
out = out.replace(src,replace);
byte[] injectByte = out.getBytes();
buffer.reset();
buffer.write(injectByte, 0, injectByte.length);
} catch (Exception ignored) {
}
}

public void injectJs(ByteArrayOutputStream buffer, String url){
injectString(buffer, "<script src=\""+url+
"\"></script>");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1074,11 +1074,17 @@ else if (host.equals(Conf.SOURCE_DOMAIN5_API)){
else if (host.contains(Conf.STREAM_DOMAIN)
||host.contains(Conf.STREAM_DOMAIN1)
||host.contains(Conf.STREAM_DOMAIN2)){
if (accept.startsWith("text/html")/*||
url.startsWith("https://"+host+"/mediainfo")*/) {
if (accept.startsWith("text/html")||
url.startsWith("https://"+host+"/assets/mcloud/min/embed.js")
/*||
url.startsWith("https://"+host+"/mediainfo")*/
) {
Log.d(_TAG,"VIEW PLAYER REQ = "+url);
// if (!accept.startsWith("text/html"))
// sendVidpageLoaded(1);

boolean isJs=url.startsWith("https://"+host+
"/assets/mcloud/min/embed.js");
try {
AnimeApi.Http http=new AnimeApi.Http(url);
for (Map.Entry<String, String> entry :
Expand All @@ -1088,7 +1094,17 @@ else if (host.contains(Conf.STREAM_DOMAIN)
http.execute();

if (http.code()==200) {
if (accept.startsWith("text/html")) {
if (isJs){
aApi.replaceString(http.body,
"function Q(){",
"function Q(){ "+
"try{console.log(arguments);"+
"if (!('__QKEYS' in window)) "+
"window.__QKEYS=[]; "+
"window.__QKEYS.push(arguments[0]);}catch(e){}"
);
}
else if (accept.startsWith("text/html")) {
try {
aApi.injectString(http.body, playerInjectString);
sendVidpageLoaded(1);
Expand Down
15 changes: 15 additions & 0 deletions electron/src/libs/intercept.js
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,21 @@ const intercept={
req.headers.set('Origin','https://'+url.hostname);
req.headers.set('Referer','https://'+url.hostname+'/');
let f=intercept.fetchStream(req);

/* Modify embed.js to get rc4 keys */
if (url.pathname.startsWith("/assets/mcloud/min/embed.js")){
let body=await (await f).text();
body=body.replace(
'function Q(){',
'function Q(){ try{console.log(arguments);if (!("__QKEYS" in window)) window.__QKEYS=[]; window.__QKEYS.push(arguments[0]);}catch(e){} '
);
return new Response(body, {
status: f.status,
headers: f.headers
});
}

/* Old unused mediainfo trap */
// if (url.pathname.startsWith("/mediainfo")){
// let body=await (await f).text();
// common.execJs("__M3U8CB("+body+");");
Expand Down

0 comments on commit df1d01b

Please sign in to comment.