2012-11-07 69 views
11

Trước khi tôi nhận được Flamed đến chết, tôi biết điều này hiện không làm việc vì những lo ngại của Apple so với chi phí đáng sợ cho người dùng của họ tải về một tập tin âm thanh tự động (không có gì để làm với họ cố gắng để làm tê liệt web ứng dụng khi họ không nhận được 30% từ họ).Autoplay âm thanh trên safari di động

Tuy nhiên, câu hỏi của tôi là: Có ai tìm thấy cách giải quyết xảo quyệt chưa? Tôi chỉ muốn phát âm thanh khởi động khi khởi chạy trò chơi và hiện tại phải đợi người dùng nhấp vào một nơi nào đó trước khi tôi có thể phát âm thanh. Một trong số các chaps thông minh của bạn phải làm việc này ngay bây giờ?

+1

Tôi đang tìm cách làm điều gì đó tương tự cách đây vài tuần và tìm kiếm của tôi không kết quả ... – boz

+0

Tôi đã giải quyết vấn đề này cho đến chết và không tìm thấy bất kỳ điều gì hữu ích. Xin vui lòng Stackoverflow, bạn là hy vọng duy nhất của tôi ... –

+0

Tôi nhận được một giải pháp cho Firefox và Chrome bằng cách sử dụng 'AudioContext', nhưng tôi đã không thử trên Safari (vui lòng xác nhận xem nó hoạt động nếu bạn có Safari di động). Xem câu trả lời của tôi về câu hỏi tương tự https://stackoverflow.com/a/46485784/2342518 [Hãy hy vọng @boz là người cuối cùng tìm kiếm không kết quả từ bây giờ trên ☺] – Xenos

Trả lời

6

Không có cơ hội để tự động phát hoạt động trong trình duyệt trên thiết bị di động. Android và iOS không cho phép nó và cá nhân tôi nghĩ rằng đó là một sự giam cầm khả thi! Hãy tưởng tượng mỗi trang web thứ hai bạn sẽ mở các vở kịch và âm thanh xấu xí khi bắt đầu!

Nhưng bạn có thể làm cho một ít hack, do đó người dùng sẽ không nhận xét rằng ông hiện bắt đầu âm thanh cho các ứng dụng của bạn:

  1. Bạn sẽ cần một sự tương tác người sử dụng để bắt đầu âm thanh của bạn. Vì vậy, ứng dụng hoặc trò chơi của bạn có thể có màn hình bắt đầu hoặc nút chào mừng cần nhấp chuột để vào menu chính hoặc bắt đầu trò chơi. Liên kết với sự kiện nhấp đó và gọi phương thức load() cho số <audio> của bạn.

  2. Liên kết với sự kiện "có thể phát" của <audio>. Sự kiện này được kích hoạt khi nguồn của bạn sẵn sàng phát. Tại đây bạn có thể gọi play(), tạm dừng() hoặc chờ các tương tác khác. Vì vậy, âm thanh đã sẵn sàng nhưng bây giờ bạn có toàn quyền kiểm soát khi nào để bắt đầu hoặc dừng âm thanh.

  3. Tôi cũng khuyên bạn nên sử dụng sprites âm thanh trên máy khách di động. iOS (và Android?) đã hỗ trợ âm thanh trong nội bộ thông qua Singleton. Điều đó có nghĩa là bạn không thể, như trong trình duyệt máy tính để bàn, có 10 yếu tố âm thanh và phát âm thanh cùng một lúc. Bạn chỉ có thể chơi một tập tin! Vì vậy, việc thay đổi nguồn cho các âm thanh khác nhau sẽ mất nhiều thời gian. Với một sprite âm thanh, bạn có thể bắt đầu sprites của bạn khi người dùng tương tác đầu tiên với trang web hoặc trò chơi của bạn. Tạm dừng sprite của bạn và khi bạn cần phát âm thanh, bạn phải đặt currentTime ở đầu sprite và tạm dừng sprite khi currentTime của tập tin của bạn đạt đến cuối sprite của bạn. Có một sự kiện timeupdate, nơi bạn có thể kiểm tra CurrentTime của sprite của bạn.

Nếu bạn quan tâm hơn, tôi có thể chuẩn bị trình phát âm thanh nổi javascript của bạn !!

+0

Cảm ơn bạn đã trả lời, tiếc là trò chơi của chúng tôi phải bắt đầu mà không có tương tác người dùng bổ sung để 'hack' của bạn sẽ không hoạt động đối với chúng tôi. Tôi sẽ cung cấp cho bạn câu trả lời đúng vì có vẻ như không có giải pháp nào khác ngay bây giờ ... –

+0

Có một cơ hội sử dụng 'AudioContext'; xem câu trả lời của tôi https://stackoverflow.com/a/46485784/2342518 – Xenos

+0

Bạn có biết tôi có thể tải nhiều phần tử âm thanh khác nhau khi người dùng nhấp vào nút không? –

2

Chỉ có giải pháp mà tôi đã thấy cho đến nay là tạo ứng dụng vỏ và đặt ứng dụng web bên trong UIWebView.

http://flowz.com/2011/03/apple-disabled-audiovideo-playback-in-html5/

UIWebView.allowsInlineMediaPlayback = YES; 
UIWebView.mediaPlaybackRequiresUserAction = NO; 

Tôi cũng thực sự muốn biết làm thế nào để làm điều này trong một ứng dụng web đơn giản tuổi.

+0

Thật không may, toàn bộ quan điểm của chúng tôi làm cho các phiên bản HTML5 của danh mục đầu tư hiện tại của chúng tôi là họ nên là thiết bị bất khả tri. Gói nó trong một UIWebView có nghĩa là iOS chỉ :-( Cảm ơn bạn đã trả lời ... –

0

Tôi tin rằng tôi vừa giải quyết vấn đề này cho ứng dụng của riêng mình.

Các bước,

điều khiển tải lên,

Sau đó ....trong chế độ xemDidLoad

chế độ xem web của bạn tải HTML: loadHTMLString: htmlFile baseURL: [self getBasePath]];

THEN ... đặt phương tiệnPlaybackRequiresUserAction = NO trên webview.

Nếu bạn đặt quá sớm, tôi cho rằng tải cho html sẽ đặt lại.

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