havlenapetr-FFMpeg OnVideoSizeChangedListener接口的实现
2012-06-09 10:01
597 查看
转载自:http://blog.csdn.net/yarpee/article/details/6910877
moruite在他的文章/article/2776576.html里说到了用havlenapetr-FFMpeg播放视频花屏的问题,需要自己实现OnVideoSizeChangedListener接口。网上没有找到相关的资料,自己研究了下。秉着OpenSource的观念,取之于havlenapetr-FFMpeg,还给世界。
FFMpegPlayer中添加如下接口和变量:
FFMpegPlayer中修改如下函数:
FFMpegMovieViewAndroid中修改如下函数:
C代码修改Mediaplayer.cpp中的如下函数:
moruite在他的文章/article/2776576.html里说到了用havlenapetr-FFMpeg播放视频花屏的问题,需要自己实现OnVideoSizeChangedListener接口。网上没有找到相关的资料,自己研究了下。秉着OpenSource的观念,取之于havlenapetr-FFMpeg,还给世界。
FFMpegPlayer中添加如下接口和变量:
// Add by yarpee start /** * Interface definition of a callback to be invoked when the * video size is first known or updated */ public interface OnVideoSizeChangedListener { /** * Called to indicate the video size * * @param mp the MediaPlayer associated with this callback * @param width the width of the video * @param height the height of the video */ public void onVideoSizeChanged(FFMpegPlayer mp, int width, int height); } /** * Register a callback to be invoked when the video size is * known or updated. * * @param listener the callback that will be run */ public void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener) { Log.d(TAG, "setOnVideoSizeChangedListener"); mOnVideoSizeChangedListener = listener; } private static OnVideoSizeChangedListener mOnVideoSizeChangedListener; // Add by yarpee end
FFMpegPlayer中修改如下函数:
private static void postEventFromNative(Object mediaplayer_ref, int what, int arg1, int arg2, Object obj) { switch(what) { case MEDIA_INFO_FRAMERATE_VIDEO: Log.d(TAG, "Video fps:" + arg1); break; case MEDIA_INFO_FRAMERATE_AUDIO: Log.d(TAG, "Audio fps:" + arg1); break; case MEDIA_SET_VIDEO_SIZE: Log.d(TAG, "Video width:" + arg1 + " height:" + arg2); if(mOnVideoSizeChangedListener != null) { Log.d(TAG, "mOnVideoSizeChangedListener != null"); mOnVideoSizeChangedListener.onVideoSizeChanged(null, arg1, arg2); } else { Log.d(TAG, "mOnVideoSizeChangedListener == null"); } } }
FFMpegMovieViewAndroid中修改如下函数:
private void openVideo(SurfaceHolder surfHolder) { try { mPlayer.setDisplay(surfHolder); // Add by yarpee // 必须在prepare前设置listener mPlayer.setOnVideoSizeChangedListener(new FFMpegPlayer.OnVideoSizeChangedListener() { public void onVideoSizeChanged(FFMpegPlayer mp, int width, int height) { // 注意此处不能用mp,mp为null int videoWidth = mPlayer.getVideoWidth(); int videoHeight = mPlayer.getVideoHeight(); if(videoHeight != 0 && videoWidth != 0) { Log.d(TAG, "setFixedSize width:" + videoWidth + " height:" + videoHeight); getHolder().setFixedSize(videoWidth, videoHeight); } } }); mPlayer.prepare(); } catch (IllegalStateException e) { Log.e(TAG, "Couldn't prepare player: " + e.getMessage()); } catch (IOException e) { Log.e(TAG, "Couldn't prepare player: " + e.getMessage()); } }
C代码修改Mediaplayer.cpp中的如下函数:
status_t MediaPlayer::prepare() { status_t ret; mCurrentState = MEDIA_PLAYER_PREPARING; av_log_set_callback(ffmpegNotify); if ((ret = prepareVideo()) != NO_ERROR) { mCurrentState = MEDIA_PLAYER_STATE_ERROR; return ret; } if ((ret = prepareAudio()) != NO_ERROR) { mCurrentState = MEDIA_PLAYER_STATE_ERROR; return ret; } mCurrentState = MEDIA_PLAYER_PREPARED; // Add by yarpee notify(5, mVideoWidth, mVideoHeight); return NO_ERROR; }
相关文章推荐
- havlenapetr-FFMpeg OnVideoSizeChangedListener接口的实现
- havlenapetr-FFMpeg OnVideoSizeChangedListener接口的实现
- havlenapetr-FFMpeg实现OnVideoSizeChangedListener
- ToggleButton 的功能 实现(同过实现OncheckChangeListener接口)
- SeekBar的使用(一):实现OnSeekBarChangListener
- 微信硬件蓝牙jsapi开发之onWXDeviceStateChange接口实现(12)--监听蓝牙状态变化接口
- 用于创建实现 System.ComponentModel.INotifyPropertyChanged 接口的动态类型,并添加各个 public 属性的定义
- ffmpeg打开视频解码器失败:Could not find codec parameters for stream 0 (Video: h264): unspecified size
- RadioGroup调用check(id)方法时,OnCheckedChangedListener被多次回调问题
- Kafka集成Spring-AcknowledgeMessageListener接口实现
- 【mfc】利用到MFC菜单、字体对话框、OnSize函数实现简易记事本
- 自定义view中onMeasure、onLayout、onDraw、onFinishInflate、onSizeChanged方法调用时机
- CheckBox的OnCheckChangedListener和OnClickListener的区别
- AppBarLayout.OnOffsetChangedListener的使用
- 通过HttpSessionListener监听接口实现对当前在线人数的监听
- ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题
- Android实战简易教程<五十四>(通过实现OnScrollListener接口实现下拉刷新功能)
- Size Balance Tree和Treap的ADT接口和实现
- Observer + onChange 实现video和images的监控
- 关于View的onMeasure()、onSizeChanged()、onLayout()、onDraw()调用顺序