2013-07-03 13 views
15

पर तो मैं एक साइट जहाँ उपयोगकर्ताओं को ऑडियो आउटपुट एक सर्वर साइड स्क्रिप्ट द्वारा उत्पादित डेमो के लिए चाहते हो जाएगा है। वे कुछ विकल्प चुनते हैं और एक बनाएँ बटन दबाते हैं। मैं फिर एक एचटीएमएल 5 ऑडियो तत्व में AJAX को ऑटोप्ले विशेषता के साथ सत्य पर सेट करता हूं। यह डेस्कटॉप पर बहुत अच्छा काम करता है, मोबाइल पर इतना ज्यादा नहीं।फ़ीचर ऑटोप्ले HTML5 ऑडियो का पता लगाने - ऑडियो मोबाइल ब्राउज़र

अब तक मेरे वैकल्पिक हल एक PHP कोड का उपयोग उपयोगकर्ता के एजेंट स्ट्रिंग क्या डिवाइस मेरी साइट पर पहुँच एक मोबाइल डिवाइस था से निर्धारित करने के लिए किया गया था। मैं फिर एचटीएमएल 5 ऑडियो प्लेयर प्रदर्शित करूंगा ताकि उपयोगकर्ता ऑडियो चलाने के लिए प्ले बटन दबा सके।

बात है, अब नए फोन के लिए काम नहीं कर रहा मोबाइल का पता लगाने के उपयोगकर्ता-एजेंट स्ट्रिंग है। तो मेरा बुरा अभ्यास अंततः मुझे परेशान करने के लिए वापस आ गया है। ऑडियो को ऑटोप्ले करने की क्षमता के बारे में पता लगाने का कोई तरीका है?

+0

क्या आप अजेक्स कॉल – kalpaitch

+1

@kalpaitch के बाद जेएस के साथ स्पष्ट रूप से कॉल नहीं कर सकते हैं? मेरी धारणा यह थी कि मोबाइल पर अवांछित बैंडविड्थ उपयोग से बचने के लिए उपयोगकर्ता को ऑडियो को स्पष्ट रूप से खेलना होता है। – thatidiotguy

+0

प्रयास करें इस http://stackoverflow.com/questions/7120703/how-do-i-detect-if-the-html5-autoplay-attribute-is-supported –

उत्तर

18

हां, ऐसा करने के वास्तव में तरीके हैं।

निम्नलिखित ऑटोप्ले विशेषता के ब्राउज़र समर्थन का पता लगाने का एक छोटा सा प्रयास और परीक्षण उदाहरण है जिसे आप GitHub पर प्रदर्शित डेस्कटॉप और मोबाइल ब्राउज़र दोनों के लिए उपयोग कर सकते हैं।

var AUTOPLAY = false; // A flag to be used in the anonymous function 

