2013-08-20 54 views
9

Tôi đang phát âm thanh từ máy chủ của mình bằng AVPlayer trong ứng dụng của mình. Bây giờ tôi muốn rằng khi nó hoàn toàn đệm âm thanh sau đó tôi có thể lưu dữ liệu đó trong ứng dụng để phát sau này. Vì vậy, bất kỳ hướng dẫn hoặc trợ giúp nào về cách truy cập dữ liệu đệm và lưu nó để sử dụng sau nàyLưu dữ liệu đệm của AVPlayer

+0

Tôi biết đây là câu hỏi cũ. Tuy nhiên, bạn có thể tìm câu trả lời ở đây: http://stackoverflow.com/questions/37611488/how-to-stream-a-video-with-avurlasset-and-save-to-disk-the-cached-data/37611489 # 37611489 –

Trả lời

-3

Tôi nghĩ vấn đề của bạn sẽ tương tự như tải xuống tệp âm thanh hoặc nhạc từ máy chủ và sau đó phát chúng trong ứng dụng của bạn. Dù sao nếu bạn muốn lưu âm thanh trong ứng dụng của bạn, nó sẽ không được tốt hơn để tải về nó và sau đó chơi nó? Anyways hãy kiểm tra những liên kết này

How to download audio files from a server into my iPhone application?

Download music file from server and save in my app

Hope họ giúp đỡ.

+0

thực sự tôi muốn phát âm thanh trước khi tải xuống hoàn toàn, tôi muốn nó phát khi tải xuống một phần tệp âm thanh –

+0

Tôi nhận được dữ liệu tiếp tục từ udp, vui lòng đề xuất cách phát tiếp tục như phát trực tuyến –

0

Bạn không thể truy cập bộ đệm của AVPlayer. Một số gợi ý: Bạn có thể đặt xem trước (các phiên bản âm thanh ngắn) của các tệp âm thanh trên máy chủ để người dùng có thể nghe bản xem trước trước khi tải xuống tệp âm thanh đầy đủ hoặc bạn có thể tìm kiếm trình phát âm thanh nguồn mở tùy chỉnh chúng sẽ cho phép bạn truy cập bộ đệm luồng. Chúc may mắn!

1

Dễ dàng thực hiện ... sử dụng cùng một url cho luồng âm thanh của bạn sử dụng NSURLConnection để lấy dữ liệu và lưu bằng NSFilehandler ... chỉ cần tự thực hiện khi phát trực tuyến âm thanh và lưu cùng lúc với mp3 ... tôi biết nếu bạn cần mẫu mã ...

+0

vâng, chắc chắn bạn có thể chia sẻ mã cho những người khác, tôi đã làm điều tương tự mà bạn vừa giải thích trong Câu trả lời và nó hoạt động tốt. –

+0

Chúng ta có thể vui lòng xem mẫu mã này không? Có thể là một ý chính trên Github? – user3344977

+0

Chúng ta có thể lấy mã mẫu này không? – inorganik

36

Bạn có thể cung cấp cho đại diện resourceLoader để kiểm soát quá trình tải tài nguyên từ AVPlayer rồi cung cấp dữ liệu đó và khi nào yêu cầu và khả dụng. Trình tải tài nguyên là thuộc tính trên AVURLAsset. Tôi đã ghi lại một giải pháp đầy đủ trên blog của tôi nhưng ý tưởng chính là chuyển giao thức URL của bạn thành một thứ gì đó tùy chỉnh để trình tải tài nguyên của AVURLAsset yêu cầu sự hỗ trợ của ứng dụng của bạn trong việc tải URL đó. Sau đó, khi bạn nhận được các cuộc gọi lại AVAssetResourceLoaderDelegate, hãy bắt đầu tải xuống tệp và cố gắng trả lời các yêu cầu đang chờ xử lý nhận được từ các cuộc gọi lại của người được ủy nhiệm đó và khi bạn có dữ liệu. Điều này sẽ cho phép tải/phát lại liên tục nội dung mà không phải chạy một máy chủ HTTP đầy đủ trong ứng dụng của bạn hoặc sử dụng các giải pháp phức tạp khác.

+0

Câu trả lời hay! Tôi đã đi xuống con đường của việc thiết lập một máy chủ http địa phương mà phần nào sẽ hoạt động như một proxy, nhưng giải pháp này có vẻ thanh lịch hơn. Chắc chắn sẽ cung cấp cho nó một thử. – quentinadam

+1

Mã trên blog của bạn hoạt động như một sự quyến rũ! – quentinadam

+0

Bạn có biết những thay đổi nào tôi phải thực hiện để làm việc này cho các tệp video không? Vì lý do nào đó, trạng thái của trình phát sẽ thay đổi thành thất bại. Tôi về cơ bản chỉ cần chèn một tập tin video thay vì mp3 và thêm một avplayerlayer. Quá trình tải xuống bắt đầu và mọi thứ đều ổn, nhưng trạng thái của người chơi thay đổi từ 0 (không xác định) thành 2 (thất bại) –

1

Nhóm nghiên cứu tại Calm đã mở nguồn thực thi của chúng tôi về vấn đề này. Nó có sẵn như là một CocoaPod. Nó được gọi là PersistentStreamPlayer.

Hoạt động như một trình nạp tài nguyên. Lợi ích lớn so với các triển khai khác là nó không yêu cầu dữ liệu nhị phân phải ở trong bộ nhớ tại bất kỳ điểm nào, vì vậy nó hỗ trợ các tệp lớn hơn.

tính năng bao gồm:

  • streaming của tập tin âm thanh, bắt đầu phát lại càng sớm càng dữ liệu đầu tiên có sẵn
  • cũng lưu dữ liệu xem trực tiếp tới một URL tập tin ngay sau khi đệm hoàn lộ timeBuffered, hữu ích cho hiển thị các thanh tiến trình đệm trong giao diện người dùng
  • xử lý việc khởi động lại tệp âm thanh sau khi các luồng bộ đệm (ví dụ:mạng chậm)
  • chơi đơn giản, tạm dừng và tiêu diệt các phương pháp (phá hủy xóa tất cả tài nguyên bộ nhớ)
  • không giữ dữ liệu tập tin âm thanh trong bộ nhớ, do đó nó hỗ trợ file lớn không phù hợp trong RAM

Bạn có thể tìm thấy ở đây: https://github.com/calmcom/PersistentStreamPlayer

+0

nó đề cập đến "Luồng âm thanh qua http và lưu dữ liệu vào tệp cục bộ trong khi lưu vào bộ đệm" nó có hoạt động cho video không? – Bonnie