Youtube mp3 download


youtube-dl


이 툴을 사용하여 Youtube.com에 업로드 된 비디오 영상의 오디오를 추출하여 mp3 파일로 저장할 수 있다.

예제는 유튜브 재생목록을 다운받는다.


Installation

youtube-dl 설치 (wget 또는 curl)


1
2
curl -L https://yt-dl.org/downloads/latest/youtube-dl -/usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl
cs


ffmpeg 설치


1
2
3
4
5
6
7
cd /opt
curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
 
tar -xf ffmpeg-release-64bit-static.tar.xz
rm ffmpeg-release-64bit-static.tar.xz
 
ln -/opt/ffmpeg-[VERSION]/ff* /usr/bin
cs



Usage

유튜브 재생목록 url 리스트를 playlist 파일에 넣고 해당 파일을 지정해 준다.

1
youtube-dl --extract-audio --audio-format mp3 --batch-file="/full/path/to/playlist"
cs


플라스크 앱 디렉토리에 일반 아파치 웹 서버 처럼 DocumentRoot 경로에 파일을 업로드하고 요청을 시도하면 404 또는 500 에러를 응답 받는다.




flask 앱에서는 send_from_directory 모듈을 사용하여 일반 아파치 서버 처럼 파일을 업로드하고 다운로드 받을 수 있다.


1
2
3
4
5
6
7
from flask import send_from_directory
 
...
 
 @app.route('/file/<path:filename>', methods=['GET', 'POST'])
 def download(filename):
     return send_from_directory(directory='file', filename=filename)
cs


file 이라는 서브 디렉토리 생성 후, 해당 위치에 파일을 업로드하고, flask 앱 라우팅을 통해 해당 경로에서 파일을 다운로드 받을 수 있도록 설정하면 된다.

'Python' 카테고리의 다른 글

pipsi - pip script installer  (1) 2019.06.04
SSH with python3  (0) 2019.01.25
Flask on apache via mod_wsgi  (0) 2018.12.06
Python 2.6 to 2.7 (or 3.x)  (0) 2018.11.23
Django: 1. Start first application  (0) 2018.05.30

Flask on apache via mod_wsgi

Install Flask with python which you want


1
2
3
# python3.6 -m pip install --upgrade pip
 
# python3.6 -m pip install flask
cs


실행하려는 파이썬 버전의 pip 모듈로 flask를 설치 해야 apache에서 인식하고 flask 모듈들을 import 할 수 있다.

Install mod_wsgi for apache


1
2
3
# ./configure --with-apxs=/PATH_TO_APACHE/bin/apxs --with-python=/usr/local/bin/python3.6
 
# make && make install
cs


yum으로 설치하는 것 보다 python path를 제공해서 컴파일하고 설치하는 것을 권장한다. 버전에 맞는 mod_wsgi가 로드되어야 아파치에서 해당 모듈로 파이썬 어플리케이션을 문제 없이 실행 할 수 있다.

Configure httpd.conf or vhost.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
...
 
# Outside of VirtualHost
 
WSGISocketPrefix /var/www/flaskprj
 
<VirtualHost *:80>
 
        DocumentRoot /var/www/flaskprj
 
        ServerName flask.com
 
# Location for .wsgi file
 
WSGIScriptAlias / /var/www/flaskprj/flask_app.wsgi
 
WSGIDaemonProcess flask_app python-path=/usr/local/ threads=5
 
# Flask application name
 
WSGIProcessGroup flask_app
 
<Directory /var/www/flaskprj>
 
  WSGIApplicationGroup %{GLOBAL}
 
  Order deny,allow
 
  Allow from all
 
</Directory>
 
</VirtualHost>
cs


가상 호스트 설정 시에 wsgi 모듈과 관련된 지시어들을 최소한으로 지정한 내용이니 참고

Make .wsgi file


1
2
3
4
5
6
7
8
9
10
11
# vim APP_NAME.wsgi
 
