应用大体是这样的,我在ndk端使用socket来接受网络摄像机的视频流然后使用ffmpeg解码,再使用ndk里面的ativewindow来播放,这些都已经做好了。然后在java代码这一端,使用surfaceView来播放,具体的代码为:
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {
// TODO Auto-generated method stub
Sip1303Decoder.setSurface(surfaceHolder.getSurface(), width, height);//这个是ndk里的方法
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
// TODO Auto-generated method stub
Sip1303Decoder.setSurface(null, 0, 0);
}
对应的ndk方法为:setSurface(JNIEnv *env, jobject pSurface, int m_width, int m_height)
window = ANativeWindow_fromSurface(env, pSurface);
ANativeWindow_setBuffersGeometry(window, 0, 0, WINDOW_FORMAT_RGBA_8888);
然后竖屏播放正常,显示为:
当切换为横屏时(屏幕切换时,我设置了surfaceView的layoutparams属性,宽度和高度分别是手机屏幕的高度和宽度,也就是充满屏幕显示),然后视频就显示成这样了:
当然我想要视频充满屏幕,每次切换成竖屏时都是正常的,因为不理解上面ndk方法里的那两句代码,所以是不是我哪里没写好?