300x250
반응형

일을 하거나 혹은 과제 중에 급하게 내가 한 로직이 맞거나 기본적인 테스트를 위한 도구이다.

보통 테스트를 하려면 다시 프로그램을 실행시켜서 이래저래 빌드도 해야 하고 경우에 따라서 불편한 경우다 많다.

그 때 온라인에서 바로 간단하게 테스트를 할 수 있는 사이트를 소개 하려고 한다.

 

사이트 명은 : GDB Online Debugger

본인은 주로 C혹은 C++를 사용을 하는데 매우 유용 하다.

www.onlinegdb.com

 

GDB online Debugger | Compiler - Code, Compile, Run, Debug online C, C++

Online GDB is online compiler and debugger for C/C++. You can compile, run and debug code with gdb online. Using gcc/g++ as compiler and gdb as debugger. Currently C and C++ languages are supported.

www.onlinegdb.com

원하는 언어를 선택 하여 간단하게 테스트를 진행 할 수 있다.

728x90
300x250
반응형

TeraTerm을 설치 후 SSH or UART 시리얼 연결을 통해 

명령어등등을 사용 할 때가 있는데, backspace 대신에 delete를 사용 해서 사용 하는 경우가 있다.

이 때 우리가 기본적으로 아는 Delete key동작을 안하고 backspace 동작을 하는 경우가 있다.

초기 설정 값 문제로.

TERATERM.ini 파일을 수정 하면 해결 할 수가 있다.

 

방법 소개.

1. Open TERATERM.ini

2. DeleteKey = on - > off 변경.

3. TERATERM 재시작.

 

끝.

 

728x90

'프로그래밍 > ETC' 카테고리의 다른 글

온라인 코딩 테스트 사이트  (0) 2021.04.11
[FFMPEG] ffmpeg option cmd정리  (0) 2020.12.17
Wowza cloud Streaming 설정 및 재생 방법  (0) 2020.12.17
300x250
반응형

업무에서 ffmpeg를 사용 하여야 해서 사용한 옵션 및 해당 명령어의 결과 내용을 정리(마구잡이...)

 

 

rtmp 스트림 전송 : ffmpeg -hwaccel dxva2 -re -i D:\DSB_WORK\streams/Sen.mp4 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmp://localhost/live/Sen  (하드웨어 가속기를 사용 하면 속도가 조금 더 빨라지지만 느림.)

 

샘플 명령어 : ffmpeg -s 7680x3072 -pix_fmt yuv420p10le -i input.yuv -vf trim=start_frame=0:end_frame=120 -filter:v "crop=3840:3072:0:0" -c:a copy output.yuv

 

JPG 테스트 명령어 : ffmpeg -s 3840x2160 -pix_fmt yuv420p10le -i D:\DSB_WORK\Encoder\FFMPEG\test/flower.jpg -vf trim=start_frame=0:end_frame=120 -filter:v "crop=1920:1080:0:0" -c:a copy D:\DSB_WORK\Encoder\FFMPEG\test/out_flower.jpg

 

mp4 테스트 명령어 : ffmpeg -i D:\DSB_WORK\streams/Sen.mp4 -filter:v "crop=1920:1080:0:1080" -c:a copy D:\DSB_WORK\Encoder\FFMPEG\test/out_Sen2.mp4

 

잘린 영상 합치기

: ffmpeg -i out_Sen.mp4 -vf "[in] pad=iw:2*ih [top]; movie=out_Sen2.mp4 [bottom]; [top][bottom] overlay=0:main_h/2 [out]" -y D:\DSB_WORK\Encoder\FFMPEG\test/out_merge_Sen.mp4

 

: ffmpeg -video_size 960x540 -i out_sen1.yuv -vf "[in] pad=iw:2*ih [top]; movie=out_sen2.yuv [bottom]; [top][bottom] overlay=0:main_h/2 [out]" -y out_left.yuv

 