import sys
 
# Flask application path
 
sys.path.insert(0,'/var/www/flaskprj')
 
# Should import as application
 
from APP_NAME import app as application
cs


wsgi 파일에서 아파치로 들어온 요청을 파이썬 어플리케이션으로 요청을 전달한다.

Link shared library for python

1
2
3
4
5
6
7
8
9
# vim /etc/ld.so.conf
 
# Add python library path
 
# /sbin/ldconfig -v
 
 
 
# service httpd restart
cs


If you want to trouble shoot with your work

I recommand http access log and error log


파이썬 라이브러리를 제대로 로드할  수 없을 때 설정

'Python' 카테고리의 다른 글

SSH with python3  (0) 2019.01.25
flask: download file from directory  (0) 2019.01.02
Python 2.6 to 2.7 (or 3.x)  (0) 2018.11.23
Django: 1. Start first application  (0) 2018.05.30
Django: 0. Preparing environment  (0) 2018.05.28

Python 2.6 to 2.7 (or 3.x)


Linux 배포판에는 기본적으로 2.6 버전의 파이썬이 설치되어 있다. 이 때, 파이썬 가상 환경을 이용하여, 독립된 환경의 파이썬 개발환경을(2.7 또는 3.x) 설정 할 수 있다.


ref: https://danieleriksson.net/2017/02/08/how-to-install-latest-python-on-centos/


# yum update


# yum groupinstall -y "development tools"


# yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel


# yum install -y wget


Python 2.7.14:

# wget http://python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz

# tar xf Python-2.7.14.tar.xz

# cd Python-2.7.14

# ./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

# make && make altinstall

 

Python 3.6.3:

#wget http://python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz

#tar xf Python-3.6.3.tar.xz

#cd Python-3.6.3

#./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

# make && make altinstall


altinstall을 사용하는 이유

일반적인 make install을 사용하는 경우, 하나의 시스템에 설치된 각 다른 버전의 파이썬들이 진단하거나 해결하기 어려운 문제를 일으킬 수 있기 때문이다.


Python 2.7.14:

# wget http://python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz

# tar xf Python-2.7.14.tar.xz

# cd Python-2.7.14

# ./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

# make && make altinstall


Python 3.6.3:

# wget http://python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz

# tar xf Python-3.6.3.tar.xz

# cd Python-3.6.3

# ./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

# make && make altinstall


virtualenv를 설치하여 분리된 파이썬 환경 설정

# pip2.7 install virtualenv

# virtualenv my27project

 

Python 3.6

# python3.6 -m venv my36project

 

파이썬 버전 확인

# python --version

'Python' 카테고리의 다른 글

flask: download file from directory  (0) 2019.01.02
Flask on apache via mod_wsgi  (0) 2018.12.06
Django: 1. Start first application  (0) 2018.05.30
Django: 0. Preparing environment  (0) 2018.05.28
파이썬 장단점  (0) 2018.05.24

nc (NetCat)


# nc -w [TIMEOUT_SEC] -v [HOST] [PORT] </dev/null; echo $?


or


Just check the HOST's PORT opened

# nc -vz [HOST] [PORT]


Result examples on RHEL 6


Success:

Connection to [HOST] [PORT] port [PROTOCOL] succeeded!

0



Failure:

nc: connect to [HOST] port [PORT] ([PROTOCOL]) timed out: Operation now in progress

1


RHEL 6 (nc):


# yum install nc


RHEL 7 (nmap-ncat):


# yum install nmap-ncat

'System Engineering > Network' 카테고리의 다른 글

Tool: MRTG  (0) 2018.08.28
Protocol: SNMP  (0) 2018.08.21
HTTP Header Sample Analysis - www.ebay.com  (0) 2018.07.24
HTTP Header Sample Analysis - www.amazon.com  (0) 2018.07.24
HTTP Header Sample Analysis - Google.com  (0) 2018.07.24