(function() { 

    // Audio file data URIs; MP3 + OGG 
    var mp3 = 'data:audio/mpeg;base64,/+MYxAAAAANIAUAAAASEEB/jwOFM/0MM/90b/+RhST//w4NFwOjf///PZu////9lns5GFDv//l9GlUIEEIAAAgIg8Ir/JGq3/+MYxDsLIj5QMYcoAP0dv9HIjUcH//yYSg+CIbkGP//8w0bLVjUP///3Z0x5QCAv/yLjwtGKTEFNRTMuOTeqqqqqqqqqqqqq/+MYxEkNmdJkUYc4AKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'; 
    var ogg = 'data:audio/ogg;base64,T2dnUwACAAAAAAAAAADqnjMlAAAAAOyyzPIBHgF2b3JiaXMAAAAAAUAfAABAHwAAQB8AAEAfAACZAU9nZ1MAAAAAAAAAAAAA6p4zJQEAAAANJGeqCj3//////////5ADdm9yYmlzLQAAAFhpcGguT3JnIGxpYlZvcmJpcyBJIDIwMTAxMTAxIChTY2hhdWZlbnVnZ2V0KQAAAAABBXZvcmJpcw9CQ1YBAAABAAxSFCElGVNKYwiVUlIpBR1jUFtHHWPUOUYhZBBTiEkZpXtPKpVYSsgRUlgpRR1TTFNJlVKWKUUdYxRTSCFT1jFloXMUS4ZJCSVsTa50FkvomWOWMUYdY85aSp1j1jFFHWNSUkmhcxg6ZiVkFDpGxehifDA6laJCKL7H3lLpLYWKW4q91xpT6y2EGEtpwQhhc+211dxKasUYY4wxxsXiUyiC0JBVAAABAABABAFCQ1YBAAoAAMJQDEVRgNCQVQBABgCAABRFcRTHcRxHkiTLAkJDVgEAQAAAAgAAKI7hKJIjSZJkWZZlWZameZaouaov+64u667t6roOhIasBACAAAAYRqF1TCqDEEPKQ4QUY9AzoxBDDEzGHGNONKQMMogzxZAyiFssLqgQBKEhKwKAKAAAwBjEGGIMOeekZFIi55iUTkoDnaPUUcoolRRLjBmlEluJMYLOUeooZZRCjKXFjFKJscRUAABAgAMAQICFUGjIigAgCgCAMAYphZRCjCnmFHOIMeUcgwwxxiBkzinoGJNOSuWck85JiRhjzjEHlXNOSuekctBJyaQTAAAQ4AAAEGAhFBqyIgCIEwAwSJKmWZomipamiaJniqrqiaKqWp5nmp5pqqpnmqpqqqrrmqrqypbnmaZnmqrqmaaqiqbquqaquq6nqrZsuqoum65q267s+rZru77uqapsm6or66bqyrrqyrbuurbtS56nqqKquq5nqq6ruq5uq65r25pqyq6purJtuq4tu7Js664s67pmqq5suqotm64s667s2rYqy7ovuq5uq7Ks+6os+75s67ru2rrwi65r66os674qy74x27bwy7ouHJMnqqqnqq7rmarrqq5r26rr2rqmmq5suq4tm6or26os67Yry7aumaosm64r26bryrIqy77vyrJui67r66Ys67oqy8Lu6roxzLat+6Lr6roqy7qvyrKuu7ru+7JuC7umqrpuyrKvm7Ks+7auC8us27oxuq7vq7It/KosC7+u+8Iy6z5jdF1fV21ZGFbZ9n3d95Vj1nVhWW1b+V1bZ7y+bgy7bvzKrQvLstq2scy6rSyvrxvDLux8W/iVmqratum6um7Ksq/Lui60dd1XRtf1fdW2fV+VZd+3hV9pG8OwjK6r+6os68Jry8ov67qw7MIvLKttK7+r68ow27qw3L6wLL/uC8uq277v6rrStXVluX2fsSu38QsAABhwAAAIMKEMFBqyIgCIEwBAEHIOKQahYgpCCKGkEEIqFWNSMuakZM5JKaWUFEpJrWJMSuaclMwxKaGUlkopqYRSWiqlxBRKaS2l1mJKqcVQSmulpNZKSa2llGJMrcUYMSYlc05K5pyUklJrJZXWMucoZQ5K6iCklEoqraTUYuacpA46Kx2E1EoqMZWUYgupxFZKaq2kFGMrMdXUWo4hpRhLSrGVlFptMdXWWqs1YkxK5pyUzDkqJaXWSiqtZc5J6iC01DkoqaTUYiopxco5SR2ElDLIqJSUWiupxBJSia20FGMpqcXUYq4pxRZDSS2WlFosqcTWYoy1tVRTJ6XFklKMJZUYW6y5ttZqDKXEVkqLsaSUW2sx1xZjjqGkFksrsZWUWmy15dhayzW1VGNKrdYWY40x5ZRrrT2n1mJNMdXaWqy51ZZbzLXnTkprpZQWS0oxttZijTHmHEppraQUWykpxtZara3FXEMpsZXSWiypxNhirLXFVmNqrcYWW62ltVprrb3GVlsurdXcYqw9tZRrrLXmWFNtBQAADDgAAASYUAYKDVkJAEQBAADGMMYYhEYpx5yT0ijlnHNSKucghJBS5hyEEFLKnINQSkuZcxBKSSmUklJqrYVSUmqttQIAAAocAAACbNCUWByg0JCVAEAqAIDBcTRNFFXVdX1fsSxRVFXXlW3jVyxNFFVVdm1b+DVRVFXXtW3bFn5NFFVVdmXZtoWiqrqybduybgvDqKqua9uybeuorqvbuq3bui9UXVmWbVu3dR3XtnXd9nVd+Bmzbeu2buu+8CMMR9/4IeTj+3RCCAAAT3AAACqwYXWEk6KxwEJDVgIAGQAAgDFKGYUYM0gxphhjTDHGmAAAgAEHAIAAE8pAoSErAoAoAADAOeecc84555xzzjnnnHPOOeecc44xxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY0wAwE6EA8BOhIVQaMhKACAcAABACCEpKaWUUkoRU85BSSmllFKqFIOMSkoppZRSpBR1lFJKKaWUIqWgpJJSSimllElJKaWUUkoppYw6SimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaVUSimllFJKKaWUUkoppRQAYPLgAACVYOMMK0lnhaPBhYasBAByAwAAhRiDEEJpraRUUkolVc5BKCWUlEpKKZWUUqqYgxBKKqmlklJKKbXSQSihlFBKKSWUUkooJYQQSgmhlFRCK6mEUkoHoYQSQimhhFRKKSWUzkEoIYUOQkmllNRCSB10VFIpIZVSSiklpZQ6CKGUklJLLZVSWkqpdBJSKamV1FJqqbWSUgmhpFZKSSWl0lpJJbUSSkklpZRSSymFVFJJJYSSUioltZZaSqm11lJIqZWUUkqppdRSSiWlkEpKqZSSUmollZRSaiGVlEpJKaTUSimlpFRCSamlUlpKLbWUSkmptFRSSaWUlEpJKaVSSksppRJKSqmllFpJKYWSUkoplZJSSyW1VEoKJaWUUkmptJRSSymVklIBAEAHDgAAAUZUWoidZlx5BI4oZJiAAgAAQABAgAkgMEBQMApBgDACAQAAAADAAAAfAABHARAR0ZzBAUKCwgJDg8MDAAAAAAAAAAAAAACAT2dnUwAEAAAAAAAAAADqnjMlAgAAADzQPmcBAQA='; 

    try { 
     var audio = new Audio(); // Construct new Audio object 
     var src = audio.canPlayType('audio/ogg') ? ogg : mp3; // Ternary statement determining the value of the src variable, which will be either ogg or mp3. 
     audio.autoplay = true; // Set autoplay to true 

     // This event will only be triggered if setting the autoplay attribute to true works.    
     $(audio).on('play', function() { 
      AUTOPLAY = true; // Set the global flag to true, indicating we have support. 
     }); 

     audio.src = src; // Set the audio objects src to the value of the src variable. 
    } catch(e) { 
     console.log('[AUTOPLAY-ERROR]', e); 
     // This means we were unsuccessful - this browser doesn't support the autoplay attribute. 
    } 
})(); // Invoke anonymous function. 

