Looking for a silver bullet to edit videos on Android.

Looking for a silver bullet to edit videos on Android.

Seungwon Lee
LINE Plus AppDev5 Android Engineer
https://linedevday.linecorp.com/jp/2019/sessions/F2-2

Be4518b119b8eb017625e0ead20f8fe7?s=128

LINE DevDay 2019

November 21, 2019
Tweet

Transcript

  1. 2019 DevDay Looking for a Silver Bullet To Edit Videos

    on Android. > Seungwon Lee > LINE Plus AppDev5 Android Engineer
  2. Agenda > Why Do We Need a Silver Bullet? >

    What Should We Know in Advance? > How Does android-transcoder Work? > What is Cruiser? > Troubleshooting
  3. Agenda > Why Do We Need a Silver Bullet? >

    What Should We Know in Advance? > How Does android-transcoder Work? > What is Cruiser? > Troubleshooting
  4. When You Upload a Video in LINE Chatroom Timeline Video

    Profile
  5. Processing Video Client-side Overlay stickers Adjust video size …

  6. Why Do We Need a Silver Bullet?

  7. How to Resolve the Issues Device A Device B Device

    C
  8. Blacklist > List of devices that had problems during video

    processing. Device A Device B Device C Device D …
  9. Blacklist > Blacklisted devices were redirected so that client-side video

    processing would not occur Bypass Device A Device B Device C Device D …
  10. Blacklisted Devices *H*-E*** *H*-0** S*-0** S*-0** R**** **** * R****

    **** * *H*-E*** V**-* *-0**
  11. Blacklisted Devices *H*-E*** *H*-0** S*-0** S*-0** R**** **** * R****

    **** * *H*-E*** V**-* *-0** 2***** *-0** *-0** E**-* E**-* F**-L** P*** *L*-* V**-* W**-* *T*-A* *L*-* V**-* ***0* M** **V-***9 **V-**9 **e*** *R *C-**F C**** C**** *R*-U*** *R*-**9 D**-***L *i*** * **2-***Y ****H
  12. Blacklisted Devices *H*-E*** *H*-0** S*-0** S*-0** R**** **** * R****

    **** * *H*-E*** V**-* *-0** 2***** *-0** *-0** E**-* E**-* F**-L** P*** *L*-* V**-* W**-* *T*-A* *L*-* V**-* ***0* M** **V-***9 **V-**9 **e*** *R *C-**F C**** C**** *R*-U*** *R*-**9 D**-***L *i*** * **2-***Y ****H **F-***0 **F-***0 **F-**9 **F-***0 **A_***0 **R-***0 **Y-*L **R-***0 **E-***0 **E-***2 **R-***0 **Y-* *E-***0 **A-**1 **A-**1 ****W *7-**0 ****W **V-***L **E-**2 **E-**4 **E-**1 **E-**3 **E-***0
  13. Android Wars: A New Hope {Episode 4) > android-transcoder made

    by Yuya Tanaka > https://github.com/ypresto/android-transcoder > Written with pure Java without codec licensing issues. > Supports OpenGL renderer
  14. Android Wars: A New Hope {Episode 4) Legacy Video Processor

    in LINE android- transcoder *A**** P* X O *A**** H***** X O *A**** P* X O *A**** H***** X X *A**** M***** O O > android-transcoder made by Yuya Tanaka > https://github.com/ypresto/android-transcoder > Written with pure Java without codec licensing issues. > Supports OpenGL renderer
  15. Agenda > Why Do We Need a Silver Bullet? >

    What Should We Know in Advance? > How Does android-transcoder Work? > What is Cruiser? > Troubleshooting
  16. None
  17. Video Format : MP4 Video Codec : H.264 Audio Codec

    : AAC
  18. Video Frame

  19. Codec Encoding (H.264)

  20. Codec Encoding (H.264) Decoding (H.264)

  21. Codec Encoding (AAC) Decoding (AAC)

  22. Audio Track (AAC) Video Track (H.264) MP4 Container Video Format(Container)

    Reference: - https://en.wikipedia.org/wiki/Video_file_format - https://en.wikipedia.org/wiki/Codec
  23. Transcoding Trans - coding Transfer - Encoding

  24. Vorbis Audio VP8 Video 3GP Container Friend A Mine Transcoding

    Vorbis, VP8 (X) AAC, H.264 (O)
  25. AAC Audio H.264 Video MP4 Container Vorbis Audio VP8 Video

    3GP Container Encoder (AAC) Decoder (Vorbis) Friend A Mine Transcoding Encoder (H.264) Decoder (VP8) Vorbis, VP8 (X) AAC, H.264 (O)
  26. Agenda > Why Do We Need a Silver Bullet? >

    What Should We Know in Advance? > How Does android-transcoder Work? > What is Cruiser? > Troubleshooting
  27. android-transcoder Audio Decoder Video Decoder Audio Encoder Video Encoder Muxer

    Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Reference: https://github.com/ypresto/android-transcoder
  28. android-transcoder Audio Decoder Video Decoder Audio Encoder Video Encoder Muxer

    Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Reference: https://github.com/ypresto/android-transcoder
  29. android-transcoder Audio Decoder Video Decoder Audio Encoder Video Encoder Muxer

    Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Extracting, Decoding Rendering Encoding, Muxing Reference: https://github.com/ypresto/android-transcoder
  30. android-transcoder Audio Decoder Video Decoder Audio Encoder Video Encoder Muxer

    Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Extracting, Decoding Rendering Encoding, Muxing Reference: https://github.com/ypresto/android-transcoder
  31. How to Extract/Decode a Video Extractor android.media.MediaExtractor Audio Decoder Video

    Decoder Audio Encoder Video Encoder Muxer Video OpenGL Renderer Audio Track Video Track Video Container Audio Track Video Track Video Container Reference: https://github.com/ypresto/android-transcoder
  32. > Query the metadata of each track > Read the

    encoded data stream > Demux data streams into each track android.media.MediaExtractor Media Extractor Audio info: AAC Video info: H.264 Audio Track (AAC) Video Track (H.264) MP4 Container
  33. > Query the metadata of each track > Read the

    encoded data stream > Demux data streams into each track android.media.MediaExtractor Media Extractor Audio info: AAC Video info: H.264 Audio Track (AAC) Video Track (H.264) MP4 Container Audio Decoder Video Decoder
  34. How to Extract Video and Audio Media Extractor Time Audio

    Track (AAC) Video Track (H.264) MP4 Container val size = mediaExtractor.readSampleData(byteBuf, offset) val presentationTimeUs = mediaExtractor.getSampleTime()
  35. How to Extract Video and Audio Data Media Extractor mediaExtractor.advance()

    val size = mediaExtractor.readSampleData(byteBuf, offset) End of Stream Time Audio Track (AAC) Video Track (H.264) MP4 Container End of Stream … …
  36. How to Decode a Video Audio Decoder Video Decoder Audio

    Encoder Video Encoder Muxer Video OpenGL Renderer Extractor android.media.MediaCodec Audio Track Video Track Video Container Audio Track Video Track Video Container Reference: https://github.com/ypresto/android-transcoder
  37. How to Decode a Video > Wrapper class for media

    codecs (i.e. encoder and decoder) > Use together with android.media.MediaExtractor, android.media.MediaMuxer AAC Audio Decoder H.264 Video Decoder
  38. How to Extract/Decode a Video Extracting, Decoding Rendering Encoding, Muxing

    Audio Decoder Video Decoder Audio Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Reference: https://github.com/ypresto/android-transcoder
  39. How to Extract/Decode a Video Media Extractor Audio Track (AAC)

    Video Track (H.264) MP4 Container …
  40. How to Extract/Decode a Video Video Decoder Media Extractor Audio

    Track (AAC) Video Track (H.264) MP4 Container
  41. How to Extract/Decode a Video Video Decoder Media Extractor Audio

    Track (AAC) Video Track (H.264) MP4 Container Empty Input Buffer
  42. How to Extract/Decode a Video Video Decoder Media Extractor Audio

    Track (AAC) Video Track (H.264) MP4 Container Empty Input Buffer Fill Input Buffer
  43. How to Extract/Decode a Video Video Decoder Output Surface Media

    Extractor Audio Track (AAC) Video Track (H.264) MP4 Container Empty Input Buffer Fill Input Buffer Video Renderer
  44. How to Extract/Decode a Video Video Decoder Output Surface Media

    Extractor Audio Track (AAC) Video Track (H.264) MP4 Container Video Renderer onFrameAvailable Empty Input Buffer Fill Input Buffer
  45. How to Extract/Decode a Video Video Decoder Output Surface Media

    Extractor Audio Track (AAC) Video Track (H.264) MP4 Container Video Renderer onFrameAvailable Released Buffer in Surface Empty Input Buffer Fill Input Buffer
  46. Rendering Audio Decoder Video Decoder Audio Encoder Video Encoder Muxer

    Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Extracting, Decoding Rendering Encoding, Muxing Reference: https://github.com/ypresto/android-transcoder
  47. How to Render a Video Audio Decoder Video Decoder Audio

    Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Extracting, Decoding Rendering Encoding, Muxing Output Surface Input Surface Frame Buffer Reference: https://github.com/ypresto/android-transcoder
  48. How to Render a Video Audio Decoder Video Decoder Audio

    Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Extracting, Decoding Rendering Encoding, Muxing Output Surface Input Surface Frame Buffer Render Reference: https://github.com/ypresto/android-transcoder
  49. How to Render a Video Audio Decoder Video Decoder Audio

    Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Extracting, Decoding Rendering Encoding, Muxing Output Surface Input Surface Frame Buffer Render Render Reference: https://github.com/ypresto/android-transcoder
  50. How to Render a Video > OutputSurface and InputSurface will

    be bound with the current OpenGL environment Output Surface from Decoder FrameBuffer Input Surface to Encoder
  51. How to Render a Video > Pixel data of a

    video frame is drawn into OutputSurface of the decoder 720 X 1280 Output Surface from Decoder FrameBuffer Input Surface to Encoder
  52. How to Render a Video Output Surface from Decoder FrameBuffer

    Input Surface to Encoder > We can reduce a video frame by drawing it on FrameBuffer in OpenGL 720 X 1280 540 X 960
  53. How to Render a Video > We pass the resized

    frame to InputSurface of the encoder 540 X 960 720 X 1280 540 X 960 Output Surface from Decoder FrameBuffer Input Surface to Encoder
  54. How to Encode/Mux a Video Audio Decoder Video Decoder Audio

    Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Extracting, Decoding Rendering Encoding, Muxing Reference: https://github.com/ypresto/android-transcoder
  55. How to Extract/Decode a Video Video OpenGL Renderer Input Surface

    Video Encoder
  56. Output Buffer How to Extract/Decode a Video Video OpenGL Renderer

    Request Encoding Input Surface Video Encoder
  57. Muxer How to Extract/Decode a Video Video OpenGL Renderer Request

    Encoding Audio Track Video Track Input Surface Output Buffer Release Output Buffer Video Encoder
  58. How to Encode/Mux a Video Muxer android.media.MediaMuxer Audio Decoder Video

    Decoder Audio Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Reference: https://github.com/ypresto/android-transcoder
  59. android.media.MediaMuxer > Mux encoded streams of audio/video > Supports MP4,

    WebM and 3GP files AAC Encoder H.264 Encoder Media Muxer Audio Track (AAC) Video Track (H.264) Video Container Reference: - https://developer.android.com/reference/android/media/MediaMuxer - https://developer.android.com/guide/topics/media/media-formats
  60. android.media.MediaMuxer Media Muxer mediaMuxer.writeSampleData(trackIndex, byteBuf, bufferInfo) -> Audio Track (AAC)

    Video Track (H.264) Video Container Time
  61. android.media.MediaMuxer Media Muxer mediaMuxer.writeSampleData(trackIndex, byteBuf, bufferInfo) -> Audio Track (AAC)

    Video Track (H.264) Video Container End of stream Time End of stream … …
  62. How Does android-transcoder Work Audio Decoder Video Decoder Audio Encoder

    Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container Reference: https://github.com/ypresto/android-transcoder
  63. I think you completely understand it

  64. Adopting android-transcoder to LINE

  65. Issues with adopting android-transcoder to LINE

  66. Audio Features Didn’t Exist Audio sampler Audio Decoder Video Decoder

    Audio Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container
  67. Overlaying Stickers Didn’t Exist Audio sampler Overlay Sticker Audio Decoder

    Video Decoder Audio Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container
  68. Renovate to new project: Cruiser

  69. Agenda > Why Do We Need a Silver Bullet? >

    What Should We Know in Advance? > How Does android-transcoder Work? > What is Cruiser? > Troubleshooting
  70. Added Features to Cruiser v1.0 Container MP4 Video Codec H.264

    Bitrate 2 Mbit/s Resolution 720*1280 Trim range 1200 ms ~ 250300 ms Audio Codec AAC Sample Rate 44.1 kHz ... ... > Adjust sampling rate of audio > Add APIs for a trancoding policy including codec, resolution, trim ranges, and etc.
  71. Audio Sampler Audio Sampler > Adjust sampling rate of audio

    Audio Decoder Video Decoder Audio Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container
  72. Audio Sampler Audio Sampler AAC Decoder AAC Encoder > Based

    on libsamplerate made by erikd > https://github.com/erikd/libsamplerate > A library for performing sample rate conversion of audio data 320 kbit/s 96 kbit/s
  73. Cruiser v1.0 Features > Adjusts video size and sampling audio

    with a simple policy for transcoding > Trims video Container MP4 Video Codec H.264 Bitrate 2 Mbit/s Resolution 720*1280 Trim range 1200 ms ~ 250300 ms Audio Codec AAC Samplerate 44.1 kHz
  74. Cruiser v1.0 Features > Adjusts video size and sampling audio

    with a simple policy for transcoding > Trims video > Mutes audio X Container MP4 Video Codec H.264 Bitrate 2 Mbit/s Resolution 720*1280 Trim range 1200 ms ~ 250300 ms Audio Codec AAC Samplerate 44.1 kHz
  75. Cruiser v1.1 Feature > Overlays LINE static and animated stickers

    on a video
  76. Cruiser v1.1 Main Feature Audio sampler Overlay Sticker Audio Decoder

    Video Decoder Audio Encoder Video Encoder Muxer Video OpenGL Renderer Extractor Audio Track Video Track Video Container Audio Track Video Track Video Container
  77. How Does Cruiser Overlay A Sticker > OutputSurface and InputSurface

    will bind with the current OpenGL environment Output Surface from Decoder FrameBuffer Input Surface to Encoder
  78. How Does Cruiser Overlay A Sticker > Pixel data of

    a video frame is copied into OutputSurface of the decoder Output Surface from Decoder FrameBuffer Input Surface to Encoder
  79. How Does Cruiser Overlay A Sticker > We load a

    sticker as a Bitmap instance and replace it to a texture that OpenGL can recognize Teuxture Output Surface from Decoder FrameBuffer Input Surface to Encoder
  80. How Does Cruiser Overlay A Sticker > We can draw

    additionally overlay a sticker on FrameBuffer in OpenGL Output Surface from Decoder FrameBuffer Input Surface to Encoder
  81. How Does Cruiser Overlay A Sticker > We pass this

    frame to InputSurface of the encoder Output Surface from Decoder FrameBuffer Input Surface to Encoder
  82. How Does Cruiser Overlay A Sticker > Like this, We

    can overlay serval stickers on a video frame Output Surface from Decoder FrameBuffer Input Surface to Encoder
  83. Blacklisted Devices *H*-E*** *H*-0** S*-0** S*-0** R**** **** * R****

    **** * *H*-E*** V**-* *-0** 2***** *-0** *-0** E**-* E**-* F**-L** P*** *L*-* V**-* W**-* *T*-A* *L*-* V**-* ***0* M** **V-***9 **V-**9 **e*** *R *C-**F C**** C**** *R*-U*** *R*-**9 D**-***L *i*** * **2-***Y ****H **F-***0 **F-***0 **F-**9 **F-***0 **A_***0 **R-***0 **Y-*L **R-***0 **E-***0 **E-***2 **R-***0 **Y-* *E-***0 **A-**1 **A-**1 ****W *7-**0 ****W **V-***L **E-**2 **E-**4 **E-**1 **E-**3 **E-***0
  84. *H*-E*** *H*-0** S*-0** S*-0** R**** **** * R**** **** *

    *H*-E*** V**-* *-0** 2***** *-0** *-0** E**-* E**-* F**-L** P*** *L*-* V**-* W**-* *T*-A* *L*-* V**-* ***0* M** **V-***9 **V-**9 **e*** *R *C-**F C**** C**** *R*-U*** *R*-**9 D**-***L *i*** * **2-***Y ****H **F-***0 **F-***0 **F-**9 **F-***0 **A_***0 **R-***0 **Y-*L **R-***0 **E-***0 **E-***2 **R-***0 **Y-* *E-***0 **A-**1 **A-**1 ****W *7-**0 ****W **V-***L **E-**2 **E-**4 **E-**1 **E-**3 **E-***0 Blacklist On Cruiser X
  85. *H*-E*** *H*-0** S*-0** S*-0** R**** **** * R**** **** *

    *H*-E*** V**-* *-0** 2***** *-0** *-0** E**-* E**-* F**-L** P*** *L*-* V**-* W**-* *T*-A* *L*-* V**-* ***0* M** **V-***9 **V-**9 **e*** *R *C-**F C**** C**** *R*-U*** *R*-**9 D**-***L *i*** * **2-***Y ****H **F-***0 **F-***0 **F-**9 **F-***0 **A_***0 **R-***0 **Y-*L **R-***0 **E-***0 **E-***2 **R-***0 **Y-* *E-***0 **A-**1 **A-**1 ****W *7-**0 ****W **V-***L **E-**2 **E-**4 **E-**1 **E-**3 **E-***0 Blacklist On Cruiser X !
  86. Can't beat Android fragmentation

  87. Agenda > Why Do We Need a Silver Bullet? >

    What Should We Know in Advance? > How Does android-transcoder Work? > What is Cruiser? > Troubleshooting
  88. Troubleshooting Video issues Quality issue Orientation issue Audio issue 0

    bit/s Issue Out of Sync Audio and Video Issue Audio Distortion Issue
  89. Troubleshooting Video Issues > Quality Issue Orientation Issue Audio Issue

    0 bit/s Issue Out of Sync Audio and Video Issue Audio Distortion Issue
  90. Low Video Quality Original Video Transcoded Video with a Video

    Filter
  91. A Video Profile Configuration Video Encoder Video Encoder Cruiser Device

    Camera High Profile Video High Profile Video
  92. A Video Profile Configuration Video Encoder Video Encoder Cruiser Device

    Camera High Profile Video Base Profile Video
  93. Low Quality Due to Video Profiles Base Profile Video High

    Profile Video
  94. Low Quality Due to Video Profiles Video Encoder Cruiser High

    Profile Video > Don’t leave a device to choose a video profile High Profile Video Encoder Cruiser Base Profile Video Base Profile
  95. Troubleshooting Video Issues Quality Issue > Orientation Issue Audio Issue

    0 bit/s Issue Out of Sync Audio and Video Issue Audio Distortion Issue
  96. Rotated Video Original Video Transcoded Video

  97. Orientation Setting to Encoder Video Encoder Muxer 90 Orientation =

    90 Extractor 90 90
  98. Orientation Setting to Encoder X 90 Ignored Video Encoder Muxer

    90 Orientation = 90 Extractor 90
  99. Video Rotated Issue 90 Video Encoder Muxer 90 Orientation =

    90 Extractor 90
  100. Video Rotated Issue > Don’t set the orientation value of

    a video to an encoder Video Encoder Muxer 90 Orientation = 90 Extractor 90 X
  101. Troubleshooting Video Issues Quality Issue Orientation Issue Audio Issue >

    0 bit/s Issue Out of Sync Audio and Video Issue Audio Distortion Issue
  102. Audio Distortion Original Video Transcoded Video

  103. 0 bit/s From MediaExtractor Audio bitrate = 128 kbit/s

  104. 0 bit/s Issue Extract the bitrate Audio bitrate = 128

    kbit/s Extractor 128 kbit/s
  105. 0 bit/s Issue 128 kbit/s 96 kbit/s 96 kbit/s Audio

    Format Video Format Container Audio Decoder Audio Encoder Muxer Extractor Audio Down Sampler Audio Format Container Video Format 96 kbit/s 48 kbit/s 48 kbit/s 48 kbit/s 48 kbit/s Audio Codec AAC Sample Rate 44.1 kHz Bitrate 96 kbit/s
  106. 0 bit/s Issue Audio bitrate = 128 kbit/s Extract the

    bitrate Extractor 0 kbit/s
  107. 0 bit/s Issue > Don’t forget to check 0 values

    0 kbit/s 0 kbit/s Audio Format Video Format Container Audio Decoder Audio Encoder Muxer Extractor Audio Down Sampler Audio Format Container Video Format 0 kbit/s 0 kbit/s
  108. 0 bit/s Issue > Don’t forget to check 0 values

    0 kbit/s 96 kbit/s 96 kbit/s Audio Format Video Format Container Audio Decoder Audio Encoder Muxer Extractor Audio Down Sampler Audio Format Container Video Format 96 kbit/s
  109. Troubleshooting Video Issues Quality Issue Orientation Issue Audio Issue 0

    bit/s Issue > Out of Sync Audio and Video Issue Audio Distortion Issue
  110. Out of Sync Audio and Video Issue Original Video Transcoded

    video
  111. Waiting of Muxer Initialization Muxer Audio Track Video Track Output

    Buffer Video Encoder
  112. Waiting of Muxer Initialization Muxer Audio Track Video Track Output

    Buffer Release Output Buffer Video Encoder
  113. Waiting of Muxer Initialization Muxer Audio Track Video Track Output

    Buffer Release Output Buffer Video Encoder
  114. Waiting of Muxer Initialization Muxer Audio Track Video Track Output

    Buffer Release Output Buffer Video Encoder
  115. Waiting of Muxer Initialization Muxer Audio Track Video Track Output

    Buffer Video Encoder X MUXER_STATE_UNINITIALIZED
  116. Waiting of Muxer Initialization Muxer Audio Track Video Track Queue

    Video Encoder Output Buffer Release Output Buffer Shallow copy MUXER_STATE_UNINITIALIZED
  117. Waiting of Muxer Initialization Muxer Audio Track Video Track Video

    Encoder MUXER_STATE_STARTED Output Buffer Release Output buffer Pass Output Buffer Queue
  118. Waiting of Muxer Initialization Muxer Audio Track Video Track Queue

    Video Encoder MUXER_STATE_STARTED Output Buffer Release Output buffer
  119. Waiting of Muxer Initialization Muxer Audio Track Video Track Video

    Encoder MUXER_STATE_STARTED Output Buffer Release Output buffer Pass Output Buffer Queue
  120. Out of Sync Issue Muxer Audio Track Video Track Pass

    Output Buffer Queue Video Encoder MUXER_STATE_STARTED Output Buffer Release Output buffer Shallow copy
  121. Out of Sync Issue Muxer Audio Track Video Track Pass

    Output Buffer Queue Video Encoder MUXER_STATE_STARTED Output Buffer Release Output Buffer Deep copy > Don’t rely on release timing of the device
  122. Troubleshooting Video Issues Quality Issue Orientation Issue Audio Issue 0

    bit/s Issue Out of Sync Audio and Video Issue > Audio Distortion Issue
  123. Audio Distortion Problem Original Video Transcoded Video

  124. Original Audio Bitrate Audio Distortion Problem Extract the bitrate Extractor

    96 kbit/s
  125. Audio Distortion Problem After Trimming Extract the bitrate File Analysis

    123 kbit/s Extract the bitrate Extractor 24 kbit/s
  126. Audio Distortion Problem Audio Format Video Format Container Audio Decoder

    Audio Encoder Muxer Extractor Audio Down Sampler Audio Format Container Video Format > We transcoded the audio track and resampled the ByteBuffer of the audio > We don’t need to resample this problematic audio track 24 kbit/s (123 kbit/s) 24 kbit/s (123 kbit/s) 24 kbit/s (123 kbit/s) 24 kbit/s (123 kbit/s)
  127. Audio Distortion Problem > Cruiser can detect this issue by

    extracting 24 kbit/s > Cruiser bypasses the resampling process if it has 24 kbit/s Audio Format Video Format Container Audio Decoder Audio Encoder Muxer Extractor Audio Down Sampler Audio Format Container Video Format X X X Audio Stream Bypass 24 kbit/s (123 kbit/s) 24 kbit/s (123 kbit/s)
  128. Troubleshooting Video issues Quality issue Orientation issue Audio issue 0

    bit/s Issue Out of Sync Audio and Video Issue Audio Distortion Issue
  129. Do not count on Android devices You're the only hope

  130. Have I found a silver bullet?

  131. Blacklisted Devices *H*-E*** *H*-0** S*-0** S*-0** R**** **** * R****

    **** * *H*-E*** V**-* *-0** 2***** *-0** *-0** E**-* E**-* F**-L** P*** *L*-* V**-* W**-* *T*-A* *L*-* V**-* ***0* M** **V-***9 **V-**9 **e*** *R *C-**F C**** C**** *R*-U*** *R*-**9 D**-***L *i*** * **2-***Y ****H **F-***0 **F-***0 **F-**9 **F-***0 **A_***0 **R-***0 **Y-*L **R-***0 **E-***0 **E-***2 **R-***0 **Y-* *E-***0 **A-**1 **A-**1 ****W *7-**0 ****W **V-***L **E-**2 **E-**4 **E-**1 **E-**3 **E-***0 X
  132. In-progress

  133. Cruiser v1.2 features > Make a video with a static

    image Cruiser v1.3 features > Crop and rotate a video What‘s Next? Cruiser v2.0 features > Each component runs on multiple threads
  134. None
  135. Thank you