Phụ thuộc phần tử GStreamer: Làm cách nào để kết nối playbin với hlssink?


1

Tôi mới sử dụng GStreamer và tôi đã cố gắng xây dựng một số đường ống đơn giản bằng gst-launch-1.0. Tôi đang gặp khó khăn để tìm ra những yếu tố cần phải đi cùng nhau. Ví dụ: tôi muốn truyền phát video webm sang thẻ video HTML5 bên trong trình duyệt. Để mở và đọc tệp tôi nghĩ rằng tôi cần sử dụng playbin:

gst-launch-1.0 playbin uri=file:///home/ubuntu/g-streamer-lively/skyrim.webm ...

Sau đó, để làm cho tập tin có sẵn, tôi sử dụng hlssink:

! hlssink max-files=5  playlist-root=http://10.12.9.3/ location=/var/www/html/hlssink.webm

Sau đó, trong trình duyệt của tôi, tôi sử dụng thẻ video:

<video src="http://10.12.9.3/hlssink.webm" controls>

Vì vậy, đường ống này sẽ không bắt đầu và tôi gặp lỗi sau:

WARNING: erroneous pipeline: could not link playbin0 to hlssink0

Vì vậy, nó cho tôi biết tôi không thể liên kết hai yếu tố này. Tốt thôi, nhưng tôi phải tìm những yếu tố nào khác mà tôi cần đưa vào đường ống để làm việc này?

Cảm ơn trước.

Câu trả lời:


0

Tôi đoán bạn nên dừng lại và đọc một chút tài liệu hướng dẫn để hiểu cách thức hoạt động của nó. GStreamer là một khung để xây dựng một biểu đồ để xử lý dữ liệu. Bạn có thể tìm thấy hướng dẫn ở đây: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html

Playbin là một yếu tố đặc biệt (thùng) và nó sẽ lắp ráp một đường ống nội bộ cho bạn. Playbin sẽ không để lộ bất kỳ bảng liên kết nào vì nó được thiết kế để tạo ra một đường truyền phát lại đầy đủ, đó là lý do tại sao bạn không thể liên kết nó với hlssink.

Bạn có thể sử dụng các yếu tố khác để tạo đường ống để chuyển mã đầu vào webm của mình sang hlssink, ví dụ: bạn có thể sử dụng uridecodebin là một thùng khác sẽ tự động tạo đường dẫn giải mã cho bất kỳ phương tiện nào bạn sử dụng (miễn là bạn có plugin phù hợp cho nó ). Cái gì đó như:

gst-launch-1.0 uridecodebin uri=<youruri> name=decbin ! queue ! videoconvert ! x264enc ! tsmux name=muxer ! hlssink decbin. ! queue ! audioconvert ! faac ! muxer.

Tôi đã không kiểm tra nó, nhưng một cái gì đó tương tự sẽ hoạt động để chuyển đổi đầu vào của bạn thành mpegts bằng H264 và AAC, chẳng hạn, và truyền dữ liệu cho hlssink.

Để kiểm tra những yếu tố nào bạn có trên hệ thống của mình, hãy sử dụng công cụ gst-tests-1.0. Nó sẽ liệt kê tất cả các yếu tố nếu bạn không đưa ra một đối số hoặc cung cấp cho bạn thông tin chi tiết về một yếu tố cụ thể nếu bạn đưa ra một yếu tố, như:

gst-inspect-1.0 hlsssink

EDIT: sửa đường ống bạn đề xuất trong các bình luận

gst-launch-1.0 uridecodebin uri=file:///home/ubuntu/g-streamer-lively/skyrim.webm name=decbin ! queue ! videoconvert ! x264enc ! mpegtsmux name=muxer ! hlssink max-files=5 playlist-root=10.12.9.3 location=/var/www/html/hlssink decbin. ! queue ! audioconvert ! avenc_aac ! muxer.

Vì vậy, tôi đã đọc qua các tài liệu trước đây nhưng tôi vẫn có một thời gian khó khăn để tìm ra thứ tự của các yếu tố. Có lẽ vì tôi không có nền tảng về chỉnh sửa video / âm thanh nên tôi không thực sự hiểu quy trình. Nếu tôi chỉ muốn truyền phát tệp .webm, tại sao tôi phải làm những việc như videoconvert, x264enc, v.v. các tập tin thông qua một đường ống đơn giản?
Przemek Lach

Tôi đã cố gắng sử dụng đường ống của bạn và tôi đã phải thay đổi một vài điều: gst-launch-1.0 uridecodebin uri = file: ///home/ub Ubuntu / g-streamer-lively / skyrim.webm name = decbin! xếp hàng ! cầu truyền hình! x264enc! tên mpegtsmux = muxer! hlssink decbin. ! xếp hàng ! audioconvert! avenc_aac! muxer. ! hlssink max-files = 5 danh sách phát gốc = 10.12.9.3 vị trí = / var / www / html / hlssink.webm. Bây giờ khi tôi cố gắng bắt đầu, tôi gặp lỗi: CẢNH BÁO: đường ống bị lỗi: liên kết không có phần tử nguồn.
Przemek Lach

bạn không "di chuyển" một tập tin qua đường ống, nó sẽ được xử lý tại mỗi nút. Khi bạn sử dụng uridecodebin, nó sẽ giải mã và giải mã tập tin đầu vào của bạn, giả sử bạn có cả video và âm thanh, bạn sẽ nhận được 2 đầu ra từ nó. Mỗi cái sẽ được mã hóa lại với một định dạng mới để được chuyển sang mpegts thường là những gì được phục vụ qua giao thức HLS mà bạn muốn sử dụng.
thiagoss

Đường ống của bạn sai, có hai trường hợp hlssink được tạo và tôi không chắc bạn hiểu HLS là gì và cách thức hoạt động của các tham số bạn đang chọn. HLS sẽ tạo danh sách phát các tệp nhỏ để tải xuống và phát liên tục.
thiagoss

Hi cảm ơn đã chỉnh sửa. Tôi đã thử đường ống mới của bạn và tôi gặp lỗi sau: ERROR: từ phần tử / GstPipeline: pipe0 / avenc_aac: avenc_aac0: Codec là thử nghiệm, nhưng cài đặt không cho phép bộ mã hóa tạo ra chất lượng thử nghiệm. Tôi đã cố gắng tìm ra nơi tôi có thể đặt "chất lượng thử nghiệm" nhưng không thể tìm thấy nó. Tôi đang thiếu một lá cờ hay cái gì đó?
Przemek Lach
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.