본문으로 바로가기

OTA TS Generator

category 프로그래밍/Python 2019.03.08 09:58

파이썬을 틈틈히 보고 있지만, 막상 파이썬으로 무엇을 만들어 보려고 하면 무엇을 어떻게 시작해야 할지 막막함이 몰려온다. 문법도 알겠고, 개념도 대충 알겠는데... 막상 무엇을 만들려고 하면...

어쩌라고... ;;

이런 생각과 함께 곧 포기하곤 했었다. 모든 언어를 공부할 때 느끼는 감정과 생각일 것이다.

이것은 내가 파이썬이라는 언어의 특징을 제대로 모르는 것이고, 파이썬으로 개발 경험이 없기에 어떻게 시작 해야할지 막연할 뿐인데, 나이 한살 먹으면서 이것을 극복하기가 점점 힘들어진다.


정말 이번에는 파이썬을 제대로 공부해야겠다는 마음가짐으로 회사에서 VC++로 개발된 것을 파이썬으로 포팅하면서 파이썬의 막연함을 극복해보려고 한다.

위 프로그램은 VC++로 개발되었으며, STB firmware를 OTA로 전송하기 위해 TS로 변환하는 매우 간단한 프로그램이다. 특별한 기능인 사내 테스트 환경에서 사용할 PSI 타입과 서비스 레벨로 배포하는 TS 타입을 제공하고 TS 타입인 경우는 PID를 지정할 수 있다.


VC++로 개발되었기 때문에 윈도우 환경에서만 사용이 가능하다. 우분투 사용자인 나에게는 다소 불편함이 있는 프로그램이었다. 그래서 파이썬 버전으로 포팅을 해보려고 한다. ㅎㅎ;;


GUI는 파이썬 내장 라이브러리인 Tkinter를 사용하였고, Python 3.x 버전으로 포팅하였다. VC++로 개발된 프로그램과 동일한 동작을 하지만, AES Decrypt 기능을 추가하여 DishTV 제품도 함께 사용이 가능하도록 하였다. VC++ 프로그램은 인크립트된 Header를 AES Decrypt 못하여 수동으로 부가적인 정보를 입력하는 방식이었다.

파이썬으로 포팅하면서 가장 힘든 것이 있었다면, 바로 raw data 처리하는 것이 매우 매끄럽지 않다는 것과 속도 면에서 매우 느리다는 것을 새삼 깨닫게 되었다.


예를 들면 45MB 크기의 STB firmware를 TS로 변환하는데 VC++로 개발된 프로그램은 5초 이내로 변환이 완료 된다면, 파이썬로 개발된 프로그램에선 50초정도의 시간이 걸렸다. 10배 가까이 변환 속도 차가 발생하는 것에 매우 실망스러운 부분이었다.


어디서 차이가 발생하는지 찾아보니, CRC32 연산을 위한 비트 연산(shift, xor, etc)에서 많은 시간이 소비되는 것을 알게 되었다. 가능하면 C로 개발된 CRC32 라이브러리를 사용하려고 하였지만, 우리가 사용한 CRC32 알고리즘에 다소 차이(버그...)가 있어 파이썬에서 제공하는 CRC32 라이브러리를 사용하지 못해 파이썬에서 비트 연산한 것이 속도를 느리게 한 이유였다.


이것을 나중에 CRC32 연산하는 부분만 C로 작성해서 파이썬에서 C 함수를 호출하는 방식으로 변경하는 것을 시도해봐야겠다. 그리고 배포하는 방식도 알아봐야겠고... 막상 이렇게 파이썬으로 간단하게 프로그램을 만들어보니 추가적으로 살펴봐야 하는 것이 생기는 것 같다.


소스 코드는 개발하면서 삽질한 부분을 시간나는대로 블로그에 정리할 예정이다.

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

Pyinstaller - 파이썬 프로그램 배포  (0) 2019.04.19
Firmware header changer  (0) 2019.03.14
OTA TS Generator  (0) 2019.03.08
AES CBC decrypt  (0) 2019.02.26
List Comprehension  (0) 2019.01.17
String to Hex 변환  (0) 2019.01.13

댓글을 달아 주세요