boost asio를 이용한 iptuner 제작
Program Lang./C++ 2017. 4. 11. 20:231. 목적
boost asio를 몇 번을 봤는데, 볼 때마다 기억이 잘 나지 않는다. boost asio 예제를 하나 만들면 기억에 도움이 되지 않을까 하는 마음으로 작성한다. 예제는 내 Job과 관련이 있는 부분인 IPTV의 한 부분인 간단한 IPTuner를 만들어 본다.
IPTuner는 일반적으로 Multicast Stream을 수신하는 부분으로 간단한 예제이지만 큰 틀은 변하지 않는다.
boost buffer 부분은 좀 더 공부를 해야 할 듯 하다.
2. 소스코드
windsend나 VLC를 이용해서 server는 대체한다. 다만 VLC는 TS Stream를 VLC 맞게 변경하는 부분이 있어서 정확한 값을 얻기는 힘들다. 일단 windsend를 기반으로 동작 테스트를 진행한다.
전에 올렸던 소스가 CTRL-C를 누르지 않으면 종료되지 않은 문제가 있어서 수정해서 다시 올린다. 전에 CTRL-C를 누르지 않으면 종료하지 않는 이유는 io_service에서 run을 호출하는 thread에서 block되기 때문에 그 thread가 main함수가 돌고 있는 thread여서 동작하지 않았다. 따라서 실제 socket에서 receive 동작을 하는 io_service 동작은 별도의 thread로 분리한다.
소스상에서 한가지 동작 중에 문제가 있는 부분은 io_service work에 관한 것이다. 실제 work는 io_service가 stop을 호출하지 전까지 io_service에 계속 block되어져야 하는데 block되지 않고 종료되는 문제가 있다. 계속 삽질 중이지만 생각되로 동작하지 않는 문제가 있다. 여기까지 오는데 엄청난 삽질을 해 됐다. 몇 가지 문제 빼 놓고는 정상적으로 동작하는 것으로 보인다.
3. 실행 결과
몇가지 스트림을 테스트 해 봤는데 값은 정상적으로 얻어온다.
'Program Lang. > C++' 카테고리의 다른 글
[Basic] 맴버변수의 상수, 정적 속성, 상수와 정적변수 동시적용 시, 상수 맴버 함수 정리 (0) | 2017.04.26 |
---|---|
[Basic] 생성자 호출 정리 (0) | 2017.04.26 |
message queue implementation by c++ STL (0) | 2017.04.06 |
enable_shared_from_this 정리 (0) | 2017.01.12 |
[json-c] simple generator json ojbect (0) | 2017.01.09 |