2011-10-22 41 views
6

Tôi đang có một ứng dụng web nhỏ, phát các bit âm thanh thực sự ngắn trên một vài nút. Nó nhắm mục tiêu rõ ràng Safari trên thiết bị di động trên iOS (iPad).Mobile Safari: Audio + cache manifest

Sau khi đọc ở đây và ở đâu đó về một số "thiếu sót" của âm thanh HTML5 trong ngữ cảnh này trên Safari di động và thử một vài "thủ thuật" và thủ thuật, tôi bị kẹt với một tình huống mà Safari có vẻ đơn giản (vì thiếu một từ tốt hơn) bị hỏng:

Tôi có thể phát âm thanh A (phải mất một thời gian dài để bắt đầu - tôi giả định nó giảm xuống [lần nữa]?) trên nhấp vào nút A. Sau đó, nhấp vào nút B sẽ ngay lập tức phát lại âm thanh A. Tương tự cho nút C. Trong một số trường hợp, nó sẽ phát âm thanh khác nhau, đôi khi thậm chí là âm thanh phù hợp. Nhưng chủ yếu là âm thanh A. Định dạng được sử dụng là .aiff, bây giờ là .m4a.

Sau khi viết một vài phiên bản nhỏ bản thân mình, tôi quyết định đi với thư viện Buzz để xử lý việc tải âm thanh/chơi/etc ..

Funnily đủ, bản demo của họ bao gồm một trò chơi, mà làm khá nhiều chính xác những gì Tôi cần kích hoạt cùng một hành vi bị lỗi. Tôi thậm chí đã kết thúc trong một tình huống mà bất kỳ trình phát âm thanh nào trong trình duyệt Safari trên thiết bị di động trong bất kỳ tab nào cũng sẽ phát ra một âm thanh nhất định trong trò chơi trình diễn Buzz (!).

Tôi đã hy vọng tệp kê khai bộ nhớ cache có thể giúp khắc phục các hạn chế tải trước của Apple và buộc ứng dụng phát âm thanh ngay sau khi nhấn nút ở chế độ ngoại tuyến. Nhưng sau khi xác nhận rằng toàn bộ ứng dụng đã được lưu vào bộ nhớ cache, tôi không thể phát/nghe thấy bất kỳ âm thanh nào trong chế độ ngoại tuyến.

Có ai quản lý để có được một cái gì đó như thế này để làm việc bằng cách nào đó? (- Có nhìn thấy làm thế nào Apple xử lý thứ nhất định, tôi không mong đợi nhiều phản ứng, mặc dù ...)


Cập nhật 1:

Ví dụ trong câu trả lời này làm cho tác dụng tương tự: How to synthesize audio using HTML5/Javascript on iPad


cập nhật 2:

Cập nhật iOS (và vì vậy Safari) dường như giải quyết lỗi âm thanh. Tuy nhiên, tệp kê khai bộ nhớ cache dường như không ảnh hưởng đến tệp âm thanh. Các tệp này hoàn toàn không có sẵn.

Sau khi xóa tệp kê khai bộ nhớ cache, ứng dụng hoạt động tốt, nhưng thêm nó vào "màn hình chính" và tải lại nó cũng ngăn không cho âm thanh phát.

Trả lời

7

Tôi ước tôi có thể cho bạn biết có một công thức kỳ diệu để đưa tất cả phương tiện html5 của bạn hoạt động hoàn hảo, nhưng không có. Hỗ trợ điện thoại di động cho âm thanh/video HTML5 khá kém ngay bây giờ; xa hơn nhiều so với người tiền nhiệm máy tính để bàn của nó. Để làm cho vấn đề tồi tệ hơn, mỗi nền tảng khác nhau xử lý nó một cách khác nhau và hầu hết trong số họ chỉ hỗ trợ nó trong các phiên bản bán gần đây.

Tuy nhiên, có một số thủ thuật bạn có thể sử dụng để tải tệp phương tiện hoạt động chính xác trong Safari trên thiết bị di động. Để giải thích cho họ, bạn sẽ cần phải hiểu một số thiếu sót của nó.


1) Bạn không thể tải nhiều âm thanh/tập tin video

