2009-05-17 34 views
5

Tôi đang làm việc trên máy chủ phát trực tuyến sẽ có khả năng phát quảng cáo nhắm mục tiêu. Về cơ bản, người nghe nghe cùng một bản nhạc, nhưng cứ 30 phút lại có một khối quảng cáo và mỗi người nghe đều có khối riêng của mình. Việc triển khai máy chủ phát trực tuyến như vậy đặt ra nhiều vấn đề khác nhau và câu hỏi này là về một trong số chúng.Làm cách nào để liên tục nối các luồng MP3?

Máy chủ sẽ hoạt động theo cách tương tự như Icecast, tức là máy chủ sẽ đọc luồng trên mạng từ một số trình tạo luồng và chuyển tiếp nó tới mọi người nghe. Khi đến lúc phát quảng cáo, máy chủ dừng tìm nạp luồng từ trình tạo, đọc quảng cáo từ tệp và chèn chúng vào bộ đệm của mỗi người nghe, truyền chúng và tiếp tục trên luồng chuyển tiếp từ trình tạo.

Khi máy chủ chuyển từ luồng chuyển tiếp sang quảng cáo phát sóng, nó phải nối hai luồng MP3 (chúng tôi phát sóng bằng MP3). Mối quan tâm của tôi là chỉ cần thêm một phần dữ liệu sau khi một dữ liệu khác có thể tạo ra một số tạo phẩm nghe được. Nó có thể được thực hiện liền mạch?

Tôi đã tìm ra điều này: - Tôi có thể làm cho máy chủ nhận biết các khung MP3 để tránh lỗi đồng bộ hóa. - Tôi đang suy nghĩ về việc thêm các khung MP3 từ tệp quảng cáo sau các khung MP3 từ luồng. - Vì quảng cáo được tải từ tệp MP3 được mã hóa chính xác, tôi phá vỡ sự cố của vùng chứa byte, vì khung đầu tiên từ tệp không thể sử dụng nó.

Nhưng mối quan tâm của tôi là cách MDCT hoạt động. Người nghe không biết máy chủ của tôi sẽ làm gì, vì vậy bộ giải mã MP3 của họ có thể tạo ra một số đồ tạo tác vì dữ liệu MDCT không chính xác sẽ được đặt cái khác trong luồng mà họ tải xuống. Sẽ không đệm ở đầu của tập tin với các quảng cáo bồi thường cho điều này?

Bạn có biết bất kỳ thư viện/công cụ nào (nguồn mở nếu có thể) có thể nối liền hai tệp MP3 mà không giải nén chúng?

Bạn có thể chỉ ra bất kỳ tài nguyên hay nào mô tả định dạng MP3 không? Tôi đã tìm kiếm trên Internet rất nhiều, tìm thấy rất nhiều thông tin, nhưng tôi vẫn nhớ bức tranh tổng thể.

Có thể bạn biết rằng điều này sẽ dễ dàng hơn nếu tôi sử dụng một codec khác như OGG/Vorbis, AAC?

PS. Câu hỏi này không trùng lặp với What is the best way to merge mp3 files?. mp3wrap và các công cụ như nhau không phải là một lựa chọn cho tôi.

Trả lời

0

Nếu bạn đang sử dụng Windows, API DirectShow của Microsoft có thể là cách để thực hiện. Bạn sẽ thấy rằng đó là khả năng làm những việc với âm thanh và video cả tĩnh và streaming, trong một loạt các định dạng (bạn chỉ cần codec cần thiết, và giao diện là hầu như giống nhau cho tất cả).

Nói điều này, DirectShow không may được thiết kế theo cách phức tạp khủng khiếp và có đường cong học tập dốc, nhưng sức mạnh mà nó cung cấp vô song nếu bạn định thực hiện thao tác âm thanh/video trên Windows. Tuy nhiên có một số lượng lớn các mẫu và hướng dẫn về cách sử dụng nó, vì vậy nó có thể không được như vậy đau đớn cuối cùng. Ngoài ra, nếu bạn đang sử dụng .NET Framework, có một gói được quản lý theo tên của DirectShow.NET. Nó sẽ không phải là một nhiệm vụ dễ dàng bất cứ điều gì bạn làm, trừ khi có một cái gì đó ra khỏi đó hơn là tôi không nhận thức được. Chúc may mắn với nó anyway!

+0

API như vậy có thể quá đắt tính toán. Các đài phát thanh tôi làm việc tại đã có 5k người dùng/máy chủ lưu lượng truy cập cao điểm. Ngay cả khi nó chỉ là một phần thứ hai của âm nhạc mà tôi phải xử lý cho mỗi người nghe, đó là hơn một giờ âm nhạc để giải nén/nén trong thời gian không ... – Jasiu

+0

Tôi không chắc chắn nó sẽ nhất thiết phải là ... bạn thực sự nên làm một số điều tra thêm về điều này, như DirectShow là * cách * để đi cho các công cụ truyền thông trên Windows. – Noldorin

2

Tôi tin rằng MP3 có thể được hợp nhất bằng cách ghép nối các tệp. Trong một số thử nghiệm nhanh (cat file1.mp3 file2.mp3 > merged.mp3; mplayer merged.mp3) có vẻ như nó hoạt động như mong đợi. Truyền trực tuyến từ máy chủ web có thể cũng sẽ hoạt động.

Bạn sẽ xử lý việc chuyển đổi tệp đầu vào hiện tại như thế nào? Bạn chỉ có thể coi quảng cáo là các bản nhạc ngắn để phát.

