android视频播放与调试

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播放。

在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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值