웹 프론트엔드 JS 튜토리얼 FFMPEG 기반 node.js 비디오 스트리밍 테스트에 대한 자세한 설명

FFMPEG 기반 node.js 비디오 스트리밍 테스트에 대한 자세한 설명

Jan 18, 2018 pm 01:10 PM
ffmpeg javascript node.js

이 글은 FFMPEG 비디오 스트리밍 테스트를 기반으로 한 NODEJS에 대한 자세한 설명을 주로 소개하고 있는데, 에디터가 꽤 괜찮다고 생각해서 지금부터 공유하고 참고용으로 올려보겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

ffmpeg를 핵심으로 LAN에서 트랜스코딩을 수신하고 이를 인터넷에 푸시하는 클라이언트 소프트웨어를 패키징합니다. 이 기사에서는 스트리밍, 트랜스코딩, 스트리밍 및 간단한 재생 설정을 포함한 ffmpeg의 기본 기능만 사용합니다.

Workflow

  1. 원격 비디오 스트림을 가져옵니다. 비디오 스트림 형식은 rtsp

  2. 일반 재생 형식으로 변환합니다. rtmp

  3. 재생 포트로 푸시합니다. rtmp://푸시 끝 주소 , 사용자는 재생 소프트웨어를 사용하여 이 주소에 연결한 후 콘텐츠를 직접 재생할 수 있습니다

필수 도구 및 소프트웨어

1.ffmpeg 명령줄 도구 공식 웹사이트 링크, 선택 시 이점은 다음과 같습니다.

  1. free

  2. 설치가 필요하지 않아 사용자 작업 복잡성이 크게 줄어듭니다

  3. 명령줄 시작 호출

2 nodejs 버전 번호는 v6.11.3입니다. (실제 프로젝트에서는 Electron을 사용하지만 클라이언트에 패키징할 필요가 없다면 nodejs는 정상적으로 실행 가능합니다.)

3 tsc 버전 번호는 v2.6.1입니다. 해당 프로젝트는 TypeScript를 주요 작성 언어로 사용하고 있으며, JavaScript를 사용해도 문제가 없습니다.

tsc를 사용하는 경우 내장된 @type 도구를 사용하면 코딩 효율성이 크게 향상됩니다.

4.fluent-ffmpeg의 버전 번호는 v2.1.2입니다. 이 nodejs 패키지는 ffmpeg의 명령줄 호출 부분을 캡슐화하여 코드의 가독성을 높입니다. ffmpeg 명령줄 매뉴얼에 익숙하다면 이 패키지를 사용할 필요가 없습니다.


  npm install --save fluent-ffmpeg
  //使用js编码的用户,可以忽略下条命令
  npm install --save @types/fluent-ffmpeg
로그인 후 복사

VLC 재생 소프트웨어. 스트리밍, 트랜스코딩, 재생이 정상인지 모니터링하는 데 사용됩니다. 공식 홈페이지 링크

Implementation code


  const ffmpegPath = "./dist/ffmpegProgram/bin/ffmpeg.exe";
  const ffprobePath = "./dist/ffmpegProgram/bin/ffprobe.exe";
  const flvtoolPath = "./dist/ffmpegProgram/bin/ffplay.exe";

  export function startPushVideo():void{
    getCommands().then((commands:ffmpegPaths[])=>{
      for(let key in commands){
        let command = commands[key];
        //设置输入流地址
        let ffCommand = ffmpeg(command.inputPath)
        //设置输出流地址
        .output(command.outputPath)
        //因需要打包客户端软件,故而将ffmpeg打包进软件中
        //需设置各应用程序的对应路径
        //若仅在本机使用,可以跳过该步骤
        //设置环境变量,添加 PATH 即可
        .setFfmpegPath(ffmpegPath)
        .setFfprobePath(ffprobePath)
        .setFlvtoolPath(flvtoolPath)
        //为保证灵活性,非必须参数采用配置文件读取模式
        .size(command.size);
        for(let key in command.args){
          ffCommand.outputOption(command.args[key]);
        }
        ffCommand.on("start",(commandLine)=>{
          //commandLine 为实际上调用的命令行命令,拼接逻辑为
          //您的ffmpeg所在路径 -i inputOptions 您的拉流协议和路径 outputOptions 推送流协议和地址
          //ffmpeg -i "rtsp://yourPullUrl" -f flv -r 25 -s 640x480 -an "rtmp://yourPushUrl"
          console.log('[' + showTime() + '] Vedio is Pushing !');
          console.log('[' + showTime() + '] Spawned Ffmpeg with command !');
          console.log('[' + showTime() + '] Command: ' + commandLine);
        })
        .on('error', function(err, stdout, stderr) {
          console.log('error: ' + err.message);
          console.log('stdout: ' + stdout);
          console.log('stderr: ' + stderr);
        })
        .on('end', function() {
          console.log('[' + showTime() + '] Vedio Pushing is Finished !');
        })
        .run();
      }
    },(error)=>{
      console.log('error: ' + error);
    })
  }
로그인 후 복사

Summary

"start"를 듣고 얻은 명령은 exec(yourCommandLine)을 통해서도 호출할 수 있지만 ffmpeg의 실행 결과는 ffmpeg에서 제어할 수 없습니다. 이번에는. 프로그램이 종료된 후에도 스트림이 오류를 보고하거나 프로세스가 수동으로 중지될 때까지 ffmpeg 프로세스는 계속 실행됩니다. Fluent-ffmpeg가 온톨로지 프로세스가 종료된 후 타사 프로세스에 종료되도록 알릴 수 있는 이유는 아직 명확하지 않습니다. 명령줄 입력을 통해 프로세스가 차단되는 것으로 추측됩니다. ChildProcess.kill()만 사용하면 타사 프로세스를 종료할 수 없습니다.

I5 8G 시스템에서 실행되는 단일 스트림 푸시는 CPU의 약 35%를 차지합니다. 멀티 스트림 푸시에는 다른 솔루션이 필요합니다.

관련 권장 사항:

Node.js 디자인 패턴은 코딩에 스트림을 사용합니다.

Node.js 비동기 흐름 제어

nodejs는 웹 사이트 크롤링 기능을 구현합니다.image_node.js

위 내용은 FFMPEG 기반 node.js 비디오 스트리밍 테스트에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 Dec 17, 2023 pm 02:54 PM

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 Dec 17, 2023 pm 05:30 PM

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 Dec 17, 2023 am 09:39 AM

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법

서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까? 서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까? Mar 28, 2024 pm 02:39 PM

서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까?

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 Dec 17, 2023 pm 12:09 PM

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 Jan 05, 2024 pm 06:08 PM

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 Dec 17, 2023 pm 05:13 PM

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축

PHP FFmpeg 확장 설치 가이드: 따라하기 쉬운 튜토리얼 PHP FFmpeg 확장 설치 가이드: 따라하기 쉬운 튜토리얼 Mar 28, 2024 pm 02:17 PM

PHP FFmpeg 확장 설치 가이드: 따라하기 쉬운 튜토리얼

See all articles