Android本地视频播放器开发--SDL编译

来源:互联网 发布:python .fillna 编辑:程序博客网 时间:2024/06/03 21:38
在上一章 

Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)中使用OpenSL ES来播放视频的声音,遗留的问题是声音的不同步,由于视频实现部分也要同步,而且音视频也要同步,所以音频部分就不单独同步问题,当同时播放音视频的时候进行两者的同步问题,对于视频显示部分最后是要使用OpenGL es来实现,由于SDL可以和OpenGL ES进行搭配,所以使用SDL+OpenGL ES进行显示视频,所以这章将要讲解的是SDL的交叉编译.

一、到官网下载http://www.libsdl.org/hg.php 下载2.0的源码也可以通过hg来clone最新的源码
hg clone http://hg.libsdl.org/SDL
二、其实1.3以后的版本就添加了android的支持,所以下载完源码后,在SDL目录下创建一个jni的目录,然后将原先SDL目录下面的文件以及文件夹都拷贝到jni目录下面,在jni目录下面我们会看见一个android.mk的文件,这就是官方给我们编写的编译文件,由于手机基本上都是使用的arm编译器,所以我在里面添加了LOCAL_ARM_MODE=arm,模块的编译使用arm编译器来编译,具体的内容如下:
[cpp] view plaincopy
  1. ###########################  
  2. #  
  3. # SDL shared library  
  4. #  
  5. ###########################  
  6.   
  7. include $(CLEAR_VARS)  
  8.   
  9. LOCAL_MODULE := SDL2  
  10. LOCAL_ARM_MODE=arm  
  11. LOCAL_C_INCLUDES := $(LOCAL_PATH)/include  
  12.   
  13. LOCAL_SRC_FILES := \  
  14.         $(subst $(LOCAL_PATH)/,, \  
  15.         $(wildcard $(LOCAL_PATH)/src/*.c) \ 
  16.         $(wildcard $(LOCAL_PATH)/src/audio/*.c) \ 
  17.         $(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \ 
  18.         $(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \ 
  19.         $(LOCAL_PATH)/src/atomic/SDL_atomic.c \ 
  20.         $(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \ 
  21.         $(wildcard $(LOCAL_PATH)/src/core/android/*.cpp) \ 
  22.         $(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \ 
  23.         $(wildcard $(LOCAL_PATH)/src/events/*.c) \ 
  24.         $(wildcard $(LOCAL_PATH)/src/file/*.c) \ 
  25.         $(wildcard $(LOCAL_PATH)/src/haptic/*.c) \ 
  26.         $(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \ 
  27.         $(wildcard $(LOCAL_PATH)/src/joystick/*.c) \ 
  28.         $(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \ 
  29.         $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \ 
  30.         $(wildcard $(LOCAL_PATH)/src/power/*.c) \ 
  31.         $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \ 
  32.         $(wildcard $(LOCAL_PATH)/src/render/*.c) \ 
  33.         $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \  
  34.         $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \  
  35.         $(wildcard $(LOCAL_PATH)/src/thread/*.c) \  
  36.         $(wildcard $(LOCAL_PATH)/src/thread/pthread/*.c) \  
  37.         $(wildcard $(LOCAL_PATH)/src/timer/*.c) \  
  38.         $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \  
  39.         $(wildcard $(LOCAL_PATH)/src/video/*.c) \  
  40.         $(wildcard $(LOCAL_PATH)/src/video/android/*.c))  
  41.   
  42. LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES  
  43. LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog  
  44.   
  45. include $(BUILD_SHARED_LIBRARY)  
三、如果直接编译的话会提示如下错误
[cpp] view plaincopy
  1. /home/SDL/jni/src/core/android/SDL_android.cpp:30:21: fatal error: EGL/egl.h: No such file or directory  
查看EGL的支持是在2.3版本以上,所以我们需要添加平台的支持,所以需要在jni目录下面创建一个Application.mk文件来指定编译平台,内容如下:
[cpp] view plaincopy
  1. APP_ABI := armeabi  
  2. APP_PLATFORM := android-9  
四、在jni目录终端下运行ndk-build,就会编译出libSDL2.so,编译过程如下:
[cpp] view plaincopy
  1. root@zhangjie:/home/SDL/jni# ndk-build  
  2. Compile arm    : SDL2 <= SDL_assert.c  
  3. Compile arm    : SDL2 <= SDL.c  
  4. Compile arm    : SDL2 <= SDL_error.c  
  5. Compile arm    : SDL2 <= SDL_fatal.c  
  6. Compile arm    : SDL2 <= SDL_hints.c  
  7. Compile arm    : SDL2 <= SDL_log.c  
  8. Compile arm    : SDL2 <= SDL_audio.c  
  9. Compile arm    : SDL2 <= SDL_audiocvt.c  
  10. Compile arm    : SDL2 <= SDL_audiodev.c  
  11. Compile arm    : SDL2 <= SDL_audiotypecvt.c  
  12. Compile arm    : SDL2 <= SDL_mixer.c  
  13. Compile arm    : SDL2 <= SDL_wave.c  
  14. Compile arm    : SDL2 <= SDL_androidaudio.c  
  15. Compile arm    : SDL2 <= SDL_dummyaudio.c  
  16. Compile arm    : SDL2 <= SDL_atomic.c  
  17. Compile arm    : SDL2 <= SDL_spinlock.c  
  18. Compile++ arm    : SDL2 <= SDL_android.cpp  
  19. Compile arm    : SDL2 <= SDL_cpuinfo.c  
  20. Compile arm    : SDL2 <= SDL_clipboardevents.c  
  21. Compile arm    : SDL2 <= SDL_dropevents.c  
  22. Compile arm    : SDL2 <= SDL_events.c  
  23. Compile arm    : SDL2 <= SDL_gesture.c  
  24. Compile arm    : SDL2 <= SDL_keyboard.c  
  25. Compile arm    : SDL2 <= SDL_mouse.c  
  26. Compile arm    : SDL2 <= SDL_quit.c  
  27. Compile arm    : SDL2 <= SDL_touch.c  
  28. Compile arm    : SDL2 <= SDL_windowevents.c  
  29. Compile arm    : SDL2 <= SDL_rwops.c  
  30. Compile arm    : SDL2 <= SDL_haptic.c  
  31. Compile arm    : SDL2 <= SDL_syshaptic.c  
  32. Compile arm    : SDL2 <= SDL_gamecontroller.c  
  33. Compile arm    : SDL2 <= SDL_joystick.c  
  34. Compile arm    : SDL2 <= SDL_sysjoystick.c  
  35. Compile arm    : SDL2 <= SDL_sysloadso.c  
  36. Compile arm    : SDL2 <= SDL_power.c  
  37. Compile arm    : SDL2 <= SDL_syspower.c  
  38. Compile arm    : SDL2 <= SDL_render.c  
  39. Compile arm    : SDL2 <= SDL_yuv_mmx.c  
  40. Compile arm    : SDL2 <= SDL_yuv_sw.c  
  41. Compile arm    : SDL2 <= SDL_render_d3d.c  
  42. Compile arm    : SDL2 <= SDL_render_gles2.c  
  43. Compile arm    : SDL2 <= SDL_shaders_gles2.c  
  44. Compile arm    : SDL2 <= SDL_render_gles.c  
  45. Compile arm    : SDL2 <= SDL_render_gl.c  
  46. Compile arm    : SDL2 <= SDL_shaders_gl.c  
  47. Compile arm    : SDL2 <= SDL_render_psp.c  
  48. Compile arm    : SDL2 <= SDL_blendfillrect.c  
  49. Compile arm    : SDL2 <= SDL_blendline.c  
  50. Compile arm    : SDL2 <= SDL_blendpoint.c  
  51. Compile arm    : SDL2 <= SDL_drawline.c  
  52. Compile arm    : SDL2 <= SDL_drawpoint.c  
  53. Compile arm    : SDL2 <= SDL_render_sw.c  
  54. Compile arm    : SDL2 <= SDL_rotate.c  
  55. Compile arm    : SDL2 <= SDL_getenv.c  
  56. Compile arm    : SDL2 <= SDL_iconv.c  
  57. Compile arm    : SDL2 <= SDL_malloc.c  
  58. Compile arm    : SDL2 <= SDL_qsort.c  
  59. Compile arm    : SDL2 <= SDL_stdlib.c  
  60. Compile arm    : SDL2 <= SDL_string.c  
  61. Compile arm    : SDL2 <= SDL_thread.c  
  62. Compile arm    : SDL2 <= SDL_syscond.c  
  63. Compile arm    : SDL2 <= SDL_sysmutex.c  
  64. Compile arm    : SDL2 <= SDL_syssem.c  
  65. Compile arm    : SDL2 <= SDL_systhread.c  
  66. Compile arm    : SDL2 <= SDL_timer.c  
  67. Compile arm    : SDL2 <= SDL_systimer.c  
  68. Compile arm    : SDL2 <= SDL_blit_0.c  
  69. Compile arm    : SDL2 <= SDL_blit_1.c  
  70. Compile arm    : SDL2 <= SDL_blit_A.c  
  71. Compile arm    : SDL2 <= SDL_blit_auto.c  
  72. Compile arm    : SDL2 <= SDL_blit.c  
  73. Compile arm    : SDL2 <= SDL_blit_copy.c  
  74. Compile arm    : SDL2 <= SDL_blit_N.c  
  75. Compile arm    : SDL2 <= SDL_blit_slow.c  
  76. Compile arm    : SDL2 <= SDL_bmp.c  
  77. Compile arm    : SDL2 <= SDL_clipboard.c  
  78. Compile arm    : SDL2 <= SDL_fillrect.c  
  79. Compile arm    : SDL2 <= SDL_pixels.c  
  80. Compile arm    : SDL2 <= SDL_rect.c  
  81. Compile arm    : SDL2 <= SDL_RLEaccel.c  
  82. Compile arm    : SDL2 <= SDL_shape.c  
  83. Compile arm    : SDL2 <= SDL_stretch.c  
  84. Compile arm    : SDL2 <= SDL_surface.c  
  85. Compile arm    : SDL2 <= SDL_video.c  
  86. Compile arm    : SDL2 <= SDL_androidclipboard.c  
  87. Compile arm    : SDL2 <= SDL_androidevents.c  
  88. Compile arm    : SDL2 <= SDL_androidgl.c  
  89. Compile arm    : SDL2 <= SDL_androidkeyboard.c  
  90. Compile arm    : SDL2 <= SDL_androidtouch.c  
  91. Compile arm    : SDL2 <= SDL_androidvideo.c  
  92. Compile arm    : SDL2 <= SDL_androidwindow.c  
  93. StaticLibrary  : libstdc++.a  
  94. SharedLibrary  : libSDL2.so  
  95. Install        : libSDL2.so => libs/armeabi/libSDL2.so  
编译出sdl库后,我们就可以调用它的相关函数来实现我们的功能了。
下一章将要使用ffmpeg来解码视频文件
0 0
原创粉丝点击