http://blog.csdn.net/jwzhangjie/article/details/9083827

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

分类: android多媒体开发视频播放器制作SDL 1023人阅读 评论(0) 收藏 举报 android视频播放器开发 在上一章

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 plain copy print ?
  1. ###########################
  2. #
  3. # SDL shared library
  4. #
  5. ###########################
  6. include $(CLEAR_VARS)
  7. LOCAL_MODULE := SDL2
  8. LOCAL_ARM_MODE=arm
  9. LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
  10. LOCAL_SRC_FILES := \
  11. $(subst $(LOCAL_PATH)/,, \
  12. $(wildcard $(LOCAL_PATH)/src/*.c) \
  13. $(wildcard $(LOCAL_PATH)/src/audio/*.c) \
  14. $(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \
  15. $(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \
  16. $(LOCAL_PATH)/src/atomic/SDL_atomic.c \
  17. $(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \
  18. $(wildcard $(LOCAL_PATH)/src/core/android/*.cpp) \
  19. $(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \
  20. $(wildcard $(LOCAL_PATH)/src/events/*.c) \
  21. $(wildcard $(LOCAL_PATH)/src/file/*.c) \
  22. $(wildcard $(LOCAL_PATH)/src/haptic/*.c) \
  23. $(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \
  24. $(wildcard $(LOCAL_PATH)/src/joystick/*.c) \
  25. $(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \
  26. $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \
  27. $(wildcard $(LOCAL_PATH)/src/power/*.c) \
  28. $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \
  29. $(wildcard $(LOCAL_PATH)/src/render/*.c) \
  30. $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \
  31. $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \
  32. $(wildcard $(LOCAL_PATH)/src/thread/*.c) \
  33. $(wildcard $(LOCAL_PATH)/src/thread/pthread/*.c) \
  34. $(wildcard $(LOCAL_PATH)/src/timer/*.c) \
  35. $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \
  36. $(wildcard $(LOCAL_PATH)/src/video/*.c) \
  37. $(wildcard $(LOCAL_PATH)/src/video/android/*.c))
  38. LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES
  39. LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog
  40. include $(BUILD_SHARED_LIBRARY)
三、如果直接编译的话会提示如下错误 [cpp] view plain copy print ?
  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 plain copy print ?
  1. APP_ABI := armeabi
  2. APP_PLATFORM := android-9
四、在jni目录终端下运行ndk-build,就会编译出libSDL2.so,编译过程如下: [cpp] view plain copy print ?
  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库后,我们就可以调用它的相关函数来实现我们的功能了。

更多相关文章

  1. android xml布局文件属性说明
  2. Android 5.1 API 22 所有sdk文件下载地址
  3. 一个android参考网站,工具+源码
  4. android源码下载-等待提示动画
  5. 近百android程序源码贡献
  6. Android 远程视频监控程序源码
  7. android 简易任务管理器源码
  8. Android文件的读写
  9. Android xml资源文件中@、@android:type、@*、?、@+引用写法含义

随机推荐

  1. Android(安卓)网络编程 API笔记 - java.n
  2. Android热修复技术
  3. Android视频录制命令screenrecord
  4. Android(安卓)Studio的gradle配置
  5. Android(安卓)实例剖析之 notepad
  6. 【转】Android(安卓)性能优化之内存检测
  7. cocos2d-x 播放视频 on Android
  8. 《第一行代码》-第一次学习笔记(第一章).md
  9. android项目R文件丢失怎么办
  10. android 的NDK在Windwos环境搭建(二)