FFMPEG 기반 node.js 비디오 스트리밍 테스트에 대한 자세한 설명
Jan 18, 2018 pm 01:10 PM이 글은 FFMPEG 비디오 스트리밍 테스트를 기반으로 한 NODEJS에 대한 자세한 설명을 주로 소개하고 있는데, 에디터가 꽤 괜찮다고 생각해서 지금부터 공유하고 참고용으로 올려보겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.
ffmpeg를 핵심으로 LAN에서 트랜스코딩을 수신하고 이를 인터넷에 푸시하는 클라이언트 소프트웨어를 패키징합니다. 이 기사에서는 스트리밍, 트랜스코딩, 스트리밍 및 간단한 재생 설정을 포함한 ffmpeg의 기본 기능만 사용합니다.
Workflow
원격 비디오 스트림을 가져옵니다. 비디오 스트림 형식은 rtsp
일반 재생 형식으로 변환합니다. rtmp
재생 포트로 푸시합니다. rtmp://푸시 끝 주소 , 사용자는 재생 소프트웨어를 사용하여 이 주소에 연결한 후 콘텐츠를 직접 재생할 수 있습니다
필수 도구 및 소프트웨어
1.ffmpeg 명령줄 도구 공식 웹사이트 링크, 선택 시 이점은 다음과 같습니다.
free
설치가 필요하지 않아 사용자 작업 복잡성이 크게 줄어듭니다
명령줄 시작 호출
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 디자인 패턴은 코딩에 스트림을 사용합니다.
nodejs는 웹 사이트 크롤링 기능을 구현합니다.image_node.js
위 내용은 FFMPEG 기반 node.js 비디오 스트리밍 테스트에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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