2011-07-26 39 views
6

Tôi đã thực hiện một vài thử nghiệm với GStreamer bằng cách sử dụng tiện ích khởi chạy gst. Tuy nhiên, cuối cùng, mục tiêu là triển khai chức năng tương tự này trên ứng dụng của riêng tôi bằng cách sử dụng thư viện GStreamer.Gstreamer - Chuyển đổi dòng lệnh gst-launch thành mã C

Vấn đề là cuối cùng khó khăn (ít nhất là đối với người không quen với API GStreamer) để "chuyển" những gì tôi kiểm tra trên dòng lệnh tới mã C/C++.

Một ví dụ về một lệnh mà tôi có thể cần đến cảng là:

gst-launch filesrc location="CLIP8.mp4" ! decodebin2 ! jpegenc ! multifilesink location="test%d.jpg" 

các "thẳng về phía trước" chiều/cách tiếp cận nhất để chỉ huy như vậy và viết nó trong C trên ứng dụng riêng của tôi là gì.

Ngoài ra, như một câu hỏi phụ, làm thế nào tôi có thể thay thế multifilesink với khả năng làm công việc này trên bộ nhớ (tôi đang sử dụng OpenCV để thực hiện một vài tính toán trên một hình ảnh nhất định sẽ được trích xuất từ ​​video). Có thể giải mã trực tiếp vào bộ nhớ và sử dụng nó ngay lập tức mà không cần lưu trước vào hệ thống tập tin không? Nó có thể (và nên) được tuần tự, tôi có nghĩa là sẽ chỉ chuyển sang khung tiếp theo sau khi tôi hoàn thành việc xử lý khung hiện tại để tôi không phải giữ hàng nghìn khung trong bộ nhớ.

Bạn nói gì?

Trả lời

10

Tôi đã tìm thấy giải pháp. Có một hàm được tích hợp trên GStreamer để phân tích các đối số khởi động gst và trả về một đường dẫn. Hàm này được gọi là gst_parse_launch và được ghi lại ở đây: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html

Tôi chưa thử nghiệm nhưng giải pháp nhanh nhất có thể chuyển đổi những gì đã được thử nghiệm trên dòng lệnh thành mã C/C++.

3

Bạn luôn có thể mở the source of gst-launch và lấy các bit phân tích cú pháp dòng lệnh và biến nó thành đường dẫn GStreamer.

Bằng cách đó bạn chỉ có thể chuyển vào "dòng lệnh" dưới dạng chuỗi và hàm sẽ trả lại một đường dẫn hoàn chỉnh cho bạn.

+0

Một khả năng thú vị. Mặc dù tôi muốn thực hiện một số bước đơn giản sau khi đọc một dòng lệnh để mã hóa đường ống tương đương trong C. Tôi chỉ hỏi điều này vì tài liệu GStreamer không phải là "nhà phát triển thân thiện nhất" xung quanh;) – petersaints

1

Bằng cách này, có một yếu tố GStreamer thú vị mà cung cấp một cách tốt để tích hợp một đường ống chế biến thành của bạn (C/C++) ứng dụng: appsink

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html

Với một cú này về cơ bản bạn có thể lấy các khung từ đường ống trong một mảng lớn C và làm bất cứ điều gì bạn muốn với chúng. Bạn thiết lập chức năng gọi lại, chức năng này sẽ được kích hoạt mỗi khi có một khung mới từ chuỗi đường ống ...

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