ab: Linux web test tool

ref: http://faq.hostway.co.kr/?mid=Linux_WEB&sort_index=readed_count&document_srl=1235&order_type=desc


Apache web server 등이 초당 얼마나 많은 요청을 처리할 수 있는지 측정하는 툴이다


Options


 -k

HTTP Keep-Alive 기능 사용 

-i 

GET 대신 HEAD 사용 

-n [REQUEST_COUNT] 

측정할 요청 수 지정 기본값 1

-t [TIME_LIMIT_SEC] 

측정할 시간 지정. 미지정시 세션에 대하여 50000개의 요청 자동 정의 

-c [SIMULTANEOUSLY_REQUEST_COUNT] 

동시 요청 수 지정. 기본값 1 

-p  [FILE]

POST 요청 및 파일 지정 

-A USER:PASS

사용자 인증

-p USER:PASS 

프록시 서버로의 인증 

-C COOKIE=VALUE 

요청에 쿠키 추가 

-H [HEADER] 

요청에 임의 헤더 추가 

 -T [CONTENT-TYPE]

POST 데이터의 content-type 헤더 지정 

-v 

출력 레벨 지정. 4: 결가괎 상단에 헤더 출력, 3: 결과 상단에 응답코드 출력, 2: 경고,정보 출력 

 -w

HTML table로 결과 출력 

-x <table [ATTRIBUTES]>

HTML <table>에 대한 속성 지정 

-y <tr [ATT]> 

<tr> 속성 지정 

-z <td [ATT]>

<td> 속성 지정 

-V 

버전 정보 출력 후 종료 

-h 

help 


Examples


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@LOCALHOST ~]# ab -n 100 -c 10 http://localhost/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking localhost (be patient).....done
 
 
Server Software:        Apache/2.2.15
Server Hostname:        localhost
Server Port:            80
 
Document Path:          /
Document Length:        4961 bytes
 
