当前位置:网站首页>解决:信息中插入avi格式的视频时,提示“unsupported video format”
解决:信息中插入avi格式的视频时,提示“unsupported video format”
2022-07-07 21:50:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
【測试步骤】:新建信息。加入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
边栏推荐
- PCL .vtk文件与.pcd的相互转换
- The wonderful relationship between message queue and express cabinet
- [language programming] exe virus code example
- LeetCode142. Circular linked list II [two pointers, two methods for judging links in the linked list and finding ring points]
- JMeter-接口自动化测试读取用例,执行并结果回写
- Unity 动态合并网格纹理
- 2021-01-12
- Debezium series: binlogreader for source code reading
- 微信论坛交流小程序系统毕业设计毕设(6)开题答辩PPT
- 微信论坛交流小程序系统毕业设计毕设(8)毕业设计论文模板
猜你喜欢

Line test graph reasoning graph group class

Are the microorganisms in the intestines the same as those on the skin?

微信论坛交流小程序系统毕业设计毕设(1)开发概要

Leetcode94. Middle order traversal of binary trees

Unity与WebGL的相爱相杀

How to operate DTC community?

Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades-KDD2020

DTC社群运营怎么做?

Sword finger offer 27 Image of binary tree

Develop those things: go plus c.free to free memory, and what are the reasons for compilation errors?
随机推荐
Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades-KDD2020
Lecture 30 linear algebra Lecture 5 eigenvalues and eigenvectors
嵌入式音频开发中的两种曲线
Early childhood education industry of "screwing bar": trillion market, difficult to be a giant
Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades-KDD2020
Develop those things: go plus c.free to free memory, and what are the reasons for compilation errors?
数据库每日一题---第22天:最后一次登录
Leetcode interview question 02.07 Linked list intersection [double pointer]
ArcGIS:字段赋值_属性表字段计算器(Field Calculator)依据条件为字段赋值
网络安全-sqlmap与DVWA爆破
7-51 combination of two ordered linked list sequences
iNFTnews | Web5 vs Web3:未来是一个过程,而不是目的地
Cause analysis and solution of too laggy page of [test interview questions]
双非大厂测试员亲述:对测试员来说,学历重要吗?
What is fake sharing after filling the previous hole?
Brush question 5
Microbial Health Network, How to restore Microbial Communities
Are the microorganisms in the intestines the same as those on the skin?
iNFTnews | NFT技术的广泛应用及其存在的问题
LeetCode144. Preorder traversal of binary tree