इस स्निपेट PicDinner.com

पर ओवर में उपयोग थोड़ा संशोधित संस्करण ओ पी के लिए का एक उदाहरण है:

उदाहरण के रूप में अपने आप को बताया गया हो कि यह काम करता है से, इस प्रकार टिप्पणी के साथ है अपने विशेष उपयोग-मामले, check his answer के लिए उपयोग किया जाता है। भविष्य जवाब चाहने वालों के लिए

+0

मैंने इसे अपने लॉगिन फॉर्म में लागू किया और फिर फॉर्म को सबमिट कर दिया (क्योंकि यह विलंब के बाद मूल्य की जांच के बाद सबसे अच्छा काम करता है) फिर मैं ऑटोप्ले मूल्य को एक में बदलता हूं लॉगिन फॉर्म में छुपा क्षेत्र। फिर जब उपयोगकर्ता लॉग इन करता है तो मैं सत्र को मान को सहेज सकता हूं और इसे अपने पूरे अनुभव के लिए याद रखता हूं, बिना किसी पृष्ठ पर इसे निष्पादित करने की आवश्यकता के। – Sherri

+0

वास्तविक समस्या यह है कि यह स्क्रिप्ट मोबाइल के लिए क्रोम पर क्रैश हो रही है। – Sherri