của nó được kinh nghiệm của tôi mà trình duyệt sẽ chỉ tải một tập tin tại một thời điểm. Nếu bạn phát một tệp, hãy chuyển đến một tệp khác, sau đó quay lại và nó sẽ tải lại toàn bộ tệp đó. Và, mặc dù tôi đã không tự mình thử, tôi không tin rằng một tệp kê khai bộ nhớ cache sẽ giúp bạn ở đây.

Điều tôi phải làm là kết hợp tất cả các tệp âm thanh của mình thành một tệp âm thanh lớn. Sau đó, tùy thuộc vào bản nhạc nào được yêu cầu, tôi sẽ di chuyển vị trí phát đến vị trí bắt đầu thích hợp và phát bản nhạc đó. Sau đó, tôi sẽ sử dụng một setInterval để kiểm tra phát lại sau mỗi vài mili giây để xác định xem vị trí phát hiện tại có chạm vào cuối bản nhạc hay không. Một lần, tôi dừng lại. Pluis, tôi đã cho bản thân mình một vài giây (2-3) giữa mỗi ca khúc, chỉ trong trường hợp CPU của điện thoại đã được tải rất nhiều và kiểm tra nguồn cấp dữ liệu một chút quá muộn.

2) Bạn có thể không tự động chơi các file âm thanh/video

của Apple tích hợp trong công nghệ truyền thông thẻ HTML5 của họ hạn chế rằng những bài hát sẽ chỉ tải và chơi để đáp ứng với một sự kiện người dùng nhấp chuột. Bằng cách đó, các nhà phát triển không thể tự động phát các bản nhạc gây phiền nhiễu khi bạn truy cập trang web của họ.

Khi tôi đang sử dụng thẻ âm thanh/video, tôi đã cố gắng tạo quảng cáo đa phương tiện. Vì vậy, tôi đã nối âm thanh/bản nhạc của tôi tải lên sự kiện nhấp vào biểu ngữ, khi bạn nhấp vào biểu ngữ và mở rộng quảng cáo.

Điều tôi đề nghị bạn nên làm là bật một hộp đèn bật lên nhỏ, hỏi người dùng xem họ có muốn bật/tắt âm thanh không. Bạn có thể đính kèm các chức năng tải của mình vào sự kiện nhấp chuột của hộp bật lên đó, bất kể người dùng có bật hoặc tắt âm thanh hay không.

Cá nhân, tôi không có nhiều may mắn khi sử dụng hàm load(). Tôi sẽ chạy hàm đó để tải âm thanh và sau đó nhấp vào phát và nó sẽ tải lại nó. Nó có thể luôn luôn là tôi đã không làm điều đó đúng, vì vậy cảm thấy tự do để chứng minh cho tôi sai và nhận được rằng làm việc. Tôi đã nói gì với bài hát để chơi, như vậy nó sẽ bắt đầu tải, và sau đó tôi sẽ sử dụng một setInterval để xem thời gian chơi hiện tại có tăng lên chỉ vài phần nghìn giây hay không. Một khi tôi nhận thấy rằng nó bắt đầu chơi theo dõi, tôi ngay lập tức sẽ tạm dừng nó.

3) Thẻ âm thanh/video chỉ được hỗ trợ trong iOS 4.0 trở lên

Không có mẹo để giải quyết vấn đề này. Chỉ là sự thật.


Dưới đây là một vài trang web đã giúp khi khi tôi đã phát triển với các thẻ audio/video:

http://www.w3.org/wiki/HTML/Elements/video
http://dev.w3.org/html5/spec-author-view/video.html#media-elements

Chúc may mắn!

+0

Cảm ơn rất nhiều! Có rất nhiều lời khuyên tuyệt vời ở đây có vẻ như. Chắc chắn sẽ thử một vài thứ. – polarblau

+0

Một điều nữa bạn cần biết là không thể lưu trữ âm thanh hoặc video trên iOS. Ngay cả với appcache. – idbehold

+0

bạn có thể đưa ra một ví dụ về mã cho - di chuyển vị trí phát đến vị trí bắt đầu thích hợp không. Ngoài ra nếu bạn muốn phát bản nhạc trong 3 giây thì làm cách nào để dừng bản nhạc đó? – Jon

Các vấn đề liên quan