小程序
小游戏
企业微信
微信支付
扫描小程序码分享
首先尝试使用 微信开发工具调试,显示:
于是,尝试使用真机调试
代码很简单,初始化一个videoDecoder然后通过start函数载入一个本地视频地址。然后尝试seek stop。
然后报错:
6 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
可以获取,将start函数中的source换成临时地址或者网络地址试试(我用的网络地址测试的),getFrameData需要循环调用才可
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
videodecoder能用了不,半年过去了还是用不了呀,微剪是不是调了内部api~
let video = wx.createVideoDecoder() console.log(video) video.on('start', (v) => { console.log("start", v); video.seek(0); }) video.on('seek', (e) => { console.log("seek", e.position); console.log("frameData", video.getFrameData()) }) video.on('stop', () => console.log(2)) video.start({source: '/assets/crop.mp4', mode: 0}) setTimeout(() => video.seek(1.0), 1000);
在seek之后getFrameData好像就可以了,不要stop。我在android机上稍微试了两下能正常输出frameData。时间是seek事件的e.position,帧内容是getFrameData()。
不过不知道具体什么时候会出现“当缓存区满的时候可能暂停取不到数据”,或者怎么避免这个问题,或者怎么从这个问题中恢复。还不敢用。
————update1
getFrameData()是每次调用都会获取下一帧,seek0之后,不停地调用getFrameData()就能获取每一帧的数据。(遇到null就需要等待一会儿吧(?),这一点还需要测试)
要注意返回的frameData的dts和pts时间戳和时间的对应关系,确定哪一次返回的是哪一帧,这个我还要测试一下,尤其是返回的帧是按pts顺序还是dts顺序。
seek成功后,接下来的几帧似乎还是在seek之前的时间,等到把之前解码的帧消耗掉才会返回新的数据。所以似乎是需要stop后再start+seek才能保证?或者是根据pts时间戳筛选获得的帧,把不是当前时间的帧都扔掉。
有视频录制、剪辑相关需求的小伙伴,可以尝试下【微剪】插件哦,小程序首款视频剪辑工具,接入方便。也可以搜索【微剪插件演示】小程序体验一下。
你好,用手机预览调试。
onLoad: function (options) {
let video = wx.createVideoDecoder()
console.log(video)
video.start({source: '/assets/crop.mp4', mode: 0})
video.on('start', (v) => console.log(v))
video.on('seek', () => console.log(1))
video.on('stop', () => console.log(2))
video.seek(0)
video.stop()
console.log(video.getFrameData())
}
//希望能帮我看一下我是不是调用的不对???
请问下你的能用了吗?我的真机调试报这个错
thirdScriptError
Cannot read property 'MediaToolKit' of undefined
TypeError: Cannot read property 'MediaToolKit' of undefined
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
可以获取,将start函数中的source换成临时地址或者网络地址试试(我用的网络地址测试的),getFrameData需要循环调用才可
videodecoder能用了不,半年过去了还是用不了呀,微剪是不是调了内部api~
let video = wx.createVideoDecoder() console.log(video) video.on('start', (v) => { console.log("start", v); video.seek(0); }) video.on('seek', (e) => { console.log("seek", e.position); console.log("frameData", video.getFrameData()) }) video.on('stop', () => console.log(2)) video.start({source: '/assets/crop.mp4', mode: 0}) setTimeout(() => video.seek(1.0), 1000);
在seek之后getFrameData好像就可以了,不要stop。我在android机上稍微试了两下能正常输出frameData。时间是seek事件的e.position,帧内容是getFrameData()。
不过不知道具体什么时候会出现“当缓存区满的时候可能暂停取不到数据”,或者怎么避免这个问题,或者怎么从这个问题中恢复。还不敢用。
————update1
getFrameData()是每次调用都会获取下一帧,seek0之后,不停地调用getFrameData()就能获取每一帧的数据。(遇到null就需要等待一会儿吧(?),这一点还需要测试)
要注意返回的frameData的dts和pts时间戳和时间的对应关系,确定哪一次返回的是哪一帧,这个我还要测试一下,尤其是返回的帧是按pts顺序还是dts顺序。
seek成功后,接下来的几帧似乎还是在seek之前的时间,等到把之前解码的帧消耗掉才会返回新的数据。所以似乎是需要stop后再start+seek才能保证?或者是根据pts时间戳筛选获得的帧,把不是当前时间的帧都扔掉。
有视频录制、剪辑相关需求的小伙伴,可以尝试下【微剪】插件哦,小程序首款视频剪辑工具,接入方便。也可以搜索【微剪插件演示】小程序体验一下。
你好,用手机预览调试。
onLoad: function (options) {
let video = wx.createVideoDecoder()
console.log(video)
video.start({source: '/assets/crop.mp4', mode: 0})
video.on('start', (v) => console.log(v))
video.on('seek', () => console.log(1))
video.on('stop', () => console.log(2))
video.seek(0)
video.stop()
console.log(video.getFrameData())
}
//希望能帮我看一下我是不是调用的不对???
请问下你的能用了吗?我的真机调试报这个错
thirdScriptError
Cannot read property 'MediaToolKit' of undefined
TypeError: Cannot read property 'MediaToolKit' of undefined