Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱

536 views

Published on

박지환
네이버

Published in: Technology
  • Be the first to comment

  • Be the first to like this

[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱

  1. 1. 네이버 공통기술개발 | 박지환 20분만에 만들어보는 라이브 방송 앱 부제:안드로이드미디어코덱사용법과RTMP살펴보기
  2. 2. - 박지환 (jeehwan.park@navercorp.com) - 네이버 동영상플랫폼 공통기술개발 - Live / Video Editor SDK 개발 - V-Live, PRISM Live Studio 등 적용 발표자 소개
  3. 3. - 데모 - 20분만에 라이브 방송 앱 만들기 - 라이브 송출의 기본 구조 - MediaCodec - RTMP 발표 개요
  4. 4. 실행화면: 데모
  5. 5. 1. googlesamples/android-Camera2Video 프로젝트를 연다. 다음 커맨드를 실행합니다. $ git clone https://github.com/googlesamples/android-Camera2Video.git 안드로이드 스튜디오를 실행하여 android-Camera2Video/kotlinApp 프로젝트를 open합니다. 20분만에 라이브 송출 앱 만들기
  6. 6. 2. repository를 추가한다. 프로젝트의 build.gradle 파일을 열어 repositories 안에 저장소를 추가합니다. 20분만에 라이브 송출 앱 만들기
  7. 7. 3. gradle dependency를 추가한다. Application의 build.gradle 파일을 열어 dependencies 안에 종속성을 추가합니다. 20분만에 라이브 송출 앱 만들기
  8. 8. 4. Internet 퍼미션 추가 네트워크 통신을 사용해야 하므로 manifest에 INTERNET 퍼미션을 추가합니다. (런타임 퍼미션 획득 관련 코드는 생략하겠습니다.) 20분만에 라이브 송출 앱 만들기
  9. 9. 5. MediaStreamer 추가 Camera2VideoFragment.kt 파일을 다음과 같이 수정합니다. mediaRecorder -> mediaStreamer 변경 (refactor – rename) 를 다음과 같이 변경합니다. 20분만에 라이브 송출 앱 만들기
  10. 10. 5. MediaStreamer 추가 를 다음과 같이 변경합니다. 20분만에 라이브 송출 앱 만들기
  11. 11. 5. MediaStreamer 추가 를 다음과 같이 변경합니다. 20분만에 라이브 송출 앱 만들기
  12. 12. 끝..?! 20분만에 라이브 송출 앱 만들기
  13. 13. 라이브 송출의 기본 구조 비디오 압 축 오디오 압축 네트워크 전송 이미지 출처 https://svgsilh.com/ko/image/1085704.html https://pixabay.com/ko/vectors/%EC%95%84%EC%9D%B4%EC%BD%98-%EB%A7%88%EC%9D%B4%ED%81%AC- %EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%ED%8F%B0-1298908/ https://commons.wikimedia.org/wiki/File:Linecons_small-cloud.svg raw video raw audio encoded video encoded audio
  14. 14. 라이브 송출의 기본 구조 비디오 압 축 오디오 압축 네트워크 전송 raw video raw audio encoded video encoded audio
  15. 15. 라이브 송출의 기본 구조 비디오 압 축 오디오 압축 네트워크 전송 raw video raw audio encoded video encoded audio
  16. 16. 라이브 송출의 기본 구조 H.264 AAC RTMP raw video raw audio encoded video encoded audio
  17. 17. android.media.MediaCodec
  18. 18. android.media.MediaCodec 이것만 잘 다뤄도 중간 이상은 간다!?
  19. 19. MediaCodec 비디오 압 축 오디오 압축 네트워크 전송
  20. 20. 코덱/인코딩이란? MediaCodec 출처: 위키피디아
  21. 21. e.g. 1080p 30fps 1분 영상 • Uncompressed Data (NV21) : 1920 * 1080 * 3 / 2 * 30 * 60 = 5.339 GB • Compressed Data (AVC, 4 Mbps CBR) : 4,000,000 / 8 * 60 = 28.610 MB* • 약 186 배 차이 *계산상의 수치. 실제 적용시 결과가 상이할 수 있음 MediaCodec 5.339 GB 28.61 MB 0 1000 2000 3000 4000 5000 6000 size (MB) Uncompressed Data vs. Compressed Data Compressed Data Uncompressed Data
  22. 22. e.g. AVC baseline@L4.1, 1920x1080@30fps, 4Mbps, x4, 1분 영상 • 하드웨어 : 약 8s 834ms • 소프트웨어: 약 1m 1s • 약 7배* 차이 *LGE LM-G710N Android 8.0.0 API 26 (LG-G7) 기준 기기별로 결과가 상이할 수 있음. MediaCodec 1m 1s 8s 834ms 0 10 20 30 40 50 60 70 elapsed (s) Hardware vs. Software Hardware Software
  23. 23. MediaCodec - 안드로이드에서 하드웨어/소프트웨어 코덱 사용을 위해 제공하는 API - API 16에서 처음 도입 - 최소한 API 21을 사용하기를 권장. (최악의 경우 API 18) MediaCodec
  24. 24. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  25. 25. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  26. 26. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  27. 27. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  28. 28. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  29. 29. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  30. 30. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  31. 31. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html createEncoderByType( ) createDecoderByType( )
  32. 32. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html OMX.qcom.video.encoder.avc OMX.google.h264.encoder
  33. 33. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  34. 34. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  35. 35. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  36. 36. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  37. 37. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  38. 38. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  39. 39. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  40. 40. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  41. 41. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  42. 42. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  43. 43. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  44. 44. Surface MediaCodec 출처: https://source.android.com/devices/graphics#bufferqueue
  45. 45. MediaCodec 출처: https://developer.android.com/reference/android/media/MediaCodec.html
  46. 46. MediaCodec Surface
  47. 47. RTMP (Real-Time Messaging Protocol)
  48. 48. MediaCodec 비디오 압 축 오디오 압축 네트워크 전송
  49. 49. RTMP 란? - 실시간 미디어 전송을 위한, Adobe의 독점 컴퓨터 통신 규약 - Macromedia inc.에서 개발 - 주로 1935 포트 사용 - TCP 기반 - ( 메시지 | 미디어 데이터 ) 패킷 - 메시지: AMF(Action Message Format) 을 통해 직렬화 - 미디어 데이터: FLV tags (video tags, audio tags) 참조: http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf https://www.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-format-spec.pdf https://www.adobe.com/content/dam/acom/en/devnet/flv/video_file_format_spec_v10_1.pdf RTMP
  50. 50. AMF RTMP key value
  51. 51. Video Packet RTMP data
  52. 52. • Pros? - 구조적으로 심플하다. - Packet 오버헤드가 적다. - 낮은 레이턴시/딜레이 • Cons? - 오래돼서 일부 환경에서는 지원하지 않는다. (e.g. 브라우저) - 애플이 싫어합니다. - 방화벽 문제 - CDN 문제!!! - Full-duplex라서 세션 유지에 대한 오버헤드가 크다. - H.265 같은 최신 코덱은 스펙에 없다. (별도 커스터마이징 필요)  따라서 송출단은 rtmp, 시청단은 http기반 프로토콜로 구성 RTMP
  53. 53. Tip (삽질 내용) • 비디오만 전송하면 제대로 재생되지 않는다. (오디오 only 또는 오디오+비디오) RTMP
  54. 54. 소스코드: • https://github.com/jeehwan/LiveAppIn20Mins • https://github.com/jeehwan/media-streamer 마치며
  55. 55. 공통기술개발에서는... - 보다 안정적인 송출과 좋은 화질 (QoE) - 다양한 코덱 및 프로토콜 - Multi-threading 및 성능 최적화 - 딥러닝 / 머신러닝 - 다양한 비디오/오디오 효과 - 2D/3D graphics - Computer vision - Digital signal processing 마치며

×