关于android视频播放显示区域不正常的问题,一些处理方法
2014-09-04 11:51
1001 查看
<span style="font-size:18px;">一直以来视频显示不正常的问题都困扰了好久,特别是不是用标准的Mediaplayer来播放的时候,今天就来总结一下</span>
</pre><pre name="code" class="java">public static final String VIDEO_AXITS_PATH = "/sys/class/video/axis"; // 视频显示区域 public static final String DISPLAY_AXIS_PATH = "/sys/class/display/axis"; //ui显示区域 public static final String OSD0_SCALE_AXIS_PATH = "/sys/class/graphics/fb0/scale_axis"; public static final String OSD1_SCALE_AXIS_PATH = "/sys/class/graphics/fb1/scale_axis"; public static final String REQUEST_2X_SCALE_PATH = "/sys/class/graphics/fb0/request2XScale"; //ui显示区域 public static final String OSD1_SCALE_PATH = "/sys/class/graphics/fb1/scale"; public static final String OSD_PATH = "/sys/class/graphics/fb0/blank"; public static final String[] MODES = {"1080i", "1080p", "720p", "480i", "480p", "480cvbs", "576i", "576p", "576cvbs"}; public static final int[] WIDTH_DEFAULT = {1920, 1920, 1280, 720, 720, 720, 720, 720, 720}; public static final int[] HEIGHT_DEFAULT = {1080, 1080, 720, 480, 480, 480, 576, 576, 576};
writeSysFile("/sys/class/graphics/fb0/blank","2"); //这个是开启关闭osd 2是开启 1是关闭 writeSysFile("/sys/class/video/disable_video","0"); //视频显示开启还是关闭,0是开启,1是关闭
</pre><pre name="code" class="java">//这个完全可以替代 echo val > path
<pre name="code" class="java">public static int writeFile(String path, String val) { try { BufferedWriter writer = new BufferedWriter(new FileWriter(path), 64); try { writer.write(val); } finally { writer.close(); } return 0; } catch (IOException e) { Log.e(TAG, "IO Exception when write: " + path, e); return 1; } }
//这个方法完全可以替代 cat filepath public static String readFile(String fileName) { String res = ""; try { FileInputStream fin = new FileInputStream(fileName); // int length = // fin.available(); int length = 32; byte[] buffer = new byte[length]; fin.read(buffer); res = EncodingUtils.getString(buffer, "UTF-8"); res.trim(); fin.close(); } catch (Exception e) { e.printStackTrace(); } return res; }
//这个是我做cvbs的时候显示不正常的问题,通过这样可以正常显示
<pre name="code" class="java">String outputmode = VideoUtil.readFile("/sys/class/display/mode"); private void setCvbsRect(){ outputmode = VideoUtil.readFile("/sys/class/display/mode"); int axis[] = new int[4]; // writeFile(VideoUtil.OSD_PATH, "1"); getUbootAxis(axis); System.out.println("=======resume==outputmode===>>>>"+outputmode); if(outputmode.contains("1080")) { VideoUtil.writeFile(VideoUtil.DISPLAY_AXIS_PATH, (axis[0] / 2) * 2 + " " + (axis[1] / 2) * 2 + " 1920 1080 " + (axis[0] / 2) * 2 + " " + (axis[1] / 2) * 2 + " 18 18"); VideoUtil.writeFile(VideoUtil.OSD0_SCALE_AXIS_PATH, "0 0 " + (960 - (axis[0] / 2) - 1) + " " + (1080 - (axis[1] / 2) - 1)); VideoUtil.writeFile(VideoUtil.REQUEST_2X_SCALE_PATH, "7 " + (axis[2] / 2) + " " + axis[3]); VideoUtil.writeFile(VideoUtil.OSD1_SCALE_AXIS_PATH, "1920 1080 " + axis[2] + " " + axis[3]); VideoUtil.writeFile(VideoUtil.OSD1_SCALE_PATH, "0x10001"); VideoUtil.writeFile(VideoUtil.VIDEO_AXITS_PATH, "0 -10 1918 1078"); } else { VideoUtil.writeFile(VideoUtil.DISPLAY_AXIS_PATH, axis[0] + " " + axis[1] + " 1280 720 " + axis[0] + " " + axis[1] + " 18 18"); VideoUtil.writeFile(VideoUtil.REQUEST_2X_SCALE_PATH, "16 " + axis[2] + " " + axis[3]); VideoUtil.writeFile(VideoUtil.OSD1_SCALE_AXIS_PATH, "1280 720 " + axis[2] + " " + axis[3]); VideoUtil.writeFile(VideoUtil.OSD1_SCALE_PATH, "0x10001"); VideoUtil.writeFile(VideoUtil.VIDEO_AXITS_PATH, "0 -10 1278 718"); } } private void getUbootAxis(int[] axis, int[] defaultWH) { String xEnv = ""; String yEnv = ""; String wEnv = ""; String hEnv = ""; int widthDefault = 0, heightDefault = 0; for (int i = 0; i < VideoUtil.MODES.length; i++) { String mode = VideoUtil.MODES[i]; if (outputmode.contains(mode)) { xEnv = "ubootenv.var." + mode + "outputx"; yEnv = "ubootenv.var." + mode + "outputy"; wEnv = "ubootenv.var." + mode + "outputwidth"; hEnv = "ubootenv.var." + mode + "outputheight"; widthDefault = VideoUtil.WIDTH_DEFAULT[i]; heightDefault = VideoUtil.HEIGHT_DEFAULT[i]; break; } } axis[0] = SystemProperties.getInt(xEnv, 0); axis[1] = SystemProperties.getInt(yEnv, 0); axis[2] = SystemProperties.getInt(wEnv, widthDefault); axis[3] = SystemProperties.getInt(hEnv, heightDefault); defaultWH[0] = widthDefault; defaultWH[1] = heightDefault; } private void getUbootAxis(int[] axis) { int defaultWH[] = new int[2]; getUbootAxis(axis, defaultWH); }
相关文章推荐
- 全屏录制播放控件--Android 开发中关于视频录制和播放的诸多问题处理
- 关于android初学时一些问题的解决方法资料(持续更新)
- 关于Cocos2d-x 3.0正式版 粒子问题在IOS上正常显示,在Android下有问题的解决方案
- 关于android与Iphone录MP4格式视频播放问题
- [Android]浮层视频效果,在另外一个Window使用SurfaceView无法正常显示的问题排查与解决
- Android中VideoView播放视频不能充满屏幕以及视频上的view与视频不同步显示的问题
- 关于android视频播放开发中 播放视频只有声音没有图像的问题解决方案
- 关于Android stdio使用的一些小问题的解决方法
- 关于Android中使用WebView播放网络视频不能全屏的问题
- 关于Cocos2d-x 3.0正式版 粒子问题在IOS上正常显示,在Android下有问题的解决方式
- Android WebView页面结束后视频播放还有声音问题处理
- 关于开机右下角任务栏不显示音量图标 电池图标问题的处理方法
- 关于在Android中使用Google Map只显示网格问题的解决方法
- android上关于视频播放的一些参考
- android webView 无法播放视频,无法暂停,继续播放视频问题,无法根据浏览器居中显示内容问题
- [Android]视频浮层效果使用SurfaceView无法正常显示的问题排查和解决方案
- 关于图片资源在android2.1/2.2/2.3下无法显示的问题以及解决方法
- jain-sip-applet-phone与GrandStream V3005 IP电话不能正常视频通话的问题解决方法(IP电话一直显示“对方保持”/“呼叫”)
- 关于Android23 及以上模拟器处理应用闪退的一些问题(权限相关)
- 关于android-support-v7-appcompat.jar的使用的一些问题和解决方法