解决:信息中插入avi格式的视频时,提示“unsupported video format”

解决:信息中插入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!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116200.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月24日 下午5:00
下一篇 2022年1月24日 下午6:00


相关推荐

  • vld使用

    vld使用vld 是一款免费的 VisualC 内存分析工具 下面来介绍一下怎么在 qt 中使用 vld 1 下载 去官网 http vld codeplex com 下载 我下的是 2 5 1 版本 2 安装 在安装目录下找到 vld lib 文件 有 32 位和 64 位的注意位数 复制到 qt 安装目录的 lib 文件夹中 nbsp 复制 vld 安装目录下 include 文件夹中的文件 vld h 和 vld def h 到 qt 安装目录的

    2026年3月19日
    2
  • Python 深入浅出 – PyPDF2 处理 PDF 文件

    Python 深入浅出 – PyPDF2 处理 PDF 文件实际应用中,可能会涉及处理pdf文件,PyPDF2就是这样一个库,使用它可以轻松的处理pdf文件,它提供了读,割,合并,文件转换等多种操作。文档地址:http://pythonhosted.org/PyPDF2/PyPDF2安装PyCharm安装:File->DefaultSettings->ProjectInterpreterPdfFileR

    2022年6月23日
    39
  • 微信推送消息遇到的坑 – 返回error code 40008,并且发送不成功[通俗易懂]

    微信推送消息遇到的坑 – 返回error code 40008,并且发送不成功[通俗易懂]api文档就是这里啦。https://work.weixin.qq.com/api/doc#90000/90135/90236/%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF我感觉腾讯并没有把这个errorcode做得很细,反之,非常笼统,让你看到这个err不知所措不晓得到底啥问题。我这边要用微信接收系统发出来的alert,比如哪个服务器cpu负荷…

    2022年6月10日
    172
  • Nvm,Nrm使用教程

    Nvm,Nrm使用教程NVM 介绍 NVM 全称 node jsversionman 专门针对 node 版本进行管理的工具 通过它可以安装和切换不同版本的 node js 使用场景我目前的公司有很多项目 其中有一些老项目用的是 vue2 5 左右了 webpack 版本也比较低 只能使用 10 16 0 左右的 node 版本 但是也有一些新项目需要使用高版本的 node 例如 14 17 3 左右的这时候就可以使用 nvm 切换 node 版本 1 安装 nvmwindowsgi 程序员交友平台 地址 Releases

    2026年3月17日
    2
  • hashmap基本原理_哈希表的实现原理

    hashmap基本原理_哈希表的实现原理HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。  首先HashMap里面实现一个静态内部类Entry,其重要的属性有key,value,next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Ent

    2025年8月12日
    4
  • python动态心形代码简单_python 心形

    python动态心形代码简单_python 心形0.最终效果1.绘制一条心形曲线最近看到个视频,打算绘制个心型动态的曲线。1.1Matlab确定图像及其函数网上有很多关于心形曲线的资料,各种各样的形状,但是我比较倾心于桃心形。先在Matlab里简单看一下是什么样的。桃心形曲线的方程如下x=16sin^3(t)y=13cos(t)-5cos(2t)-2cos(3t)-cos(4t)Matlab绘制效果如下:Matlab程序如下。clcc…

    2026年4月13日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号