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

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

 

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

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

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编译器来编译,具体的内容如下:
  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) 
###########################
#
# SDL shared library
#
###########################

include $(CLEAR_VARS)

LOCAL_MODULE := SDL2
LOCAL_ARM_MODE=arm
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

LOCAL_SRC_FILES := \
        $(subst $(LOCAL_PATH)/,, \
        $(wildcard $(LOCAL_PATH)/src/*.c) \
        $(wildcard $(LOCAL_PATH)/src/audio/*.c) \
        $(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \
        $(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \
        $(LOCAL_PATH)/src/atomic/SDL_atomic.c \
        $(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \
        $(wildcard $(LOCAL_PATH)/src/core/android/*.cpp) \
        $(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \
        $(wildcard $(LOCAL_PATH)/src/events/*.c) \
        $(wildcard $(LOCAL_PATH)/src/file/*.c) \
        $(wildcard $(LOCAL_PATH)/src/haptic/*.c) \
        $(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \
        $(wildcard $(LOCAL_PATH)/src/joystick/*.c) \
        $(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \
        $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \
        $(wildcard $(LOCAL_PATH)/src/power/*.c) \
        $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \
        $(wildcard $(LOCAL_PATH)/src/render/*.c) \
        $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \
        $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \
        $(wildcard $(LOCAL_PATH)/src/thread/*.c) \
        $(wildcard $(LOCAL_PATH)/src/thread/pthread/*.c) \
        $(wildcard $(LOCAL_PATH)/src/timer/*.c) \
        $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \
        $(wildcard $(LOCAL_PATH)/src/video/*.c) \
        $(wildcard $(LOCAL_PATH)/src/video/android/*.c))

LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES
LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog

include $(BUILD_SHARED_LIBRARY)
三、如果直接编译的话会提示如下错误
  1. /home/SDL/jni/src/core/android/SDL_android.cpp:30:21: fatal error: EGL/egl.h: No such file or directory 
/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文件来指定编译平台,内容如下:
  1. APP_ABI := armeabi 
  2. APP_PLATFORM := android-9 
APP_ABI := armeabi
APP_PLATFORM := android-9
四、在jni目录终端下运行ndk-build,就会编译出libSDL2.so,编译过程如下:
  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 
root@zhangjie:/home/SDL/jni# ndk-build
Compile arm    : SDL2 <= SDL_assert.c
Compile arm    : SDL2 <= SDL.c
Compile arm    : SDL2 <= SDL_error.c
Compile arm    : SDL2 <= SDL_fatal.c
Compile arm    : SDL2 <= SDL_hints.c
Compile arm    : SDL2 <= SDL_log.c
Compile arm    : SDL2 <= SDL_audio.c
Compile arm    : SDL2 <= SDL_audiocvt.c
Compile arm    : SDL2 <= SDL_audiodev.c
Compile arm    : SDL2 <= SDL_audiotypecvt.c
Compile arm    : SDL2 <= SDL_mixer.c
Compile arm    : SDL2 <= SDL_wave.c
Compile arm    : SDL2 <= SDL_androidaudio.c
Compile arm    : SDL2 <= SDL_dummyaudio.c
Compile arm    : SDL2 <= SDL_atomic.c
Compile arm    : SDL2 <= SDL_spinlock.c
Compile++ arm    : SDL2 <= SDL_android.cpp
Compile arm    : SDL2 <= SDL_cpuinfo.c
Compile arm    : SDL2 <= SDL_clipboardevents.c
Compile arm    : SDL2 <= SDL_dropevents.c
Compile arm    : SDL2 <= SDL_events.c
Compile arm    : SDL2 <= SDL_gesture.c
Compile arm    : SDL2 <= SDL_keyboard.c
Compile arm    : SDL2 <= SDL_mouse.c
Compile arm    : SDL2 <= SDL_quit.c
Compile arm    : SDL2 <= SDL_touch.c
Compile arm    : SDL2 <= SDL_windowevents.c
Compile arm    : SDL2 <= SDL_rwops.c
Compile arm    : SDL2 <= SDL_haptic.c
Compile arm    : SDL2 <= SDL_syshaptic.c
Compile arm    : SDL2 <= SDL_gamecontroller.c
Compile arm    : SDL2 <= SDL_joystick.c
Compile arm    : SDL2 <= SDL_sysjoystick.c
Compile arm    : SDL2 <= SDL_sysloadso.c
Compile arm    : SDL2 <= SDL_power.c
Compile arm    : SDL2 <= SDL_syspower.c
Compile arm    : SDL2 <= SDL_render.c
Compile arm    : SDL2 <= SDL_yuv_mmx.c
Compile arm    : SDL2 <= SDL_yuv_sw.c
Compile arm    : SDL2 <= SDL_render_d3d.c
Compile arm    : SDL2 <= SDL_render_gles2.c
Compile arm    : SDL2 <= SDL_shaders_gles2.c
Compile arm    : SDL2 <= SDL_render_gles.c
Compile arm    : SDL2 <= SDL_render_gl.c
Compile arm    : SDL2 <= SDL_shaders_gl.c
Compile arm    : SDL2 <= SDL_render_psp.c
Compile arm    : SDL2 <= SDL_blendfillrect.c
Compile arm    : SDL2 <= SDL_blendline.c
Compile arm    : SDL2 <= SDL_blendpoint.c
Compile arm    : SDL2 <= SDL_drawline.c
Compile arm    : SDL2 <= SDL_drawpoint.c
Compile arm    : SDL2 <= SDL_render_sw.c
Compile arm    : SDL2 <= SDL_rotate.c
Compile arm    : SDL2 <= SDL_getenv.c
Compile arm    : SDL2 <= SDL_iconv.c
Compile arm    : SDL2 <= SDL_malloc.c
Compile arm    : SDL2 <= SDL_qsort.c
Compile arm    : SDL2 <= SDL_stdlib.c
Compile arm    : SDL2 <= SDL_string.c
Compile arm    : SDL2 <= SDL_thread.c
Compile arm    : SDL2 <= SDL_syscond.c
Compile arm    : SDL2 <= SDL_sysmutex.c
Compile arm    : SDL2 <= SDL_syssem.c
Compile arm    : SDL2 <= SDL_systhread.c
Compile arm    : SDL2 <= SDL_timer.c
Compile arm    : SDL2 <= SDL_systimer.c
Compile arm    : SDL2 <= SDL_blit_0.c
Compile arm    : SDL2 <= SDL_blit_1.c
Compile arm    : SDL2 <= SDL_blit_A.c
Compile arm    : SDL2 <= SDL_blit_auto.c
Compile arm    : SDL2 <= SDL_blit.c
Compile arm    : SDL2 <= SDL_blit_copy.c
Compile arm    : SDL2 <= SDL_blit_N.c
Compile arm    : SDL2 <= SDL_blit_slow.c
Compile arm    : SDL2 <= SDL_bmp.c
Compile arm    : SDL2 <= SDL_clipboard.c
Compile arm    : SDL2 <= SDL_fillrect.c
Compile arm    : SDL2 <= SDL_pixels.c
Compile arm    : SDL2 <= SDL_rect.c
Compile arm    : SDL2 <= SDL_RLEaccel.c
Compile arm    : SDL2 <= SDL_shape.c
Compile arm    : SDL2 <= SDL_stretch.c
Compile arm    : SDL2 <= SDL_surface.c
Compile arm    : SDL2 <= SDL_video.c
Compile arm    : SDL2 <= SDL_androidclipboard.c
Compile arm    : SDL2 <= SDL_androidevents.c
Compile arm    : SDL2 <= SDL_androidgl.c
Compile arm    : SDL2 <= SDL_androidkeyboard.c
Compile arm    : SDL2 <= SDL_androidtouch.c
Compile arm    : SDL2 <= SDL_androidvideo.c
Compile arm    : SDL2 <= SDL_androidwindow.c
StaticLibrary  : libstdc++.a
SharedLibrary  : libSDL2.so
Install        : libSDL2.so => libs/armeabi/libSDL2.so
编译出sdl库后,我们就可以调用它的相关函数来实现我们的功能了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小学期课程资料 - 基于ffmpeg sdl视频播放器的制作 在这个小学期课程中,我们学习并掌握了使用ffmpeg和sdl来制作一个视频播放器的技术。ffmpeg是一个开源的音视频处理工具,它可以进行音视频的编解码、转换和播放等操作,而sdl是一个多媒体库,能够提供音频、视频、输入和输出等功能。通过结合这两个工具,我们可以实现一个简单而强大的视频播放器。 在课程中,我们首先学习了ffmpeg的基本使用方法,包括音视频的解码和播放等操作。接着,我们深入学习了sdl库的使用,掌握了如何使用sdl来创建窗口、加载视频、播放音频等基本操作。在掌握了这些基础知识后,我们着手开始制作视频播放器的项目。 在制作过程中,我们遇到了很多挑战,比如如何实现音视频的同步播放、如何处理不同格式的视频文件、如何提高播放器的性能等等。但通过课程的学习和老师的指导,我们一步步克服了这些问题,最终成功地完成了视频播放器的制作。 通过这个小学期课程,我们不仅学到了如何使用ffmpeg和sdl来制作视频播放器,还学会了如何团队合作、如何解决技术问题、如何提高自己的技术能力等。这些知识和经验将对我们今后的学习和工作都有很大的帮助。感谢老师们的指导和教导,让我们在这个小学期中收获了很多宝贵的经验和知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值