+2

ध्यान देने योग्य मूल्य के लिए '$ (ऑडियो) .on()' बिट के लिए ** jQuery ** की आवश्यकता है। शायद इसके बजाय 'addEventListener' का उपयोग कर सकते हैं? – Iest

0

http://modernizr.com/ सब कुछ है कि आप ऑटोप्ले ऑडियो

+2

मैं आधुनिकता प्रलेखन में टेस्ट करने योग्य नहीं देख रहा हूं। http://modernizr.com/docs/#features-html5 – thatidiotguy

-1

http://detectmobilebrowsers.com/ और विकल्प का प्रयोग करें सर्वर साइड में रन के लिए Node.js के लिए पता लगाने के लागू करने की आवश्यकता नहीं होनी चाहिए। प्रदर्शन के लिए

आदर्श विशिष्ट प्लेटफार्मों के लिए स्थानीय मोबाइल एप्लिकेशन को बनाने के लिए किया जाएगा। क्रॉसप्लाफार्म ज़ैमरिन, आईसीनियम, फोनगैप, ऐपसीलेरेटर, कोरोना बनाने के कई विकल्प हैं, अन्य ने कहा। अपने सिस्टम को और अधिक "पेशेवर" छोड़ दें और उपयोगकर्ता को साइट तक पहुंचने के लिए ब्राउज़र में प्रवेश करने के बजाय एप्लिकेशन में प्रवेश करने के लिए और अधिक व्यावहारिक होगा। ये मेरा विचार हे।

1

