【测试步骤】:新建信息,添加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”的更多相关文章

  1. 解决在IE中返回JSON格式的数据时提示下载的问题

    如题,以ASP.NET MVC为例,解决办法如下: 控制器中: public JsonResult Test() { return Json(json, "text/html"); ...

  2. asp.net MVC控制器中返回JSON格式的数据时提示下载

    Asp.net mvc在接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("# ...

  3. 在IE中MVC控制器中返回JSON格式的数据时提示下载

    最近做项目时,视图中用jquery.form.js异步提交表单时,接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如 ...

  4. 如何在latex 中插入EPS格式图片

    如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...

  5. CentOS 6.4 播放avi格式的视频文件

    1. 需要先进行相关的yum源的导入: rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0. ...

  6. 解决docker中使用nginx做负载均衡时并发过高时的一些问题

    # 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...

  7. 解决ie6中png图片格式不兼容问题

    在IE6中对图片格式png24支持度不高,如果使用的图片格式是png24,则会导致透明效果无法正常显示 解决方法: 1.可以使用png8来代替png24,即可解决问题,但是使用png8代替png24以 ...

  8. 在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 ...

  9. 关于web程序中使用KindEditor向数据库插入带有格式的数据时出现的问题

    最近做一个项目,需要对输入的文字在存入数据库之前进行文本格式编辑,于是我用到了KindEditor,当然怎么用在asp.net页面中,这里就不过多叙述了. 主要是遇到在将赋予格式的文本插入数据库时遇到 ...

随机推荐

  1. [saiku] 集成单点登录

    思路: 自定义一个loginCallbackFilter用于单点登录成功后执行模拟用户认证授权登录的操作. 当授权成功后所有配置需要授权才能访问的url就再也不会被任何filter拦截,可随意访问了. ...

  2. cf------(round 2)A. Winner

    A. Winner time limit per test 1 second memory limit per test 64 megabytes input standard input outpu ...

  3. [转]何时使用委托而不使用接口(C# 编程指南)

    以下内容转自MSDN:http://msdn.microsoft.com/zh-cn/library/ms173173.aspx 委托和接口都允许类设计器分离类型声明和实现. 任何类或结构都能继承和实 ...

  4. 7款适用老旧设备并对初学者非常友好的轻量级Linux发行版

    我们由从 7 到 1 的顺序向大家介绍. 7. Linux Lite 正如其名,Linux Lite 是 Linux 发行版的一个轻量级版本,用户并不需要强大的硬件就可以将它跑起来,而且其使用非常简单 ...

  5. VS2003编译后的网站如何修改代码

    VS2003编译后的网站,如果没有源代码,而要修改里面的代码时,可以以以下方式解决: 反编译dll,把找出cs代码文件,然后重新建一个类项目,把此文件中的代码修改后重新生成dll,放在编译的网站中的b ...

  6. 表单_post提交方式和get的区别,元素集

    提交方式及表单域的name属性 使用form表单一种是post提交方式,一种是get提交方式,它们以method属性来定义,如果没有指定method属性,默认get方式提交. 表单域必须配合name属 ...

  7. Swift - 自动布局库SnapKit的使用详解2(约束的更新、移除、重做)

    在之前的文章中我介绍了如何使用SnapKit的 snp_makeConstraints 方法进行各种约束的设置.但有时我们的页面并不是一直固定不变的,这就需要修改已经存在的约束.本文介绍如何更新.移除 ...

  8. 终于!Linaro 加盟 Zephyr 项目

    导读 为物联网构建实时操作系统的开源协作项目 Zephyr 项目宣布,Linaro 有限责任公司以白金会员的身份加盟该项目.Linaro是一家为 ARM 架构开发开源软件的协作工程组织,也是全球性机构 ...

  9. js控制html元素的readonly属性

    html元素假设为只读,那么其readonly="readonly",我们现在想通过js来改变readonly属性为可以输入. 初始时,两个输入框都是只读.点击change按钮后, ...

  10. 从BlackHat2013中我们收获了什么

    拉斯维加斯-BlackHat全球黑客大会是每年围观革新安全技术的最好机会,还能和那些 在这个行业里聪明至极的家伙交谈并从中得到些关于前沿技术的动向和启示.今年的会议无论参会人数还是议题数量是历届规模最 ...