1.
public class MainActivity extends Activity { protected static final String TAG = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(R.layout.activity_main); final VideoView videoView = (VideoView)findViewById(R.id.videoView1); videoView.setVideoPath("/sdcard/Movies/navy.3gp"); MediaController mc = new MediaController(this); videoView.setMediaController(mc); videoView.requestFocus(); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // TODO Auto-generated method stub Log.v(TAG, "onPrepared"); videoView.start(); } }); } public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
直接使用AVD调试会出现如下错误:E/MediaPlayer(24720): error (1, -2147483648),可能的原因有两点:
- 文件的封装格式不对,最好是3gp或者mp4
- 文件路径不对(或者是找不到文件)
格式错误直接转一下就行了,文件路径自己查。我的错误比较可笑,就是当你用手机调试的时候,习惯手机直接连接到pc,然后调试。我就调啊调啊,一直出现上面的问题,其实这时候sd卡挂接到pc
上面去了,你是访问不到的。所以必须断开连接。不过在模拟器中访问sd卡,也是同样的问题,暂时没解决,就是访问不到。
2
同时播放两个视频
都是用mediaplayer解码,使用surfaceview播放。
![](http://images.cnitblog.com/blog/394673/201301/10103906-beb6a81eb0f34cb9bf44226dd7a97a74.jpg)
在Activity中播放一个视频,在service中播放一个视频。使用两个布局文件。问题是:service服务中的surfaceCreated函数不会被触发
其实是view的问题,如果你的surfaceview被遮盖就会有这样的问题,所以为了解决这个问题,必须把2个view分层显示,于是就使用了
WindowManager服务,把service中的surfaceview置于顶层才能解决问题。
3
libavformat/libavformat.a(log2_tab.o):(.rodata+0x0): multiple definition of `ff_log2_tab' libavcodec/libavcodec.a(log2_tab.o):(.rodata+0x0): first defined here libavutil/libavutil.a(log2_tab.o):(.rodata+0x0): multiple definition of `ff_log2_tab' libavcodec/libavcodec.a(log2_tab.o):(.rodata+0x0): first defined here
移植ffmpeg的时候如果遇到这样的情况,在两个文件的Makefile中删掉一个log2_tab.o文件就可以了
4
/home/seuic-exp/video/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/http://www.cnblogs.com/http://www.cnblogs.com/arm-linux-androideabi/bin/ld: error: cannot find -ljnigraphics
在ndk-build的时候会出现这个问题,吧.c文件中的<jni.h>改成"jni.h",不过我也不知道为什么。
5
在ndk-build的时候如果出现non-numeric second argument to `wordlist' function: ''. 这个error是由于jni上层的AndroidManifest.xml的问题导致的。所以在生成so的时候,先把这个文件删除编译即可。
编译库的时候一定要与工程文件在一起是因为jni接口与包名的问题,下次修改jni层,只需要更新库文件,src改不改无所谓。
6
关于ffmpeg中avformat_open_input 返回-1的问题
有这样几种可能:
- 在config.sh中demuxer被disable掉了路径错误,
- 比如在jni中访问sd卡中的文件要加/mnt /mnt/sdcard/*
- 就是/mnt/sdcard/*文件格式不支持 通常支持mp4 avi flv
- pFormatCtx 没有赋值为NULL