解决小程序中视频因为编码格式不能播放的问题

最近开发一个小程序,发现video组件的视频不能播放。琢磨了几天,终于可以了。现把经验分享出来,希望对遇到这个问题,但一时还没有解决的小伙伴有一点帮助。

请注意:由于以下使用的七牛云测试域名自创建起 30 个自然日后系统会自动回收。所以2019.4.20号以后,部分url会失效。

1、如何获取视频src地址

首先,我们要知道,video组件的src地址是什么,我开始以为,小程序的video组件的src地址一定类似官方示例这样的。

http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400

可能跟我一样,没接触过这块的小伙伴也有一样的想法。其实不然,视频src地址的长度可长可短,一般为.mp4结尾。判断src地址是否正确,很简单,将地址复制到浏览器中,可正常播放,代表地址正确。

如何获取一个视频的src地址?

可以在Chrome中使用Video Downloader professional这个插件,它可以直接下载网站正在播放的视频,我在腾讯视频上亲测可用,部分短视频可以,电影电视剧还是不行。

针对没有梯子的小伙伴,可以直接在 https://github.com/DeppWang/Chrome-extensions 下载对应的插件,在浏览器搜索框中输入chrome://extensions/打开扩展程序页面(或者右上角三个点->更多工具->扩展程序 ),选中右上角的开发者模式,将下载好的插件拖动到扩展程序页面完成安装。

2、查找视频不能播放的原因

首先将视频地址(如:http://pov1yx2ze.bkt.clouddn.com/iaa1.mp4)复制到Chrome地址栏,看能否在浏览器中播放。如果不能播放,说明视频损坏或者此视频的编码格式是mpeg4。可参考七牛云解释:

https://developer.qiniu.com/fusion/kb/4082/video-playback-caton-unable-to-play

你可以将视频上传到七牛云对象储存后,复制外链,通过http://pov1yx2ze.bkt.clouddn.com/iaa1.mp4?avinfo查看视频编码格式。

image.png

请注意,这是七牛云对象存储的视频才有的功能,不是所有视频地址后加?avinfo都可以。具体可查看七牛云教程:

https://developer.qiniu.com/dora/manual/1247/audio-and-video-metadata-information-avinfo

微信小程序说支持mpeg-4格式,不知为何又播放不了。

image.png

3、更改视频的编码格式

现在知道视频播放不了的原因了。我将微信官方提供的视频上传到七牛云后,可以看出编码格式为h264。

image.png

所以,我们要想办法转换视频的编码格式。我是通过七牛云提供的代码转的,应该也可以通过其他工具转。七牛云教程:

https://developer.qiniu.com/dora/manual/1248/audio-and-video-transcoding-avthumb
https://developer.qiniu.com/kodo/sdk/1239/java#8

运行七牛云提供的代码需要使用七牛云的sdk。可以使用Spring Initializr( https://start.spring.io/ )初始化一个基于Gradle的springboot项目,下面是针对Java的相关代码:

public static void main(String[] args) {
        String accessKey = "access key";
        String secretKey = "secret key";

        //待处理文件所在空间
        String bucket = "bucket name";
        //待处理文件名
        String key = "file key";

        Auth auth = Auth.create(accessKey, secretKey);

        //数据处理指令,支持多个指令
        String saveMp4Entry = String.format("%s:avthumb_test_target.mp4", bucket);//avthumb_test_target.mp4是转换后的文件名
        String avthumbMp4Fop = String.format("avthumb/mp4/vcodec/libx264|saveas/%s", UrlSafeBase64.encodeToString(saveMp4Entry));//libx264为编码格式

        //数据处理队列名称,为空时代表使用公有队列
        String persistentPipeline = "";
        //数据处理完成结果通知地址
        String persistentNotifyUrl = "http://pov1yx2ze.bkt.clouddn.com/qiniu/pfop/notify";//填一个真正的url地址
        //构造一个带指定Zone对象的配置类
        Configuration cfg = new Configuration(Zone.zone0());
        //...其他参数参考类注释
        //构建持久化数据处理对象
        OperationManager operationManager = new OperationManager(auth, cfg);
        try {
            String persistentId = operationManager.pfop(bucket, key, avthumbMp4Fop, persistentPipeline, persistentNotifyUrl, true);
            //可以根据该 persistentId 查询任务处理进度
            System.out.println(persistentId);
            OperationStatus operationStatus = operationManager.prefop(persistentId);
            System.out.println(operationStatus);
            //解析 operationStatus 的结果
        } catch (QiniuException e) {
            System.err.println(e.response.toString());
        }
}


compile 'com.qiniu:qiniu-java-sdk:7.2.+'//.gradle中七牛云的java sdk

现在可以使用http://pov1yx2ze.bkt.clouddn.com/avthumb_test_target.mp4?avinfo查看视频编码格式。

image.png

此时将http://pov1yx2ze.bkt.clouddn.com/avthumb_test_target.mp4放到小程序就可以播放了。

4、如何方便的存储视频

如果你有备案的域名,将视频存放到七牛云或者其他商业云上,是一个不错的方式。但使用小程序云开发存储视频是一个更好的选择,src直接使用云文件ID就可以了。

总结

说了这么多,其实我也是刚接触小程序的小白。这篇教程主要是提供一个转换视频编码格式的一个途径。如果哪里有错误,请留言。

一句话:如果视频不能播放,可以先看看是否是编码格式的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342