解决:信息中插入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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python从入门到精通——完整教程

    python从入门到精通——完整教程<linkrel=”stylesheet”href=”https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-1a85854398.css”><divid=”content_views”class=”htmledit_views”><p>&nbsp;</p>文章目录…

    2022年7月22日
    23
  • 计算机清理垃圾代码,你也可以写代码系列,一键清除系统垃圾文件的代码(超简单)-清除垃圾文件…

    计算机清理垃圾代码,你也可以写代码系列,一键清除系统垃圾文件的代码(超简单)-清除垃圾文件…电脑使用久了,系统或者软件就会产生大量的日志文件、临时文件等垃圾文件。这些垃圾文件日积月累,不仅会大量占用磁盘空间,也会严重拖慢系统运行速度。所以定时清理垃圾文件十分有必要。我们可以手动删除,也可以借助本文提供的批处理自动删除。1,创建一个清除垃圾的.bat文件(1)在桌面上单击鼠标右键,选择“新建”选择“文本文档”(2)将新建的文件改名为“垃圾文件清除.bat”(注意.txt后缀要记得删掉)…

    2022年6月18日
    120
  • MySQL数据库每日备份并定时清理脚本

    MySQL数据库每日备份并定时清理脚本

    2021年6月3日
    108
  • git命令基本用法记录

    git命令基本用法记录最近使用git命令提交代码的时候发现很多命令都忘记了,于是重新学习了一下git命令。顺便整理了一下,加强记忆,也方便以后随时查看。以下命令都是平常工作中使用频率较高的命令,也是git的一些基本用法,其中[]内的参数表示可以省略,<>内的参数只是示例,具体名称视自己的项目而定,实际命令中不带<>,表示远程主机名,等表示分支名。1.git配置    获取本机sshkey:ssh-keygen-t-C“yourEmail@exampl

    2022年6月29日
    24
  • cmd命令切换盘符_cmd更改盘符名

    cmd命令切换盘符_cmd更改盘符名cd/dD:\Test\切换到D盘Test文件夹下dir查看文件夹内容cd是用来进入目录,或退出目录的CD\是回到根目录CD..是回到上级目录cd子目录名,进入下级目录CD绝对路径,进入你的绝对路径的目录里如可以在C:\WINDOWS\SYSTEM32下输入cdd:\program\firefox\来进入d:\program\firefox目录里

    2022年10月4日
    2
  • Android调用系统原生分享组件[通俗易懂]

    Android调用系统原生分享组件[通俗易懂]想必做Android开发都会遇到的需求——分享。当然实现的需求和方式的也都各自不一,有接入某个app的SDK进行分享,也有集成第三方平台的例如友盟等等…接下来所要说到的是Android系统提供的分享组件。分享组件能够自动的检索到可以分享app然后将分享内容带入 当然这个也会有所限制的,会有个别app只能分享单一项:“文字+图片”、“图片”、“文字” 好处就是轻量级、避免导入其它jar包或依赖、可减少apk体积Filefile=newFile(filePath

    2022年6月19日
    29

发表回复

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

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