我正在使用public class RootObject
{
public string amount { get; set; }
public string resptext { get; set; }
public string cvvresp { get; set; }
public string respcode { get; set; }
public string avsresp { get; set; }
public string merchid { get; set; }
public string token { get; set; }
public string authcode { get; set; }
public string respproc { get; set; }
public string emvTagData { get; set; }
public string retref { get; set; }
public string respstat { get; set; }
public string account { get; set; }
}
来查找mp3文件上的位置,并且工作正常。这是我在ffprobe
node.js包装器中所做的事情:
ffprobe
因此,您可以在几秒钟内寻找到指定的seek = function (fpath, seconds) {
var self = this;
return new Promise((resolve, reject) => {
//ffprobe -i /myfile.mp3 -show_frames -show_entries frame=pkt_pos -of default=noprint_wrappers=1:nokey=1 -hide_banner -loglevel panic -read_intervals 20%+#1
var loglevel = self.logger.isDebug() ? 'debug' : 'panic';
const args = [
'-hide_banner',
'-loglevel', loglevel,
'-show_frames',//Display information about each frame
'-show_entries', 'frame=pkt_pos',// Display only information about byte position
'-of', 'default=noprint_wrappers=1:nokey=1',//Don't want to print the key and the section header and footer
'-read_intervals', seconds + '%+#1', //Read only 1 packet after seeking to position 01:23
'-print_format', 'json',
'-v', 'quiet',
'-i', fpath
];
const opts = {
cwd: self._options.tempDir
};
const cb = (error, stdout) => {
if (error)
return reject(error);
try {
const outputObj = JSON.parse(stdout);
return resolve(outputObj);
} catch (ex) {
self.logger.error("seek failed %s", ex);
return reject(ex);
}
};
cp.execFile('ffprobe', args, opts, cb)
.on('error', reject);
});
}//seek
位置
startTime
然后看seek(path,startTime)
中第一帧的数据包,您将得到等价的字节,如:
frames
因此,当在position = function() {
if(this.raw.frames) {
if(this.raw.frames.length>0) {// get first stream ref
if(this.raw.frames[0].pkt_pos) {// get first stream ref
return this.raw.frames[0].pkt_pos;
}
}
}
return '';
}//position
文件上进行查找时,它工作正常,范围查询为
mp3
问题是,当我在rangeBytes bytes=80685-8000685 {
"url": "",
"path": "",
"raw": {
"frames": [
{
"pkt_pos": "80685"
}
]
}
} {
"url": "",
"path": "",
"raw": {
"frames": [
{
"pkt_pos": "8000685"
}
]
}
}
文件上使用它时,对wave
文件进行范围查询:
wave
在标准HTML5音频播放器中无法使用。
注意
我与上面的包装程序一起使用的rangeBytes bytes=768058-76800058 {
"url": "",
"path": "",
"raw": {
"frames": [
{
"pkt_pos": "768058"
}
]
}
} {
"url": "",
"path": "",
"raw": {
"frames": [
{
"pkt_pos": "76800058"
}
]
}
}
命令行命令是:
ffprobe
我的猜测是,这是否适用于ffprobe -i /myfile.mp3 -show_frames -show_entries frame=pkt_pos -of default=noprint_wrappers=1:nokey=1 -hide_banner -loglevel panic -read_intervals 20%+#1
和mp3
文件。