Concurrency Level:      10
Time taken for tests:   0.014 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      103
Total transferred:      531377 bytes
HTML transferred:       510983 bytes
Requests per second:    7204.09 [#/sec] (mean)
Time per request:       1.388 [ms] (mean)
Time per request:       0.139 [ms] (mean, across all concurrent requests)
Transfer rate:          37383.68 [Kbytes/sec] received
 
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:     0    1   0.4      1       2
Waiting:        0    1   0.4      1       2
Total:          1    1   0.3      1       2
 
Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      2
  95%      2
  98%      2
  99%      2
 100%      2 (longest request)
 
cs


'System Engineering > Linux' 카테고리의 다른 글

Check the disk type in linux (ubuntu)  (0) 2019.11.07
Bash: sed  (0) 2019.05.07
Find files and directory which is using disks very highly  (0) 2018.08.17
Check and recover disk badblocks  (0) 2018.08.16
Apache: Security settings  (0) 2018.08.03

Wowza Streaming Engine


ref: https://www.wowza.com


Intoduce

Wowza media systems의 유료 CDN 플랫폼이다. (구)Wowza Media Server는 미디어 플레이어에 실시간 스트리밍, VOD, 채팅, 원격 녹음 등의 기능을 제공하는 고성능의 확장가능한 대화식 미디어 스트리밍 소프트웨어이다.

Java를 기반 서버로, Java 8이 권장되며, JRE 서버 버전이 같이 설치된다.


Installation

Windows, OS X, Linux 지원

라이센스를 발급받고, Wowza-installer.run 파일을 다운 받아 실행한다.

[install-dir]/conf/Server.license 파일에 라이센스 키가 있다.

기본 설치 위치(Linux): /usr/local/WowzaStreamingEngine-[VERSION]/ (as a root)


Start

1
# /etc/init.d/WowzaStreamingEngine start
cs


http: 1935 포트 접속으로 엔진 동작 확인


성공 확인 후 관리자 시작

1
# /etc/init.d/WowzaStreamingEngineManager start
cs


http:// 8088/enginemanager 실행



관리자 계정으로 로그인하여 플레이어 테스트



[install-dir]/content/sample.mp4 비디오 파일 재생 테스트


Streaming Port

기본 포트

TCP 1935 

RTMP / RTMPE / RTMPT /RTSP 인터리빙 스트리밍 / WOWZ 

TCP 8086-8088 

관리 

UDP 6970-9999 

RTP UDP 스트리밍 


스트리밍 포트 추가 구성도 가능하지만, 다른 프로그램 / 서비스와 포트를 공유할 수 없기 때문에 사전 확인이 필요하다.

TCP 80 

Adobe HDS, Apple HLS, Microsoft Smooth Streaming, MPEG-DASH 스트리밍, RTMPT 

TCP 443 

RTMPS, HTTPS

TCP554 

RTSP 


Log

로그 파일이 기록되는 기본 경로: [install-dir] / logs

기본 로깅수준 INFO는 모니터링 활성화, 정보 수집 가능


Server Configuration

서버 설정

인스턴스 이름, 라이센스, 응용 프로그램 모니터링 기능 등 구성

서버모니터링: 총 리소스 소비(CPU, HEAP, 메모리, 디스크 등), 송수신 커넥션, 네트워크 처리량, 가동시간 모니터링

가상호스트 설정: vhost 환경 관리

가상호스트 모니터링

트랜스코더: 인바운드 소스 스트림 수 모니터링, 트랜스코더 템플릿 관리

미디어 캐시: HTTP 기반 서버 및 네트워크 연결 파일 시스템에서 VOD 파일 원본을 스트리밍하여 VOD 스트림의 확장형으로 사용하는 캐싱 구성

사용자 관리

원본 인증: RTMP / RTSP 기반 인코더 등에 필요한 사용자, 암호관리

성능 조정

로그 관리

SMIL 파일: Synchronized Multimedia integration language. 다양한 비트 전송률 스트림을 HTTP Adaptive bitrate streaming 하는 그룹 구성 관리


Application

스트리밍 컨텐츠 전달을 위한 특정 엔진 구성 옵션



Live

플레이어(단일 서버) 또는 원본 서버로 라이브 스트림 전달

Live Edge

Wowza Media Server 소프트웨어가 실행되는 원본 서버의 라이브 스트림 처리. 라이브 스트림 플레이어에 전달하는데 사용

Live HTTP Origin

HTTP 스트리밍 프로토콜 (Adobe HDS, Apple HLS, MSS, MPEG-DASH)을 사용하여 HTTP 캐싱 인프라에 라이브 스트림 전달

VOD

VOD 파일 플레이어로 스트리밍

VOD Engine

미디어 캐시 소스의 VOD 수집하여 VOD 플레이어로 스트리밍

VOD HTTP Origin

LIVE HTTP Origin과 동일

'CDN - Platform' 카테고리의 다른 글

Streaming Protocol: HLS  (0) 2018.08.21
Streaming Protocols  (0) 2018.08.10

MRTG (Multi Router Traffic Grapher)


ref: http://dpnm.postech.ac.kr/MRTG/mrtg-intro.html


MRTG에 대한 이미지 검색결과


SNMP agent    -->    Manager 로 보내는 자료를 그래픽으로 보여주는 TOOL

Network-link에서 트래픽 부하 감시

WEB UI

Perl, C 기반

설정, 확장 기능이 좋음

에러 패킷 수, 시스템 로드, 모뎀 상태 등 SNMP 변수 쉽게 모니터링


로그 파일이 하디드스크의 용량을 많이 차지 하지 않도록 통합 알고리즘 사용(consolidation)

각 인터페이스 정보를 4단계로 지정. 최근 33시간, 주 , 월, 년 간의 정보

semi-automatic configuration tool


SNMP를 이용하여 기본적인 시스템과 인터페이스 정보 이용

CFG 파일을 사용하여 configuration file 설정

HTML 문서 형식으로 관리가 쉬움

로그 영역: 1200 item = 75MB


How to use


모니터링 대상 라우터에 대한 config file 생성하여 html file에 link 시켜 사용


config file 구성 > mrtg.cfg 파일에 WorkDir 추가 > mrtg 컴파일 > WebUI 구축 > crontab에 mrtg 작업 등록

HLS (HTTP Live Streaming)

Apple사에서 사용하는 표준 HTTP 기반 스트리밍 프로토콜. 스트리밍 데이터를 m3u8 확장자의 재생목록 파일과 잘게 쪼개진 다수의 ts(동영상)파일을 HTTP를 통해 전송하는 방식
- m3u8: m3u 파일이 UTF-8로 인코딩 되어있음
- m3u: 멀티미디어 파일의 재생목록 관리하는 파일
- ts: MPEG-2 Transport Stream 포맷

IETF를 통한 표준화 작업을 통해 다른 업체에서도 HLS 지원이 가능해졌다. 

HLS 전송방식

서버는 HTTP를 통해 클라이언트로부터 요청을 받고, 응답하는 역할만 수행한다. Stream Segmenter는 일정한 시간 간격마다 입력받은 미디어 데이터를 분할해 파일로 만들고, 그 파일에 접근할 메타데이터(m3u8)을 생성하는 역할을 한다.




HLS에서 ABS (Adaptive Bitrate Streaming)을 위해 동시에 여러 비트율의 ts 파일에 대한 정보를 제공한다. 확장성이 높고, 안정적이지만 구조상 파일을 먼저 만들고 스트리밍하는 방식이므로 RTMP/RTSP 방식에 비해 딜레이 문제가 발생할 수 있다.


- 사용자의 네트워크 속도에 따라 적합한 컨텐츠를 선택하여 재생

- 대역폭 변동에 대한 품질 개선 및 안정성

- Apple HLS / Adobe HDS / Microsoft HSS

'CDN - Platform' 카테고리의 다른 글

Platform: Wowza  (0) 2018.08.28
Streaming Protocols  (0) 2018.08.10

SNMP (Simple Network Management Protocol)

네트워크 장비 간 네트워크 관리 및 전송을 위한 프로토콜. UDP / IP (161번 포트) 상에서 동작하는 비교적 단순한 형태의 메시지 교환형 네트워크 관리 프로토콜이다. 구조가 간단하며, 쉽게 관리 적용이 가능. 정보 지향적 동작 구조로, 특정 정보 변수에 대한 단순한 요청/응답 메커니즘 (GET / SET)을 사용한다. Manager - Agent 형태로 동작한다.



2개의 다른 정보 구조 프로토콜과 함께 사용: SMI & MIB

-       SMI (Structure of Management Information)
관리 정보 구조. 변수 작명, 변수 유형, 객체 및 값들을 부호화 등의 규칙. 장비마다 다르게 표현될 수 있는 MIB 객체의 표현 동질성을 유지하는 표준

-       MIB (Management Information Base)
관리 특성을 묘사하는 변수 객체들의 모음



SNMP 장비 구분

Manager (Network Management System)

호스트 등의 관리 시스템. 관리용 메시지를 에이전트에 요청 및 모니터링. Manager S/W, HP OpenView, MRTG, TWSNMP

Agent (Managed Device)

허브, 라우터, 스위치, 브리지, 호스트 등 관리되는 장비. Agent S/W, MIB. 자비 동작에 필요한 변수, 상태 정보 등을 데이터베이스화 하여 유지



SNMP 동작 방식

ManagerAgent에 관리 정보를 요청, agent가 생산하는 MIB 데이터를 통해 관리 역할 수행. MIB에서 Get, Set 등의 명령을 통해 상호 데이터 교환. OSI ASN.1/BER 문법체계를 따른다.



+ Recent posts