আমি একটি আইপ্যাডে সাফারিতে অটোপ্লেতে একটি অডিও ফাইল পাওয়ার চেষ্টা করছি। আমি যদি আমার ম্যাকের সাফারি ব্যবহার করে পৃষ্ঠাতে যাই, ঠিক আছে। আইপ্যাডে, অটোপ্লে কাজ করে না।
আমি একটি আইপ্যাডে সাফারিতে অটোপ্লেতে একটি অডিও ফাইল পাওয়ার চেষ্টা করছি। আমি যদি আমার ম্যাকের সাফারি ব্যবহার করে পৃষ্ঠাতে যাই, ঠিক আছে। আইপ্যাডে, অটোপ্লে কাজ করে না।
উত্তর:
আপডেট: এটি একটি হ্যাক এবং এটি আর আইওএস ৪ এক্স এবং এর উপরে কাজ করে না। এই আইওএস ৩.২.এক্স-এ কাজ করেছে
এটা সত্য নয়. মোবাইল নেটওয়ার্কগুলিতে আপনি প্রচুর ট্র্যাফিক ব্যবহার করতে পারেন বলে অ্যাপল আইপ্যাডে ভিডিও এবং অডিও অটোপ্লে করতে চায় না। আমি অনলাইন সামগ্রীর জন্য অটোপ্লে ব্যবহার করব না। অফলাইন এইচটিএমএল সাইটগুলির জন্য এটি দুর্দান্ত বৈশিষ্ট্য এবং এটির জন্য আমি এটি ব্যবহার করেছি।
এখানে একটি "জাভাস্ক্রিপ্ট জাল ক্লিক" সমাধান: http://www.roblaplaca.com / উদাহরণ / html5 আউটপ্লে /
সাইট থেকে কপি এবং আটকানো কোড:
<script type="text/javascript">
function fakeClick(fn) {
var $a = $('<a href="#" id="fakeClick"></a>');
$a.bind("click", function(e) {
e.preventDefault();
fn();
});
$("body").append($a);
var evt,
el = $("#fakeClick").get(0);
if (document.createEvent) {
evt = document.createEvent("MouseEvents");
if (evt.initMouseEvent) {
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
el.dispatchEvent(evt);
}
}
$(el).remove();
}
$(function() {
var video = $("#someVideo").get(0);
fakeClick(function() {
video.play();
});
});
</script>
এটি আমার উত্স নয়। আমি এটি কিছু সময় আগে খুঁজে পেয়েছি এবং আইওএস 3.2.X. এর সাথে একটি আইপ্যাড এবং আইফোনটিতে কোডটি পরীক্ষা করেছি
আমি আরও জোর দিয়ে বলতে চাই যে আপনি এটি করতে না পারার কারণটি কোনও ব্যবসায়িক সিদ্ধান্ত যা অ্যাপল কোনও প্রযুক্তিগত সিদ্ধান্ত নয়। বুদ্ধিমানভাবে, আইপড টাচে ওয়েব অ্যাপ্লিকেশন থেকে শব্দ নিষ্ক্রিয় করার জন্য অ্যাপলের পক্ষে কোনও যৌক্তিক প্রযুক্তিগত যৌক্তিকতা ছিল না। এটি কেবলমাত্র একটি ওয়াইফাই ডিভাইস, কোনও ফোন নয় যা ব্যয়বহুল ব্যান্ডউইথ চার্জ বহন করতে পারে, সুতরাং সেই যুক্তিতে সেই ডিভাইসের জন্য শূন্য যোগ্যতা রয়েছে। তারা বলতে পারে যে তারা ওয়াইফাই নেটওয়ার্ক পরিচালনায় সহায়তা করছে তবে আমার ওয়াইফাই নেটওয়ার্কে ব্যান্ডউইদথের যে কোনও সমস্যাই আমার উদ্বেগ, অ্যাপলের নয়।
এছাড়াও, যদি তারা সত্যিই যত্ন নিয়েছিল তবে অযাচিত, অতিরিক্ত ব্যান্ডউইথ গ্রহণ বন্ধ করে দিচ্ছিল, তারা ব্যবহারকারীদের ওয়েব অ্যাপ্লিকেশন শোনার জন্য অপ্ট-ইন করার অনুমতি দেওয়ার জন্য একটি সেটিংস সরবরাহ করবে। এছাড়াও, তারা ওয়েব সাইটগুলিকে অন্য উপায়ে সমতুল্য ব্যান্ডউইথ গ্রহণ থেকে বাধা দেওয়ার জন্য কিছু করবে। তবে এ জাতীয় কোনও বিধিনিষেধ নেই। কোনও ওয়েবসাইট পটভূমিতে বিশাল ফাইলগুলি বারবার ডাউনলোড করতে পারে এবং অ্যাপল সে সম্পর্কে কম যত্ন নিতে পারে। এবং পরিশেষে, আমি বিশ্বাস করি যেভাবেই শব্দগুলি ডাউনলোড করা যায়, সুতরাং কোনও ব্যান্ডউইথই সত্যই সংরক্ষণ করা যায় না! অ্যাপল কেবল তাদের ব্যবহারকারীর মিথস্ক্রিয়া ছাড়াই স্বয়ংক্রিয়ভাবে খেলতে দেয় না, এগুলি গেমগুলির জন্য অকেজো করে তোলে, অবশ্যই তাদের আসল উদ্দেশ্য।
অ্যাপল শব্দটিকে অবরুদ্ধ করেছে কারণ তারা লক্ষ্য করতে শুরু করেছে যে এইচটিএমএল 5 অ্যাপ্লিকেশনগুলি যদি না হয় তবে নেটিভ অ্যাপ্লিকেশনগুলির মতো ঠিক সক্ষম হতে পারে। আপনি যদি ওয়েব অ্যাপ্লিকেশনগুলিতে শব্দ চান তবে আপনাকে মাইক্রোসফ্টের মতো প্রতিযোগী হওয়া থেকে বিরত রাখতে অ্যাপলের লবি করা দরকার। এখানে কোনও প্রযুক্তিগত সমস্যা নেই যা এখানে স্থির করা যায়।
অ্যাপল বিভিন্ন ব্যবসায়িক কারণে বিভিন্ন কারণে তাদের আইওএস ডিভাইসে অনেক HTML5 ওয়েব স্ট্যান্ডার্ডকে বিরক্তিকরভাবে প্রত্যাখ্যান করে। শেষ পর্যন্ত, আপনি কোনও স্পর্শ ইভেন্টের আগে সাউন্ড ফাইলগুলি পূর্ব-লোড বা অটো প্লে করতে পারবেন না, এটি একবারে কেবল একটি শব্দ বাজায় এবং এটি ওগ / ভারবিস সমর্থন করে না। যাইহোক, আপনাকে অডিওর উপরে আরও কিছুটা নিয়ন্ত্রণ রাখতে একটি নিফটি কাজ খুঁজে পেয়েছি।
<audio id="soundHandle" style="display:none;"></audio>
<script type="text/javascript">
var soundHandle = document.getElementById('soundHandle');
$(document).ready(function() {
addEventListener('touchstart', function (e) {
soundHandle.src = 'audio.mp3';
soundHandle.loop = true;
soundHandle.play();
soundHandle.pause();
});
});
</script>
মূলত, আপনি অডিও ফাইলটি প্রথম স্পর্শ ইভেন্টে বাজানো শুরু করেন, তারপরে আপনি তাৎক্ষণিকভাবে বিরতি দিন। এখন, আপনি আপনার জাভাস্ক্রিপ্ট জুড়ে সাউন্ডহ্যান্ডল.প্লে () এবং সাউন্ডহ্যান্ডল.পজ () কমান্ডগুলি ব্যবহার করতে পারেন এবং স্পর্শ ইভেন্ট ছাড়াই অডিওটি নিয়ন্ত্রণ করতে পারেন। আপনি যদি এটি পুরোপুরি সময় দিতে পারেন তবে শব্দ শেষ হওয়ার পরে ঠিক বিরতি দিন। এরপরে আপনি যখন আবার এটি খেলবেন, এটি শুরুতে ফিরে আসবে। এটি অ্যাপল এখানে তৈরি সমস্ত গণ্ডগোলের সমাধান করবে না, তবে এটির একটি সমাধান।
আইওএস ৪.২.১ অনুসারে, নকল ক্লিক বা। লোড () কৌশলটি কোনও আইওএস ডিভাইসে অডিও স্বয়ংক্রিয়ভাবে চালানোর জন্য কাজ করবে না। আমি জানি যে একমাত্র বিকল্পটি হ'ল ব্যবহারকারী আসলে ক্লিক ক্লিক করে এবং ব্যতীত ইভেন্ট ইভেন্ট হ্যান্ডলারে প্লেব্যাক শুরু করে (Ajax, setTimeout, ইত্যাদি) কিছু অ্যাসিঙ্ক্রোনাস মধ্যে .play () কলের মোড়কে।
কেউ দয়া করে আমাকে বলুন যদি আমি ভুল করে থাকি। আমি সাম্প্রতিক আপডেটের আগে আইপ্যাড এবং আইফোন উভয়ের জন্য কাজ করেছিলাম এবং এগুলি সব বন্ধ হয়ে গেছে বলে মনে হচ্ছে।
<video>
4.2.1 সঙ্গে, আমি যাচাই করেছেন যে যতদিন .load()
তারপর .play()
একটি মধ্যে আসা সমলয় ক্লিক করুন / আলতো চাপুন হ্যান্ডলার, এটা কাজ করবে। অন্যথায়, এটি ব্যর্থ হয়।
আমি নিশ্চিত করেছি যে অডিওটি বর্ণিত হিসাবে কাজ করছে না (কমপক্ষে আইপ্যাডে 4.3.5 চলছে)। সুনির্দিষ্ট সমস্যাটি হ'ল অডিওটি একটি অ্যাসিঙ্ক্রোনাস পদ্ধতিতে (অজ্যাক্স, টাইমার ইভেন্ট, ইত্যাদি) লোড হবে না তবে এটি প্রিললোড হয়ে থাকলে এটি প্লে হবে। সমস্যাটি হচ্ছে লোডটি ব্যবহারকারী-ট্রিগার ইভেন্টে থাকতে হবে। সুতরাং আপনার যদি খেলতে শুরু করার জন্য ব্যবহারকারীর কাছে একটি বোতাম থাকতে পারে তবে আপনি এর মতো কিছু করতে পারেন:
function initSounds() {
window.sounds = new Object();
var sound = new Audio('assets/sounds/clap.mp3');
sound.load();
window.sounds['clap.mp3'] = sound;
}
তারপরে এটি খেলতে, যেমন একটি এজাক্স অনুরোধে, আপনি এটি করতে পারেন
function doSomething() {
$.post('testReply.php',function(data){
window.sounds['clap.mp3'].play();
});
}
সর্বাধিক সমাধান নয়, তবে এটি সাহায্য করতে পারে, বিশেষত অপরাধীকে জেনে রাখা অ-ব্যবহারকারী-ট্রিগার ইভেন্টে লোড ফাংশন।
সম্পাদনা করুন: আমি অ্যাপলের ব্যাখ্যাটি পেয়েছি এবং এটি আইওএস 4+- কে প্রভাবিত করে: http://developer.apple.com/library/safari/#docamentation/AudioVideo/Concepual/Using_HTML5_Audio_Video/Device-SpecificConsideferences/Divice-SpecificConsidetions.html
অডিও বা ভিডিও ট্যাগে .play () পদ্ধতির আগে। লোড () পদ্ধতিটি কল করার চেষ্টা করুন ... যা যথাক্রমে HTMLAudioElement বা HTMLVideoElement হবে। এটিই কেবল আমার জন্য আইপ্যাডে কাজ করবে!
ভিডিও বা অডিও ট্যাগগুলির জন্য অটোপ্লে আইপ্যাড বা আইফোনটিতে কাজ করে না। এটি ব্যবহারকারীদের ব্যান্ডউইথকে বাঁচাতে অ্যাপলের দ্বারা নির্ধারিত একটি বিধিনিষেধ।
আমার কাছে মনে হয়েছে যে এই প্রশ্নের উত্তরটি (কমপক্ষে এখন) পরিষ্কারভাবে সাফারি এইচটিএমএল 5 ডক্সে নথিভুক্ত করা হয়েছে :
সেলুলার নেটওয়ার্কগুলি ওভার ডাউনলোডের ব্যবহারকারীর নিয়ন্ত্রণ
আইওএস-এ সাফারিতে (আইপ্যাড সহ সমস্ত ডিভাইসের জন্য), যেখানে ব্যবহারকারী সেলুলার নেটওয়ার্কে থাকতে পারে এবং প্রতি ইউনিট ডেটা ইউনিট চার্জ করা যায়, প্রিললোড এবং অটোপ্লে অক্ষম থাকে। ব্যবহারকারী এটি শুরু না করা পর্যন্ত কোনও ডেটা লোড হয় না। এর অর্থ জাভাস্ক্রিপ্ট প্লে () এবং লোড () পদ্ধতিগুলি নিষ্ক্রিয় থাকে যতক্ষণ না ব্যবহারকারী প্লেব্যাক শুরু করে, যদি না প্লে () বা লোড () পদ্ধতিটি ব্যবহারকারী ক্রিয়া দ্বারা ট্রিগার না করা হয়। অন্য কথায়, একটি ব্যবহারকারী-চালিত প্লে বোতামটি কাজ করে, তবে একটি অন্লোড = "প্লে ()" ইভেন্টটি করে না।
এটি মুভিটি অভিনয় করে: <input type="button" value="Play" onClick="document.myMovie.play()">
এটি আইওএসে কিছুই করে না: <body onLoad="document.myMovie.play()">
আইওএস ৪.২ (ডেভ বিল্ড) এর অধীনে একটি দ্রুত প্রোটোটাইপ ওয়েব অ্যাপ্লিকেশন বিকাশ করার সময় এই বিষয়টি নিয়ে হতবাক হয়ে পড়েছেন। সমাধান আসলে বেশ সহজ। মনে রাখবেন যে আপনার এইচটিএমএল পৃষ্ঠাতে ইতিমধ্যে আপনি ট্যাগটি দেখতে পাচ্ছেন না, আপনাকে অবশ্যই ডকুমেন্টে গতিশীলভাবে inোকানো দরকার (নোট করুন এই উদাহরণটি কিছু অতিরিক্ত জাভাস্ক্রিপ্টের স্নোজ্জ্বলীর জন্য প্রোটোটাইপ 1.7 ব্যবহার করে):
this.soundFile = new Element("audio", {id: "audio-1", src: "audio-1.mp3", controls: ""});
document.body.appendChild(this.soundFile);
this.soundFile.load();
this.soundFile.play();
যেহেতু আপনি কোনও নিয়ামক সেট করেন নি, তাই এটি আড়াল করার জন্য / স্ক্রিনটিকে অফ-স্ক্রিনে রাখার জন্য সিএসএসের সাথে কোনও কৌশল করার দরকার নেই।
এটি নিখুঁতভাবে কাজ করে বলে মনে হচ্ছে।
অ্যাপল পুরোপুরি মানটিকে সমর্থন করে না, তবে একটি কার্যকারিতা রয়েছে। তাদের ন্যায্যতা সেলুলার নেটওয়ার্ক কনজেশন, কারণ আপনি এলোমেলো অডিও খেলতে পারে এমন পৃষ্ঠাগুলিতে অবতরণ করছেন। যখন কোনও ডিভাইস ওয়াইফাইতে চালিত হয় তখন সম্ভবত এই ধারাবাহিকতার জন্য এই আচরণটি পরিবর্তন হয় না। যাইহোক, এই পৃষ্ঠাগুলি সাধারণত যাইহোক খারাপ ধারণা। আপনি প্রতিটি ওয়েব পৃষ্ঠায় একটি সাউন্ডট্র্যাক রাখার চেষ্টা করা উচিত নয়। এটা ঠিক ভুল। :)
এইচটিএমএল 5 অডিওটি যদি এটি ব্যবহারকারীর ক্রিয়া ফলাফল হিসাবে শুরু করা হয় তবে প্লে হবে। কোনও পৃষ্ঠা লোড করা গণনা করে না। সুতরাং আপনার সমস্ত ওয়েব-ও-পৃষ্ঠার অ্যাপ্লিকেশন হতে আপনার ওয়েব অ্যাপ্লিকেশনটির পুনর্গঠন করা দরকার। অডিও বাজানো এমন একটি পৃষ্ঠা খোলে এমন লিঙ্কের পরিবর্তে, কোনও পৃষ্ঠা পরিবর্তন ছাড়াই আপনার বর্তমান লিঙ্কটিতে খেলতে সেই লিঙ্কটি প্রয়োজন। এই "ব্যবহারকারীর ইন্টারঅ্যাকশন" বিধিটি এইচটিএমএল 5 পদ্ধতিতে প্রযোজ্য যা আপনি অডিও বা ভিডিও উপাদানটিতে কল করতে পারেন। পৃষ্ঠাগুলির লোডে স্বয়ংক্রিয়ভাবে ফায়ার করা থাকলে কলগুলি কোনও প্রভাব ছাড়াই ফিরে আসে, তবে ইভেন্ট হ্যান্ডলারের কাছ থেকে কল পেলে তারা কাজ করে।
আমার সমাধানটি পূর্বের মেনুতে একটি বাস্তব স্পর্শ ইভেন্ট থেকে ট্রিগার। তারা অবশ্যই আপনাকে একটি নির্দিষ্ট প্লেয়ার ইন্টারফেস ব্যবহার করতে বাধ্য করবে না। আমার উদ্দেশ্যে, এটি ভাল কাজ করে। যদি আপনার ব্যবহারের জন্য কোনও বিদ্যমান ইন্টারফেস না থাকে তবে আফিক আপনি বুগ্রেড। আপনি ঝুঁকির ঘটনা বা কিছু চেষ্টা করতে পারেন ...
আপনি যদি অডিও উপাদান ব্যবহার করে তৈরি করেন:
var a = new Audio("my_audio_file.wav");
এবং এর suspend
মাধ্যমে ইভেন্ট শ্রোতাদের যুক্ত করুন:
a.addEventListener("suspend", function () {console.log('suspended')}, false);
এবং তারপরে ফাইলটি মোবাইল সাফারি (আইপ্যাড বা আইফোন) এ লোড করুন, আপনি বিকাশকারী কনসোলে 'সাসপেন্ড' থাকা অবস্থায় দেখতে পাবেন। এইচটিএমএল 5 অনুমান অনুসারে এর অর্থ, "ব্যবহারকারী এজেন্ট ইচ্ছাকৃতভাবে বর্তমানে মিডিয়া ডেটা আনছে না, তবে পুরো মিডিয়া সংস্থান ডাউনলোড করে না" "
পরবর্তী a.load () কল করা, "ক্যানপ্লে" ইভেন্টের জন্য পরীক্ষা করা এবং তারপরে a.play () ব্যবহার করা শব্দটিকে স্বয়ংক্রিয়ভাবে চালিত করার জন্য উপযুক্ত পদ্ধতির মতো বলে মনে হয়।
আইপ্যাড v.5.1.1 এ পরীক্ষিত jQuery এর সাথে কাজ করে
$('video').get(0).play();
আপনি পৃষ্ঠা থেকে ভিডিও উপাদান যুক্ত / অপসারণ করতে হবে।
আমি সমস্ত ইভেন্টের জন্য ইভেন্ট হ্যান্ডলার সংযুক্ত করে এটি পরিচালনা করেছি যার জন্য আপনাকে বডি অ্যালিমেন্টে অডিও ট্রিগার করার অনুমতি দেওয়া হয়েছে যা অটোপ্লে সহ কোনও এইচটিএমএল অডিও উপাদানগুলিকে একবার চালিয়ে দেয়।
var mobile = /iPad|iPhone|iPod|android/.test(navigator.userAgent) && !window.MSStream;
if (mobile) {
$('body').on('touchstart click doubleclick keydown', function() {
$("audio[autoplay='autoplay']").each(
function(){
this.play();
this.removeAttribute('autoplay');
});
});
}
এটি কাজ করে বলে মনে হচ্ছে:
<html>
<title>
iPad Sound Test - Auto Play
</title>
</head>
<body>
<audio id="audio" src="mp3test.mp3" controls="controls" loop="loop">
</audio>
<script type="text/javascript">
window.onload = function() {
var audioPlayer = document.getElementById("audio");
audioPlayer.load();
audioPlayer.play();
};
</script>
</body>
</html>
এটি এখানে কর্মে দেখুন: http://www.johncoles.co.uk/ipad/test/1.html (সংরক্ষণাগারভুক্ত)
আইওএস ৪.২ হিসাবে এটি আর কাজ করে না। দুঃখিত