: ffmpeg -video_size 960x540 -i out_sen1.yuv -video_size 960x540 -i out_sen2.yuv -video_size 960x540 -i out_sen3.yuv -filter_complex "[1:v][0:v]scale2ref=oh*mdar:ih[1v][0v];[2:v][0v]scale2ref=oh*mdar:ih[2v][0v];[0v][1v][2v]hstack=3,scale='2*trunc(iw/2)':'2*trunc(ih/2)'" final.mp4   (3개의 영상 슬라이더 형태로)

 

: ffmpeg -video_size 960x540 -i out_sen1.yuv -video_size 960x540 -i out_sen2.yuv -video_size 960x540 -i out_sen3.yuv -video_size 960x540 -i out_sen4.yuv -filter_complex "[1:v][0:v]scale2ref=oh*mdar:ih[1v][0v]; [2:v][0v]scale2ref=oh*mdar:ih[2v][0v]; [3:v][0v]scale2ref=oh*mdar:ih[3v][0v]; [0v][1v][2v][3v]hstack=4,scale='2*trunc(iw/2)':'2*trunc(ih/2)'" out.yuv (4개의 영상 슬라이더 형태로)

 

: ffmpeg -video_size 960x540 -i out_sen1.yuv -video_size 960x540 -i out_sen2.yuv -video_size 960x540 -i out_sen3.yuv -video_size 960x540 -i out_sen4.yuv -filter_complex "[0:v][2:v]hstack=inputs=2[top];[1:v][3:v]hstack=inputs=2[bottom];[top][bottom]vstack=inputs=2[v]" -map "[v]" output.yuv ( 4개의 영상을 2x2 top/bottom처리 합치기 )

 

하드웨어 가속기 사용 영상 자르기

ffmpeg -hwaccel cuvid -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -c:v h264_nvenc D:\DSB_WORK\Encoder\FFMPEG\test/hw_out_Sen.mp4  (동작됨)

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i D:\DSB_WORK\streams/Sen.mp4 -c:v h264_nvenc -filter:v "crop=1920:1080:0:0" -c:a copy D:\DSB_WORK\Encoder\FFMPEG\test/hw_out_Sen.mp4

 

rawvideo 재생. ffplay -s 1920x1080 -pixel_format yuvj420p -framerate 23.98 -i dump.yuv

rawvideo 다운. ffmpeg -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -pix_fmt yuvj420p -f rawvideo dump.yuv

리다리엑션 덤프 . ffmpeg -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -pix_fmt yuvj420p -f rawvideo - > dump.yuv

덤프받은 영상 재생. ffplay -pixel_format yuvj420p -video_size 192x108 -framerate 24 dump.yuv

 

crop 미리보기 ( 하드웨어가속기 사용 ) ffplay -vcodec h264_cuvid -vf crop=1920:1080:0:0 D:\DSB_WORK\streams/Sen.mp4

 

ffmpeg -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -pix_fmt yuvj420p -f rawvideo > ffplay -s 1920x1080 -pixel_format yuvj420p -framerate 23.98

 

더 테스트해볼 것. ffmpeg -hwaccel_output_format cuda -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -c copy -f mpegts - | ffplay -fs -

 

* ex) text.mp4 gpu crop format yuvj420 rawvideo data를 바로 ffplay로 재생하는 방법?

 

* 네임드파이프 전송 및 재생.

ffmpeg -c:v h264_cuvid -crop 540x1080x960x1920 -i D:\\DSB_WORK\\streams\\Sen.mp4 -y -c copy -f mpegts pipe:\\.\pipe\out_1 | ffplay -i pipe:\\.\pipe\out_1

 

 

-s 화면 크기 지정 (WxH 또는 비율)

-pix_fmt 픽셀 포멧 설정. list는 지원되는 모든 픽셀 포멧 보여줌.

-i input파일.

-vf

-filter:v

-crop 잘라내는 크기.

( 보통 -croptop, -cropbottom 형태로 상단,하단,,오 설정하여 크기 지정한다.)

( 현재 crop crop=width_to_crop:height_to_crop:top_left_x:top_left_y )

-> 첫번째:자를영역의 너비,

-> 두번째:자를영역의 높이,

-> 세번째:자르기를 시작할 좌상단 x좌표

-> 네번째:자르기를 시작할 좌상단 y좌표

