当前位置:网站首页>解决:信息中插入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
边栏推荐
- 行测-图形推理-5-一笔画类
- GEE(四):计算两个变量(影像)之间的相关性并绘制散点图
- Cause analysis and solution of too laggy page of [test interview questions]
- 行测-图形推理-2-黑白格类
- iNFTnews | NFT技术的广泛应用及其存在的问题
- 软件测评中心▏自动化测试有哪些基本流程和注意事项?
- 每日一题——PAT乙级1002题
- 行测-图形推理-7-相异图形类
- Cases of agile innovation and transformation of consumer goods enterprises
- Transform XL translation
猜你喜欢

GEE(四):计算两个变量(影像)之间的相关性并绘制散点图

聊聊 Dart 的空安全 (null safety) 特性

LeetCode707. Design linked list

Interview questions: how to test app performance?

双非大厂测试员亲述:对测试员来说,学历重要吗?

Develop those things: go plus c.free to free memory, and what are the reasons for compilation errors?

Unity与WebGL的相爱相杀

行测-图形推理-2-黑白格类

iNFTnews | Web5 vs Web3:未来是一个过程,而不是目的地

30讲 线性代数 第五讲 特征值与特征向量
随机推荐
线上面试,该如何更好的表现自己?这样做,提高50%通过率~
Line test - graphic reasoning -7- different graphic classes
Software evaluation center ▏ what are the basic processes and precautions for automated testing?
JS triangle
One question per day - pat grade B 1002 questions
OC variable parameter transfer
oc 可变參数传递
网络安全-对操作系统进行信息查询
LeetCode142. Circular linked list II [two pointers, two methods for judging links in the linked list and finding ring points]
Sword finger offer 28 Symmetric binary tree
Understand the session, cookie and token at one time, and the interview questions are all finalized
What does the model number of asemi rectifier bridge kbpc1510 represent
一次搞明白 Session、Cookie、Token,面试问题全稿定
网络安全-CSRF
行测-图形推理-3-对称图形类
Debezium series: introducing support for the final operator
PCL .vtk文件与.pcd的相互转换
行测-图形推理-2-黑白格类
Digital collections accelerated out of the circle, and marsnft helped diversify the culture and tourism economy!
Leetcode94. Middle order traversal of binary trees