Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >解决:信息中插入avi格式的视频时,提示“unsupported video format”

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

作者头像
全栈程序员站长
发布于 2022-07-07 13:13:03
发布于 2022-07-07 13:13:03
6070
举报

大家好,又见面了,我是全栈君。

【測试步骤】:新建信息。加入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.cn/116200.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
仿抖音短视频APP源码,实现简单的换头像并保存
Man-Sitting-on-Bar-Chair-in-Front-Man-At-Cafe_7GgnRv5aOKWP.jpeg public class My_info extends AppCompatActivity implements View.OnClickListener { private static final int CHOOSE_PHOTO=2; private CircleImageView image;//一种用于图片圆形化的控件     @Override     prote
yunbaokeji柯基
2020/10/20
9400
仿抖音短视频APP源码,实现简单的换头像并保存
nio使用中的java.nio.file.FileSystemNotFoundException分析析
在使用nio加载文件时,在idea中运行没有问题,但打成jar包后在windows和linux下都有问题: public static void main(String[] args) throws Exception{ // SpringApplication.run(MarketCollectApplication.class,args); URI uri = MarketCollectApplication.class.getClassLoader().getReso
山行AI
2019/06/28
4.9K0
nio使用中的java.nio.file.FileSystemNotFoundException分析析
Android 使用腾讯X5内核, Webview浏览器拍照或从相册上传图片
最近在项目开发中,需要使用WebView上传文件。默认情况下情况下,使用Android的WebView是不能够支持上传文件的。经过查找资料,得知需要重新WebChromeClient,根据选择到的文件Uri,传给页面去上传就可以了。
开发者技术前线
2020/11/23
2.2K0
Android 使用腾讯X5内核, Webview浏览器拍照或从相册上传图片
Android Uri转File方法(适配android 10以上版本及android 10以下版本)
Android Uri转File方法,适配android 10以上版本及android 10以下版本 博主在这里就不再做过多的阐述了,直接上代码,复制即用 public static File uriToFileApiQ(Uri uri, Context context) { File file = null; if (uri == null) return file; //android10以上转换 if (uri.getSch
是阿超
2022/05/15
6.3K0
Android通过URI获取文件路径
之前在工作的过程中,遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。 因为需求的原因,要求拍照上传或者从相册中选择图片上传,而且图片是需要经过压缩的,大小不能超过2M。 很快,拍照的这部分就搞定了。那么相册中选择图片的也是一样的道理,应该也是轻松解决了。 至于选择图片的代码,如下所示: intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); inte
俞其荣
2018/05/21
3.1K0
Hadoop源码分析:FileSystem类
1、org.apache.hadoop.conf包 org.apache.hadoop.conf包位于hadoop-common模块下 1.1 Configurable 接口 package o
程裕强
2018/01/02
1.6K0
Hadoop源码分析:FileSystem类
Android拍照或者选取本地图片
从selectPhotoActivity中启动图册或者相机,再根据获取的uri进行裁剪,返回uri,再对这个uri执行一系列操纵。
用户1665735
2019/02/19
2.5K0
聊聊flink的FileSystem
flink-1.7.2/flink-core/src/main/java/org/apache/flink/core/fs/FileSystem.java
code4it
2019/03/02
2.2K0
聊聊flink的FileSystem
Apache BookKeeper之MetaData管理
在Apache BookKeeper中对MetaData的所有操作都被封装到一个抽象接口MetadataBookieDriver中;
扫帚的影子
2019/08/20
1.6K0
Android打开系统拍照&相册获取头像
现在许多应用都有上传头像的功能,再次奉上代开系统相册或打开系统相机拍照的实现,有的同学在测试小米手机上打开选择相册有奔溃,此代码已完美解决此问题…
程序员飞飞
2020/02/27
2.8K0
拍照/选择相册,图片压缩旋转处理
最近做项目需要用到拍照和选择相册照片,并显示出来imageview 上,然后压缩上传到服务器中,这本是一个非常常见的功能,但对于图片的处理确实一个技术活,稍微不注意会出现oom,图片压缩也要处理的刚刚好,不能浪费用户的流量,也不能过分的压缩使图片失真,这真的不简单,好在开源中国的安卓端app以开源,本人特意从开源中国整理了这个demo,分享给大家。
方志朋
2022/11/30
8410
Android调起系统视频并回调得到视频路径
用户1696846
2023/08/25
2010
Android 从相册中选择照片
在这里通过放回路径设置头像,但由于图片路径生成可能有一定延时,所以这里开一个线程等待:
圆号本昊
2021/09/24
1K0
Android 从相册中选择照片
ContentProvider再探——Document Provider
通过ContentProvider初探相信你已经知道如何去使用系统提供的ContentProvider或者自定义ContentProvider了, 已经基本满足日常开发的需求了,有趣的是,我在官方文档上看到了另外这几个Provider:
小小工匠
2021/08/16
1K0
相关推荐
仿抖音短视频APP源码,实现简单的换头像并保存
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档