2017-05-28 21 views
10

Tôi có một ứng dụng bằng cách sử dụng MediaPlayer hoạt động tốt khi tôi phát trực tiếp các tệp MP3 tải xuống. Tôi đã cố gắng sử dụng cùng một ứng dụng đó để truyền tải các tệp AAC tải xuống tiến trình. Và nó chơi các tập tin tốt. Những gì không hoạt động là khi tôi cố gắng bỏ qua trong luồng bằng cách sử dụng MediaPlayer.seekTo() với AAC. Điều này một lần nữa hoạt động tốt trong mp3. Đối với luồng AAC, nó chỉ khởi động lại ở mức 0.Làm cách nào để AAC có thể tìm kiếm qua luồng http bằng Android MediaPlayer?

Cảm giác của tôi là mã hóa có liên quan. Tệp AAC đó chưa được định cấu hình chính xác để phát trực tuyến.

Đây là kết quả từ công cụ MediaInfo:

Size: 2.3 MB 
Format: QuickTime/MPEG-4/Motion JPEG 2000 format 
Stream count: 2 
Duration: 00:05:02 
Bit rate: 64 kb/s 
Meta info: 
    album_artist: Red Hot Chili Peppers 
    album: The Getaway 
    minor_version: 512 
    encoder: Lavf57.41.100 
    title: Dark Necessities 
    major_brand: M4V 
    track: 2 
    disc: 1 
    compatible_brands: isomiso2avc1 
    artist: Red Hot Chili Peppers 
    copyright: 2016 Warner Bros. Records Inc. 
    genre: Alternative 

Stream 0 
Type: video 
Codec: h264 
Codec profile: High 10 
FourCC: avc1 
Duration: 00:00:00 
Width: 350 
Height: 350 
Sample aspect ratio: 1:1 
Display aspect ratio: 1:1 
Pixel format: yuv420p10le 
Frame rate: 90000 fps 
Meta info: 
    handler_name: VideoHandler 
    language: und 

Stream 1 
Type: audio 
Codec: aac 
FourCC: mp4a 
Duration: 00:05:02 
Bit rate: 64 kb/s 
Sample rate: 44100 Hz 
Sample format: s16 
Channel: 2 
Meta info: 
    handler_name: SoundHandler 
    language: und 

Bạn sẽ nhận thấy nó thực sự là một tập tin video với âm thanh AAC và không có video thực bao gồm. Nếu đó là trường hợp sau đó tôi thấy nó cần siêu dữ liệu hơn để biết được nơi để chơi khi tôi yêu cầu một phần của dòng có thể hoặc có thể không được tải. Ngoài ra video cần khung hình chính để biết nơi để chơi từ đó tôi tin rằng không có khung hình chính hoặc hộp 'gợi ý' được bao gồm trong luồng/tệp.

Tôi đã không có bất kỳ may mắn nào khi tìm thấy bất kỳ chi tiết thực sự nào về những gì còn thiếu hoặc nếu điều này là có thể hay không. Tôi đã thử nghiệm điều này trên các phiên bản khác và có vẻ như trước 5.0.2 nó hoạt động. Sau 5.0.2 nó không hoạt động. Tôi chưa tìm thấy bất kỳ chi tiết nào về những gì đã thay đổi trong phiên bản đó.

Vì vậy, đây có thể là sự cố mã hóa luồng không cho phép chúng tôi phát tệp này qua luồng tải xuống http (s) tiến bộ. Hoặc, nó có thể là một lỗi trong Android Media Player được tạo ra đôi khi khoảng 5.0.2 khung thời gian. Hoặc nó có thể là cả hai.

Tại sao tính năng này không hoạt động?

+0

Có cách nào để truyền phát đầu ra dưới dạng AAC thô (với tiêu đề ADTS) thay vì âm thanh chứa bên trong M4A/MP4 không? MP3 đang hoạt động vì bạn nhận được các khung hình MP3 (mỗi một vài triệu âm thanh) nên bạn chỉ cần bỏ qua các khung hình để tìm kiếm. AAC cũng là khung (nếu bạn không đặt bên trong container). Tôi không quá quen thuộc với Android SDK nhưng tôi chắc chắn bạn có thể gửi byte của khung đến bộ giải mã SDK. Tôi sẽ điều tra một số tùy chọn. –

+0

Tôi đã nhận được thông báo hỗn hợp về sự hỗ trợ của ADTS trong trình phát của Android nên tôi không chắc chắn nó có hoạt động hay không. Tôi mong muốn được nghe những gì bạn phát hiện ra. – chubbsondubs

+0

Bạn có liên kết luồng mẫu để kiểm tra không? –

Trả lời

1

Hãy thử với Exoplayer, nó là đơn giản như vậy

ExoPlayer có một số ưu điểm so với xây dựng trong MediaPlayer của Android:

  • Hỗ trợ cho động thích ứng streaming qua HTTP (DASH) và SmoothStreaming, không phải trong đó được hỗ trợ bởi MediaPlayer (nó cũng hỗ trợ HTTP Live Streaming (HLS), MP4, MP3, WebM, M4A, MPEG-TS và AAC).
  • Hỗ trợ các tính năng nâng cao của HLS, chẳng hạn như xử lý chính xác các thẻ # EXT-X-DISCONTINUITY.
  • Khả năng tùy chỉnh và mở rộng trình phát cho phù hợp với trường hợp sử dụng của bạn. ExoPlayer được thiết kế đặc biệt cho ý tưởng này và cho phép nhiều thành phần được thay thế bằng triển khai tùy chỉnh.
  • Dễ dàng cập nhật trình phát cùng với ứng dụng của bạn. Vì ExoPlayer là thư viện mà bạn bao gồm trong gói ứng dụng, bạn có quyền kiểm soát phiên bản bạn sử dụng và bạn có thể dễ dàng cập nhật lên phiên bản mới hơn như một phần của bản cập nhật ứng dụng thông thường.
+0

Đó là tùy chọn khác, nhưng tôi thực sự quan tâm đến câu trả lời về hỗ trợ phát trực tuyến AAC trong Android SDK. Tôi biết tôi có thể trích xuất mã hiện có của tôi và thử và thay thế nó bằng một cái gì đó, nhưng kinh doanh ma quỷ bạn biết cho ma quỷ bạn không thực sự không trả lời câu hỏi của tôi về phát trực tuyến. – chubbsondubs

+0

có, đó là giải pháp tùy chọn & thay thế để phát trực tuyến. Tôi xin lỗi về ý định của bạn. –

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