मैंने पहले सवाल पूछा था कि एक वीडियो फ़ाइल के लिए एम्बेडेड यूआरएल कैसे पुनर्प्राप्त करें और सफलतापूर्वक ऐसा किया है। अब मेरे पास एक अलग मुद्दा है। एक Wunderground एपीआई वेब कैमरा प्रतिक्रिया के लिए json प्रतिक्रिया के बाद यूआरएल देता है:JSoup का उपयोग कर एंड्रॉइड में यूआरएल के भीतर एम्बेडेड यूआरएल से रिमोट वीडियो का सीधा लिंक कैसे प्राप्त करें?
https://www.wunderground.com/webcams/cadot1/902/show.html
JSoup और मेरी प्रारंभिक मुद्दे का जवाब प्रति मैं इस एम्बेडेड लिंक प्राप्त करने में सक्षम था का उपयोग करना:
https://www.wunderground.com/webcams/cadot1/902/video.html?month=11&year=2016&filename=current.mp4
उस यूआरएल से वीडियो व्यू में वीडियो को "स्ट्रीम" करने का प्रयास करते समय, मुझे "वीडियो नहीं चलाया जा सकता" त्रुटि मिल रही थी। उस लिंक के स्रोत को देखने पर मैंने देखा कि वीडियो फ़ाइल जिसे चलाने की आवश्यकता है उसे HTML में संदर्भित नहीं बल्कि जावास्क्रिप्ट में संदर्भित किया गया है। मैं वीडियो फ़ाइल के लिए सीधा लिंक कैसे प्राप्त कर सकता हूं जिसे चलाने की जरूरत है? JSoup या अन्य प्रक्रिया का उपयोग करना? //icons.wunderground.com/webcamcurrent/c/a/cadot1/902/ ":
यूआरएल:
यूआरएल
https://www.wunderground.com/webcams/cadot1/902/video.html?month=11&year=2016&filename=current.mp4
के लिए स्रोत एक<script>
कोष्ठक के अंदर की जरूरत वीडियो फ़ाइल के लिए निम्न से पता चलता ? current.mp4 ई = +१४८०३७७५०८ "
मैं JSoup उपयोग कर रहा हूँ इसलिए की तरह प्रतिक्रिया यूआरएल से वीडियो के लिए एम्बेडेड यूआरएल पाने के लिए:
private class VideoLink extends AsyncTask<Void, Void, Void> {
String title;
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog.setTitle("JSOUP Test");
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try {
// for avoiding javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
System.setProperty("jsse.enableSNIExtension", "false");
// WARNING: do it only if security isn't important, otherwise you have
// to follow this advices: http://stackoverflow.com/a/7745706/1363265
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
public X509Certificate[] getAcceptedIssuers(){return null;}
public void checkClientTrusted(X509Certificate[] certs, String authType){}
public void checkServerTrusted(X509Certificate[] certs, String authType){}
}};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
;
}
// Connect to the web site
Document doc = Jsoup.connect(TEST_URL).get();
Elements elements = doc.getElementsByClass("videoText");
// Get the html document title
for (Element link : elements) {
String linkHref = link.attr("href");
// linkHref contains something like video.html?month=11&year=2016&filename=current.mp4
// TODO check if linkHref ends with current.mp4
title = linkHref;
}
} catch (IOException e) {
e.printStackTrace();
mProgressDialog.dismiss();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// Set title into TextView
resultTxt.setText(title);
String resVid = TEST_URL;
Log.d(TAG, "URL: " + resVid);
Uri resUri = Uri.parse(resVid);
try {
// Start the MediaController
MediaController mediacontroller = new MediaController(
MainActivity.this);
mediacontroller.setAnchorView(resultVidVw);
// Get the URL from String VideoURL
Uri video = Uri.parse(resVid);
resultVidVw.setMediaController(mediacontroller);
resultVidVw.setVideoURI(video);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
resultVidVw.requestFocus();
resultVidVw.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
// Close the progress bar and play the video
public void onPrepared(MediaPlayer mp) {
mProgressDialog.dismiss();
resultVidVw.start();
}
});
}
}
कृपया ध्यान दें कि मुझे प्रतिक्रिया सरणी में प्रत्येक JSONObject पर ऐसा करने की आवश्यकता है।
:
भाग को सहेजना अन्य तरीकों से भी किया जा सकता है: http://stackoverflow.com/questions/4350084/byte-to-file-in-java – Omid