브라우저에서 gstreamer의 스트림 재생

마리우스 락

웹 브라우저에서 gstreamer의 스트림을 재생하고 싶습니다.

RTP, WebRTC 및 SDP 파일을 가지고 놀았지만 VLC는 간단한 SDP로 스트리밍에 연결할 수 있었지만 브라우저는 그렇지 않았습니다. 나중에 WebRTC에는 문제를 복잡하게 만들고 내 목적에 필요하지 않은 보안 연결이 필요하다는 것을 이해했습니다. html5의 MSE ( Media Source Extension)를 우연히 발견 했는데 도움이 될 것 같지만 gstreamer가 올바른 데이터를 스트리밍하도록하고 나중에 MSE를 사용하여 재생하는 방법에 대한 포괄적 인 자습서 나 적절한 사양을 찾을 수 없습니다. . MSE를 사용할 때 대기 시간도 확실하지 않습니다.

그렇다면 브라우저에서 gstreamer의 스트림을 재생하는 방법이 있습니까? 감사.

마리우스 락

node webrtc project를 사용하여 gstreamer의 출력을 webrtc 호출과 결합 할 수있었습니다. gstreamer의 경우 gstreamer superficial 노드와 함께 사용할 수있는 프로젝트가 있습니다 . 따라서 기본적으로 노드 프로세스에서 gstremaer 프로세스를 실행해야합니다. 그러면 gstremaer의 출력을 제어 할 수 있습니다. 모든 gstreamer 프레임에는 프레임을 가져와 webrtc 호출로 보낼 수있는 콜백이 있습니다.

그런 다음 webrtc 호출을 구현해야합니다. 통화를 위해 몇 가지 신호 프로토콜이 필요합니다. 호출의 한쪽은 서버가되고 다른 쪽은 두 개의 브라우저가 아닌 클라이언트의 브라우저가됩니다. 그런 다음 gstreamer superficial의 프레임이 푸시되는 비디오 트랙이 생성됩니다.

const { RTCVideoSource } = require("wrtc").nonstandard;
const gstreamer = require("gstreamer-superficial");

const source = new RTCVideoSource();
// This is WebRTC video track which should be used with addTransceiver see below
const track = source.createTrack();

const frame = {
        width: 1920,
        height: 1080,
        data: null
};

const pipeline = new gstreamer.Pipeline("v4l2src ! videorate ! video/x-raw,format=YUY2,width=1920,height=1080,framerate=25/1 ! videoconvert ! video/x-raw,format=I420 ! appsink name=sink");
const appsink = pipeline.findChild("sink");
const pull = function() {
        appsink.pull(function(buf, caps) {
                if (buf) {
                        frame.data = new Uint8Array(buf);
                        try {
                                source.onFrame(frame);
                        } catch (e) {}
                        pull();
                } else if (!caps) {
                        console.log("PULL DROPPED");
                        setTimeout(pull, 500);
                }
        });
};

pipeline.play();
pull();

// Example:
const useTrack = SomeRTCPeerConnection => SomeRTCPeerConnection.addTransceiver(track, { direction: "sendonly" });

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

내 스마트폰의 브라우저에서 audio()를 재생할 수 있습니까?

브라우저에서 사이트 별 글꼴 재정의?

Android 5.1에서 HLS 라이브 스트림을 재생하는 MediaPlayer의 오류

브라우저의 데스크탑 알림 클릭 이벤트에서 Angular 6 라우팅으로 예기치 않은 동작이 발생 함

iOS의 HTML5 오디오 : 브라우저에서 재생

gstreamer에서 암호화 된 HLS 스트림을 재생하는 방법

Gstreamer는 한 번에 여러 스트림을 재생하지 않습니다.

gstreamer를 사용하여 재생하기 전에 rtsp 스트림 감지

Qt + GStreamer : 라이브 비디오 스트림을 재생하는 동안 스냅 샷을 찍는 방법

Chrome 브라우저에서 사용자 에이전트 스타일시트 CSS 재정의

Opera의 다른 스트림에서 라이브 Youtube를 재생할 수 없음-H264 지원 없음

Edge 브라우저의 Selenium 웹 드라이버 테스트에서 널 포인터 예외가 발생 함

HTML5 : Ubuntu의 마이크에서 스피커 스트림으로 재생

브라우저에서 몇 프레임 후 gstreamer webrtc h264 재생이 중지됨

IE 브라우저의 텍스트 필드에서 Selenium WebDriver 입력이 매우 느림

libstreaming에서 rtsp 스트림 재생

자바 스트림 : 스트림의 값에 따라 스트림에서 예외 발생

서비스 워커가 생성 한 브라우저에서 알림 취소

브라우저에서 MPEG-2 및 / 또는 H.264가 포함 된 MPEG-2 전송 스트림 재생

브라우저의 현재 위치에서 스크롤 거리 후 스크롤 감지

현재 브라우저의 소스 코드를 크롬 확장에 저장

세션에있는 경우에만 브라우저의 새 탭에서 PHP 재생 비디오 앵커 링크

Gstreamer를 사용하여 여러 오디오 스트림을 하나의 재생 사운드로 믹스

GStreamer-Raspberry에서 VLC-PC 로의 웹캠 스트림

iOS의 Safari에서 자바 스크립트 실행 중에 SyntaxError가 발생하지만 다른 장치 / 브라우저에서는 발생하지 않음

두 개의 원격 스트림을 동시에 재생하는 방법

두 개의 원격 스트림을 동시에 재생하는 방법

Chrome 및 Firefox에서 라이브 스트림 오디오 재생 문제

Safari 브라우저에서 알림 순간 형식의 날짜

TOP 리스트

  1. 1

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  2. 2

    상황에 맞는 메뉴 색상

  3. 3

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  4. 4

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  5. 5

    std :: regex의 일관성없는 동작

  6. 6

    Ionic 2 로더가 적시에 표시되지 않음

  7. 7

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  8. 8

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  9. 9

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  10. 10

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  11. 11

    SQL Server-현명한 데이터 문제 받기

  12. 12

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  13. 13

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  14. 14

    내 페이지 번호의 서식을 어떻게 지정합니까?

  15. 15

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  16. 16

    Quickly 프로그램과 함께 작동하도록 Eclipse를 어떻게 설정할 수 있습니까?

  17. 17

    인코더없이 Azure 미디어 서비스 비디오 트림

  18. 18

    WSL 및 Ubuntu, 초기화 파일 이동 방법

  19. 19

    OpenCV에서. C ++ 컴파일러는 간단한 테스트 프로그램을 컴파일 할 수 없습니다. Clang ++ 사용

  20. 20

    마우스 휠 JQuery 이벤트 핸들러에 대한 방향 가져 오기

  21. 21

    ViewModel에서 UI 요소를 비동 시적으로 업데이트하는 방법

뜨겁다태그

보관