解决:信息中插入avi格式的视频时,提示“unsupported video format”
【测试步骤】:新建信息,添加AVI格式的视频
【测试结果】:添加时弹出提示“unsupported video format”
该问题主要提现在手机彩信视频附件不支持该AVI格式的视频,因此我们通过操作流程对代码进行追踪,查找“unsupported video format”产生的位置。
我们从添加附件界面ComposeMessageActivity类的onActivityResult()方法开始。
--》onActivityResult()调用代码如下:
case REQUEST_CODE_ATTACH_VIDEO:
if (data != null) {
mAttachFileUri = data.getData();
addVideoAsync(mAttachFileUri, false);
}
break;
--》addVideo()--》setAttachment()<WorkingMessage.java> 调用代码如下:
result = append ? appendMedia(type, dataUri, slideShowEditor)
: changeMedia(type, dataUri, slideShowEditor);
--》changeMedia()--》internalChangeMedia()--》changeVideo()<SlideshowEditor.java>
--》new VideoModel()<TAG 1-1>
public VideoModel(Context context, Uri uri, RegionModel region)
throws MmsException {
this(context, null, null, uri, region);
initModelFromUri(uri);
checkContentRestriction();
}
--》initModelFromUri()<VideoModel.java> 调用代码如下:
private void initModelFromUri(Uri uri) throws MmsException {
String scheme = uri.getScheme();
if (scheme.equals("content")) {
initFromContentUri(uri);
} else if (uri.getScheme().equals("file")) {
initFromFile(uri);
}
initMediaDuration();
}
上述代码通过添加Log进行输出,这里的scheme的值为“file”;
--》initFromFile()
private void initFromFile(Uri uri) throws MmsException {
String path = uri.getPath();
mSrc = path.substring(path.lastIndexOf('/') + 1);
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String extension = MimeTypeMap.getFileExtensionFromUrl(mSrc);
if (TextUtils.isEmpty(extension)) {
// getMimeTypeFromExtension() doesn't handle spaces in filenames nor can it handle
// urlEncoded strings. Let's try one last time at finding the extension.
int dotPos = mSrc.lastIndexOf('.');
if (0 <= dotPos) {
extension = mSrc.substring(dotPos + 1);
}
}
mContentType = mimeTypeMap.getMimeTypeFromExtension(extension.toLowerCase());
// It's ok if mContentType is null. Eventually we'll show a toast telling the
// user the video couldn't be attached.
if (TextUtils.isEmpty(mContentType)) {
throw new MmsException("Type of media is unknown.");
}
if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
Log.v(TAG, "New VideoModel initFromFile created:"
+ " mSrc=" + mSrc
+ " mContentType=" + mContentType
+ " mUri=" + uri);
}
}
上述代码中对mContentType进行赋值,这里我们通过Log输出,mContentType的值为“video/x-msvideo”;
接下来接着进行构造函数<TAG1-1>中的方法checkContentRestriction();
protected void checkContentRestriction() throws ContentRestrictionException {
ContentRestriction cr = ContentRestrictionFactory.getContentRestriction();
cr.checkVideoContentType(mContentType);
}
--》checkVideoContentType()<CarrierContentRestriction.java>
public void checkAudioContentType(String contentType)
throws ContentRestrictionException {
if (null == contentType) {
throw new ContentRestrictionException("Null content type to be check");
}
if (!sSupportedAudioTypes.contains(contentType)) {
throw new UnsupportContentTypeException("Unsupported audio content type : "
+ contentType);
}
}
上述代码中加粗标识的代码就是测试描述的问题,我们接着分析本类中静态语句快中的代码;
sSupportedVideoTypes = ContentType.getVideoTypes();
最终我们最终到ContentType.java类,并且发现该类中没有添加对该视频格式的支持。因此添加以下代码进行支持。
......
public static final String VIDEO_UNSPECIFIED = "video/*";
public static final String VIDEO_3GPP = "video/3gpp";
public static final String VIDEO_3G2 = "video/3gpp2";
public static final String VIDEO_H263 = "video/h263";
public static final String VIDEO_MP4 = "video/mp4";
public static final String VIDEO_X_MSVIDEO = "video/x-msvideo";
......
// add supported video types
sSupportedVideoTypes.add(VIDEO_X_MSVIDEO);
sSupportedVideoTypes.add(VIDEO_3GPP);
sSupportedVideoTypes.add(VIDEO_3G2);
sSupportedVideoTypes.add(VIDEO_H263);
sSupportedVideoTypes.add(VIDEO_MP4);
......
OK!
解决:信息中插入avi格式的视频时,提示“unsupported video format”的更多相关文章
- 解决在IE中返回JSON格式的数据时提示下载的问题
如题,以ASP.NET MVC为例,解决办法如下: 控制器中: public JsonResult Test() { return Json(json, "text/html"); ...
- asp.net MVC控制器中返回JSON格式的数据时提示下载
Asp.net mvc在接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("# ...
- 在IE中MVC控制器中返回JSON格式的数据时提示下载
最近做项目时,视图中用jquery.form.js异步提交表单时,接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如 ...
- 如何在latex 中插入EPS格式图片
如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...
- CentOS 6.4 播放avi格式的视频文件
1. 需要先进行相关的yum源的导入: rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0. ...
- 解决docker中使用nginx做负载均衡时并发过高时的一些问题
# 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...
- 解决ie6中png图片格式不兼容问题
在IE6中对图片格式png24支持度不高,如果使用的图片格式是png24,则会导致透明效果无法正常显示 解决方法: 1.可以使用png8来代替png24,即可解决问题,但是使用png8代替png24以 ...
- 在Eclipse中运行Web项目Jsp网页时提示端口被占用的解决办法:Several ports (8005, 8888, 8009) required by Tomcat v9.0 Server at localhost are already in use.
问题: 在Eclipse中运行Web项目Jsp网页启动Tomcat时提示端口被占用: Several ports (8005, 8080, 8009) required by Tomcat v9.0 ...
- 关于web程序中使用KindEditor向数据库插入带有格式的数据时出现的问题
最近做一个项目,需要对输入的文字在存入数据库之前进行文本格式编辑,于是我用到了KindEditor,当然怎么用在asp.net页面中,这里就不过多叙述了. 主要是遇到在将赋予格式的文本插入数据库时遇到 ...
随机推荐
- WANL标准组织介绍-02
无线电管理委员会 FCC ETSI IEEE Wi-Fi IETF WAPI 国家无线电管理委员会认证 国家无线电管理委员会认证(State Radio Regulatory Commission o ...
- 丢失Ref Edit Control的解决方法
2010版本excel编制的带有控件的VBA,换在别的电脑使用有可能会出现“找不到工程或库”的错误,在VBE编辑器,打开工具——引用,可以看到“丢失 Ref Edit Control”解决方法是,先把 ...
- JVM性能调优
摘自:http://uule.iteye.com/blog/2114697 JVM垃圾回收与性能调优总结 JVM调优的几种策略 一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将 ...
- PHP Warning: ob_start() : output handler 'ob_gzhandler conflicts with 'zlib output compression'
安装phpcms过程中,会遇到Warning: ob_start() : output handler 'ob_gzhandler conflicts with 'zlib output compr ...
- Axis2 webservice 之使用java调用webservice
在上一篇中写了一个简单了webservice,实现了一个sayHello功能.那么webservice写好之后我们如何使用Java程序来调用webservice呢? 一.java调用的webservi ...
- Oracle select case when
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...
- 一般处理文件.ashx中使用文件session遇到的问题
在给其他网站提供接口的时候用ashx做的,在文件调用cs中的方法,方法中的Session报错:System.NullReferenceException: 未将对象引用设置到对象的实例. /// &l ...
- OpenGL 和OpenGL ES简介
OpenGL的全称是Open Graphics Library,即开放的图形库接口,它定义了一个跨编程语言.跨平台的编程接口的规范,它主要用于三维图形(实际上二维图形也可以)变成.OpenGL的前 ...
- 套汇问题 Floyd
问题:套汇. 思路:Floyd 代码: #include <cstdio> #include <cstdlib> #include <ctime> #define ...
- ionic build --release android
ionic bulid android ionic build --release android keytool -genkey -v -keystore demo.keystore -alias ...