2013-08-05 37 views
5

Tôi đang làm việc trên một dự án sở thích mục tiêu là phát triển một ứng dụng Android có khả năng truyền trực tiếp nguồn cấp dữ liệu được ghi qua cam web trong cài đặt LAN bằng FFMpeg. Cho đến nay, tôi đã làm như sau - FFMpegPhát trực tiếp RTSP trên máy khách Android bằng cách sử dụng FFMpeg

A. Biên soạn và tạo ra các thư viện liên quan cho các phiên bản sau -

FFMpeg phiên bản: 2.0
phiên bản NDK: r8e & r9
phiên bản nền tảng Android: android-16 & android-18thisthisthisthis
toolchain phiên bản: 4.6 & 4,8
vBulletin xây dựng trên: Fedora 18 (x86_64)

B. Cre ating các tập tin Android.mk & Application.mk trong đường dẫn thích hợp.

Tuy nhiên, khi nó đến để viết mã nguồn gốc để truy cập vào chức năng thích hợp của FFMpeg từ lớp ứng dụng sử dụng Java, tôi bị mắc kẹt với những câu hỏi sau đây -

a) Mà tất cả các tính năng FFMpeg của tôi cần phải thực hiện có sẵn từ lớp ứng dụng gốc để phát trực tuyến nguồn cấp dữ liệu thời gian thực?
b) Để biên dịch FFMpeg cho Android, tôi theo liên kết this. Liệu các tùy chọn biên dịch có đủ để xử lý các luồng * .sdp hay tôi cần sửa đổi nó?
c) Tôi có cần sử dụng live555 không?

Tôi hoàn toàn mới phát triển ứng dụng FFMpeg và Android và đây sẽ là dự án nghiêm trọng đầu tiên của tôi cho nền tảng Android. Tôi đã được tìm kiếm hướng dẫn có liên quan đối phó với RTSP streaming bằng cách sử dụng FFMpeg trong một thời bây giờ mà không có nhiều thành công. Hơn nữa, tôi đã thử xây dựng phát triển mới nhất của máy nghe nhạc VLC và thấy nó là tuyệt vời cho việc truyền dữ liệu thời gian thực. Tuy nhiên, đó là một con quái vật phức tạp và mục tiêu cho dự án của tôi có tính chất khá hạn chế, chủ yếu là học tập - trong một khoảng thời gian ngắn.

Bạn có thể đề xuất một số con trỏ (ví dụ: liên kết, tài liệu hoặc mã mẫu) không? Làm thế nào tôi có thể viết mã gốc để sử dụng thư viện FFMpeg và sau đó sử dụng các chức năng đó từ lớp ứng dụng để truyền trực tuyến nguồn cấp dữ liệu thời gian thực? Hơn nữa, sẽ thực sự đánh giá cao nếu bạn có thể cho tôi biết loại kiến ​​thức cơ bản cần thiết cho dự án này từ một quan điểm chức năng (theo một ý nghĩa bất khả tri về ngôn ngữ).

+0

Tôi đang cố tạo trình phát rtsp có thể phát trực tuyến với thời gian trễ dưới 1 giây. có vẻ như bạn đã làm một số công việc bạn có thể xin vui lòng hướng dẫn tôi ở đây – user2934930

+0

Tôi muốn chơi và ghi lại dòng rtsp bằng cách sử dụng ffmpeg trong Android. Tôi không có kiến ​​thức tốt về ffmpeg –

Trả lời

0

Tôi đã ở trong một tình huống tương tự cách đây một thời gian (tôi muốn phát một đoạn mp3 từ một máy chủ RTMP) và nó cực kỳ bực bội. Tuy nhiên, tôi đã xoay xở để cạo một số mã thực sự đã làm những gì nó được cho là. Một số con trỏ:

  • Bạn không muốn để lộ API của ffmpeg vào mã Java của mình. Thay vào đó, hãy xem xét tạo các hàm trợ giúp như openRTSPStream(String url) và giữ các công cụ ffmpeg trong mã C/C++ của bạn. Tôi nói điều này bởi vì ffmpeg làm cho nặng sử dụng con trỏ và phân bổ bộ nhớ động sẽ làm cho nó là một nỗi đau để thử và sử dụng nó từ Java.

  • Tập lệnh bạn đã sử dụng để biên dịch thư viện sử dụng cờ --disable-everything cũng có nghĩa là tập lệnh có thể vô hiệu hóa hỗ trợ RTSP.Tôi khuyên bạn nên xóa cờ đó hoặc chạy tập lệnh configure với --list-protocol, --list-demuxer, --list-muxer, --list-encoder--list-decoder (hoặc điều gì đó dọc theo các dòng đó) để có ý tưởng về những gì bạn cần bật. Bạn cần phải ghi nhớ định dạng và mã hóa của video và âm thanh và những gì bạn sẽ giải mã nó.

  • Khi bạn đang đọc các gói từ luồng, mã gốc của bạn có thể gửi bộ đệm tới mã Java của bạn thông qua chức năng gọi lại để hiển thị bộ đệm dưới dạng video/âm thanh.

Dưới đây là một SO bài mà có thể bạn quan tâm: Record RTSP stream with FFmpeg libavformat

Hãy cho tôi biết nếu bạn cần một số mẫu mã hoặc làm rõ thêm.

+0

Xin lỗi vì trả lời muộn, các bạn. Cho đến nay, tôi đã có thể đọc các tập tin video được lưu trữ cục bộ và lưu nó theo từng khung hình bằng cách làm theo [hướng dẫn của Stephen Dranger] (http://dranger.com/ffmpeg/ffmpeg.html) và repo của Arash Shafiei cho [phiên bản cập nhật của nó ] (https://github.com/arashafiei/dranger-ffmpeg-tuto). Để hiển thị luồng âm thanh và video trên Android, tôi đang sử dụng SDL 2.0. Vì vậy, hiện đang bận rộn tích hợp FFMpeg & SDL cho mục đích của tôi. Đã qua sự kiện GitHub repo của Oliver Xorange cho [Trình phát video Android] (https://github.com/xorange), điều này có thể có sự quan tâm đối với những người đang tìm kiếm giải pháp. – rurtle

+0

Cảm ơn bạn đã cập nhật! Hãy cho tôi biết nếu bạn gặp khó khăn về một cái gì đó và chúng tôi có thể làm việc thông qua nó với nhau. –