+0

Vâng, đó là cách tôi muốn đi, nhưng bạn có chắc chắn nó hoạt động và không có hoàn cảnh mà theo đó một trục trặc âm thanh sẽ được sản xuất? – Jasiu

+1

Hầu hết các tính năng này sẽ không hoạt động ... có nhiều định dạng mp3 ... Bạn có thể có tốc độ bit không đổi với một số kích thước khung hình không đổi (nhiều bit cho mỗi mẫu), hoặc tốc độ bit biến đổi mp3 biến động. .. chúng không tương thích. Cũng đơn giản là ghép nối sẽ đặt các thẻ tiêu đề và id3 ở giữa tệp, vì vậy các tệp phương tiện sẽ gặp sự cố khi phát tệp. Nếu bạn muốn làm điều này theo cách chính xác, bạn sẽ cần sử dụng phần mềm thực hiện việc này hoặc chuyển đổi cả hai tệp kiểm tra thành một định dạng duy nhất và sau đó nối các luồng âm thanh và lưu vào một tệp mới. – uzbones

+0

Giả sử tôi không có bất kỳ thẻ ID3 nào và tôi sử dụng tốc độ bit không đổi. – Jasiu

0

tôi tiếp cận một vấn đề rất giống nhau, và sau khi đặt câu hỏi ngay từ nguồn khác nhau đã đưa ra những điều sau đây ...

Bất kỳ bộ giải mã xứng đáng sẽ bỏ qua "xấu" dữ liệu cho đến khi nó chạm một tiêu đề khung hợp lệ. Đây là những gì ID3v2 dựa vào để tiêm thêm thông tin vào dữ liệu mp3. Tại máy chủ, tôi sẽ đi với phân tích các tệp MP3 nguồn để chỉ phục vụ các khung MP3 hợp lệ. Nếu bạn phục vụ một vài khung im lặng (khoảng 7 nên làm), bộ giải mã nên có thời gian để giải quyết trước khi tăng tốc cho tải tiếp theo (không liên kết) dữ liệu MP3, tránh các đồ tạo tác bạn (chính xác) giả định khi ghép các khung từ mã hóa khác nhau phiên.

Có nhiều vấn đề hơn là có thể chuyển đổi các thuộc tính MP3 (1/2 kênh, tỷ lệ mẫu đầu ra vv) giữa một khung sang khung tiếp theo. Một số bộ giải mã nhận được khá khó chịu khi đối mặt với một dòng như vậy, kết quả là phát lại tốc độ 1/2 và muốn. Vì vậy, bạn cần phải đảm bảo rằng tất cả các tài liệu nguồn của bạn được mã hóa thành các thuộc tính đầu ra tương tự nếu không bạn có thể bị unstuck.

Bạn có thể thấy điều này đã có, nhưng nếu không nói là:

http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=79&printer=t

0

Tôi không thấy lý do tại sao bạn sẽ muốn nối các tập tin. Tại sao bạn không sử dụng một số loại hệ thống danh sách chơi và chỉ cần thay đổi tập tin bạn gửi. Tôi nghĩ rằng điều này sẽ cho phép sự linh hoạt hơn trong thời gian dài, và bạn sẽ không kết thúc với các tập tin MP3 lớn.

+0

Tôi không chắc chắn nếu tôi hiểu những gì bạn đang nói, nhưng không thể thấy ý tưởng của bạn cho phép quảng cáo nhắm mục tiêu như thế nào. Đài phát thanh của tôi sử dụng giao thức SHOUTcast/Icy, có nhiều người chơi khác nhau, vì vậy tôi không thể làm bất cứ điều gì ở phía khách hàng. Tôi đang nói về các tập tin, bởi vì nó không quan trọng vì lợi ích của câu hỏi này, nhưng trong thực tế tôi sẽ sử dụng các dòng MP3 được tạo ra trên bay. – Jasiu

+0

Tất cả sẽ là phía máy chủ ... Về cơ bản, máy chủ sẽ coi quảng cáo là bài hát, ngoại trừ bạn sẽ luân phiên giữa các bài hát và quảng cáo. Tôi giả sử bạn không ghép nối tất cả các bài hát với nhau khi bạn đặt chúng vào luồng ... – uzbones

2

Bạn có thể ghép các tệp mp3 của cả hai định dạng CBR và VBR. Các tệp MP3 không có tiêu đề chính (bỏ qua ID3 và Xing). Dữ liệu âm thanh được lưu trữ dưới dạng các đoạn trong đó mỗi đoạn bao gồm tiêu đề của chính nó. Tiêu đề chứa thông tin cần thiết (tốc độ bit, tần số mẫu, âm thanh nổi, v.v.) để giải mã dữ liệu âm thanh trong đoạn đó.

Đây là một trong những lý do khiến việc xác định thời lượng của tệp mp3 rất khó.

Một cách khác để xem nó là, nếu bạn nối một tệp CBR MP3 với tệp VBR, kết quả cuối cùng giống với một tệp VBR dài với phần đầu tiên của Âm thanh với bitrate không đổi.

Vấn đề là một số trình phát MP3 có thể nghiêm ngặt và mong đợi tiêu đề Xing cho tệp MP3 VBR. Tuy nhiên, điều này không bao giờ là đặc điểm kỹ thuật cho định dạng MP3 nhưng bây giờ nó được giả định là đúng.

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