यहाँ html पृष्ठ मैं ऑटोप्ले के लिए परीक्षण करने के लिए प्रयोग किया जाता है।

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script> 
     <script> 
      var AUTOPLAY = false; 

      $(function() { 

       $("#message").html("AUTOPLAY = FALSE"); 

       // Audio file data URIs from comments in 
       // [this gist](https://gist.github.com/westonruter/253174) 
       // via [mudcube](https://github.com/mudcube) 
       var mp3 = 'data:audio/mpeg;base64,/+MYxAAAAANIAUAAAASEEB/jwOFM/0MM/90b/+RhST//w4NFwOjf///PZu////9lns5GFDv//l9GlUIEEIAAAgIg8Ir/JGq3/+MYxDsLIj5QMYcoAP0dv9HIjUcH//yYSg+CIbkGP//8w0bLVjUP///3Z0x5QCAv/yLjwtGKTEFNRTMuOTeqqqqqqqqqqqqq/+MYxEkNmdJkUYc4AKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'; 

       var ogg = 'data:audio/ogg;base64,T2dnUwACAAAAAAAAAADqnjMlAAAAAOyyzPIBHgF2b3JiaXMAAAAAAUAfAABAHwAAQB8AAEAfAACZAU9nZ1MAAAAAAAAAAAAA6p4zJQEAAAANJGeqCj3//////////5ADdm9yYmlzLQAAAFhpcGguT3JnIGxpYlZvcmJpcyBJIDIwMTAxMTAxIChTY2hhdWZlbnVnZ2V0KQAAAAABBXZvcmJpcw9CQ1YBAAABAAxSFCElGVNKYwiVUlIpBR1jUFtHHWPUOUYhZBBTiEkZpXtPKpVYSsgRUlgpRR1TTFNJlVKWKUUdYxRTSCFT1jFloXMUS4ZJCSVsTa50FkvomWOWMUYdY85aSp1j1jFFHWNSUkmhcxg6ZiVkFDpGxehifDA6laJCKL7H3lLpLYWKW4q91xpT6y2EGEtpwQhhc+211dxKasUYY4wxxsXiUyiC0JBVAAABAABABAFCQ1YBAAoAAMJQDEVRgNCQVQBABgCAABRFcRTHcRxHkiTLAkJDVgEAQAAAAgAAKI7hKJIjSZJkWZZlWZameZaouaov+64u667t6roOhIasBACAAAAYRqF1TCqDEEPKQ4QUY9AzoxBDDEzGHGNONKQMMogzxZAyiFssLqgQBKEhKwKAKAAAwBjEGGIMOeekZFIi55iUTkoDnaPUUcoolRRLjBmlEluJMYLOUeooZZRCjKXFjFKJscRUAABAgAMAQICFUGjIigAgCgCAMAYphZRCjCnmFHOIMeUcgwwxxiBkzinoGJNOSuWck85JiRhjzjEHlXNOSuekctBJyaQTAAAQ4AAAEGAhFBqyIgCIEwAwSJKmWZomipamiaJniqrqiaKqWp5nmp5pqqpnmqpqqqrrmqrqypbnmaZnmqrqmaaqiqbquqaquq6nqrZsuqoum65q267s+rZru77uqapsm6or66bqyrrqyrbuurbtS56nqqKquq5nqq6ruq5uq65r25pqyq6purJtuq4tu7Js664s67pmqq5suqotm64s667s2rYqy7ovuq5uq7Ks+6os+75s67ru2rrwi65r66os674qy74x27bwy7ouHJMnqqqnqq7rmarrqq5r26rr2rqmmq5suq4tm6or26os67Yry7aumaosm64r26bryrIqy77vyrJui67r66Ys67oqy8Lu6roxzLat+6Lr6roqy7qvyrKuu7ru+7JuC7umqrpuyrKvm7Ks+7auC8us27oxuq7vq7It/KosC7+u+8Iy6z5jdF1fV21ZGFbZ9n3d95Vj1nVhWW1b+V1bZ7y+bgy7bvzKrQvLstq2scy6rSyvrxvDLux8W/iVmqratum6um7Ksq/Lui60dd1XRtf1fdW2fV+VZd+3hV9pG8OwjK6r+6os68Jry8ov67qw7MIvLKttK7+r68ow27qw3L6wLL/uC8uq277v6rrStXVluX2fsSu38QsAABhwAAAIMKEMFBqyIgCIEwBAEHIOKQahYgpCCKGkEEIqFWNSMuakZM5JKaWUFEpJrWJMSuaclMwxKaGUlkopqYRSWiqlxBRKaS2l1mJKqcVQSmulpNZKSa2llGJMrcUYMSYlc05K5pyUklJrJZXWMucoZQ5K6iCklEoqraTUYuacpA46Kx2E1EoqMZWUYgupxFZKaq2kFGMrMdXUWo4hpRhLSrGVlFptMdXWWqs1YkxK5pyUzDkqJaXWSiqtZc5J6iC01DkoqaTUYiopxco5SR2ElDLIqJSUWiupxBJSia20FGMpqcXUYq4pxRZDSS2WlFosqcTWYoy1tVRTJ6XFklKMJZUYW6y5ttZqDKXEVkqLsaSUW2sx1xZjjqGkFksrsZWUWmy15dhayzW1VGNKrdYWY40x5ZRrrT2n1mJNMdXaWqy51ZZbzLXnTkprpZQWS0oxttZijTHmHEppraQUWykpxtZara3FXEMpsZXSWiypxNhirLXFVmNqrcYWW62ltVprrb3GVlsurdXcYqw9tZRrrLXmWFNtBQAADDgAAASYUAYKDVkJAEQBAADGMMYYhEYpx5yT0ijlnHNSKucghJBS5hyEEFLKnINQSkuZcxBKSSmUklJqrYVSUmqttQIAAAocAAACbNCUWByg0JCVAEAqAIDBcTRNFFXVdX1fsSxRVFXXlW3jVyxNFFVVdm1b+DVRVFXXtW3bFn5NFFVVdmXZtoWiqrqybduybgvDqKqua9uybeuorqvbuq3bui9UXVmWbVu3dR3XtnXd9nVd+Bmzbeu2buu+8CMMR9/4IeTj+3RCCAAAT3AAACqwYXWEk6KxwEJDVgIAGQAAgDFKGYUYM0gxphhjTDHGmAAAgAEHAIAAE8pAoSErAoAoAADAOeecc84555xzzjnnnHPOOeecc44xxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY0wAwE6EA8BOhIVQaMhKACAcAABACCEpKaWUUkoRU85BSSmllFKqFIOMSkoppZRSpBR1lFJKKaWUIqWgpJJSSimllElJKaWUUkoppYw6SimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaVUSimllFJKKaWUUkoppRQAYPLgAACVYOMMK0lnhaPBhYasBAByAwAAhRiDEEJpraRUUkolVc5BKCWUlEpKKZWUUqqYgxBKKqmlklJKKbXSQSihlFBKKSWUUkooJYQQSgmhlFRCK6mEUkoHoYQSQimhhFRKKSWUzkEoIYUOQkmllNRCSB10VFIpIZVSSiklpZQ6CKGUklJLLZVSWkqpdBJSKamV1FJqqbWSUgmhpFZKSSWl0lpJJbUSSkklpZRSSymFVFJJJYSSUioltZZaSqm11lJIqZWUUkqppdRSSiWlkEpKqZSSUmollZRSaiGVlEpJKaTUSimlpFRCSamlUlpKLbWUSkmptFRSSaWUlEpJKaVSSksppRJKSqmllFpJKYWSUkoplZJSSyW1VEoKJaWUUkmptJRSSymVklIBAEAHDgAAAUZUWoidZlx5BI4oZJiAAgAAQABAgAkgMEBQMApBgDACAQAAAADAAAAfAABHARAR0ZzBAUKCwgJDg8MDAAAAAAAAAAAAAACAT2dnUwAEAAAAAAAAAADqnjMlAgAAADzQPmcBAQA='; 

       try 
       { 
        var audio = new Audio(); 
        var src = audio.canPlayType('audio/ogg') ? ogg : mp3; 
        audio.autoplay = true; 
        audio.volume = 0; 

        $("#message").html("AUTOPLAY = FALSE"); 

        // this will only be triggered if autoplay works 
        $(audio).on('play', function() { 
         AUTOPLAY = true; 
         $("#message").html('AUTOPLAY = TRUE'); 
        }); 

        audio.src = src; 
       } 
       catch(e) 
       { 
        $("#message").html('[AUTOPLAY-ERROR]'+e); 
       } 
      }); 
     </script> 
    </head> 
    <body> 
     <div id="message"> 

     </div> 
    </body> 
</html> 
0

सहायता, ब्राउज़रों/उपकरणों के द्वारा यदि ऑटो-प्ले का समर्थन की जाँच करें या नहीं करने के लिए एक आदर्श तरीका:

var promise = document.getElementById('video').play(); 

if(typeof promise !== 'undefined') { 
    promise.then(function() { 
     // auto-play started! 
    }).catch(function(error) { 
     // auto-play failed 
    }); 
} 

कृपया ध्यान दें, मीडिया खेलने वादा अभी तक सभी ब्राउज़रों द्वारा समर्थित नहीं है। यदि ब्राउज़र इसका समर्थन नहीं करता है, तो यह undefined लौटाएगा।

संबंधित मुद्दे