-c:a 복사.

728x90
300x250
반응형

FFMPEG을 활용하여 rmpt프로토콜를 사용해 스트림을 실시간 재생하는 일이 생겼다.

그래서 맨 처음 Nginx을 활용하여서 live 및 vod를 구성 하여 테스트를 하였는데. 와우자 클라우드를 사용하여 ffmpeg으로 실시간 디코딩을 할 일이 생겨서 정리를 해보았다.

 

설정하기전 와우자 로그인 부터 클라우드 부분 진입까지는 숙지 했다는 가정하에 정리를 하였다.

 

1. 라이브 스트림 추가.

최 상단에 Live Streams라는 탭을 클릭.

 

 

2. 설정 방법1 (Live Stream Setup)

그림에 표시 된 순서되로 작업.

 

3. 설정방법2-1 ( Video Source and Transcoder Settings)

RTMP Protocol를 사용.

 

4. 설정방법2-2 ( Video Source and Transcoder Settings)

추가적으로 원하는 부분은 옵션을 더 선택 해줘도 됨.

5. 설정방법3  (Playback Settings)

 

6. 설정방법4 ( Hosted Page Settings )

해당 선택 부분은 Play하는 페이지에 표시될 내용이다.

 

7. 설정방법5 (Review Settings)

지금까지 설정한 내용을 보는 부분이고 부족하거나 잘못된 부분은 수정이 가능 함.

 

8. 설정이 완료 된 페이지의 Overview

 

1. 실행방법(1) (Local -> Wowza Cloud로 스트림 실시간 전송)

  FFMPEG동작은 윈도우10에서 CMD창에서 동작 하였음. (ffmpeg에 사용된 옵션은 무시 해도 됨.)

  FFMPEG에 따라서CUDA옵션등은 사용 못하는 경우가 있음. 이럴 경우 ffmpeg소스를 다운받아 옵션 적용 후 재설치 하면 된다.

자세한 내용은 ffmpeg홈페이지 참조.

 또한 해당 이미지에 보면 별도의 nginx와 다르게 stream name은 자동으로 생성이 된다. 대략 헤쉬값이라고 치자.

 

 

실행방법(2) (Wowza cloud에서 확인)

 

실행방법(3) (Local에서 Wowza Cloud Stream확인)

 

실제 와우자 클라우드에서 전송되는 스트림을 ffmpeg을 이용하여 ffplay로 바로 재생하는 모습이다.

화질이 좋지 않은 이유는 옵션 문제이며 옵션 설정만 제대로 해주면 문제 없이 화질 개선이 가능하다.

 

 

Trouble shoot

 Wowza Cloud와 nginx를 사용 하였을 때 timestamp값의 차이가 발생 한다.

실시간 전송 중 wowza는 자체적으로 timestamp값을 초기화해서 보내 주는 것 같다.

그러나 nginx는 timestamp값이 실시간에 적용 되어 실기간 위치의 timestamp값이 적용 되는 것을 media info에서 확인을 하였는데 여러 영상의 동시 싱크를 맞출 때 wowza cloud는 문제가 timestamp로 인해 문제가 발생 된다.

이 부분은 wowza의 별도 옵션 처리가 가능 할 것으로 보이지만 구글링을 통해 시도 해보았을 때는 적용이 되지 않는 문제가 발생 하였다.

혹시 이 글을 보시는 분 중에 timestamp값을 해결 하셨다면 댓글 부탁 드립니다.

 

또한 와우자에서 ffmpeg으로 실시간 스트림 전송 말고, 바로 쉽게 확인을 할 수 있는 방법이 존재하는데.

wowza에서 제공되는 GoCoder를 활용하면 휴대폰으로 실시간으로 촬영하는 스트림을 와우자를 통해 재생 가능 하다.

 

728x90

'프로그래밍 > ETC' 카테고리의 다른 글

온라인 코딩 테스트 사이트  (0) 2021.04.11
[TeraTerm] Delete key동작 문제 수정.  (0) 2021.02.28
[FFMPEG] ffmpeg option cmd정리  (0) 2020.12.17

+ Recent posts