首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么NetStream元数据读取错误的视频持续时间?

为什么NetStream元数据读取错误的视频持续时间?
EN

Stack Overflow用户
提问于 2019-09-06 02:51:06
回答 1查看 52关注 0票数 0

我试图播放和控制一个视频,而我需要控制它的关键因素之一是它的持续时间。我写了一个函数,播放,暂停,恢复和停止视频,但是,如果我使用滑块寻找视频接近尾声,我得到一个错误,说时间是错误的。

我试着追踪时间,减去0.5秒和1秒。在这种情况下,视频比预期的长2-5秒?!维尔德。

代码语言:javascript
运行
复制
myVideoData = new Video();
nc = new NetConnection();
nc.connect(null);
ns = new NetStream(nc);
ns.client = {};
ns.client.onMetaData = ns_onMetaData;
ns.client.onCuePoint = ns_onCuePoint;
myVideoData.attachNetStream(ns);
ns.play(menu.videolist.selectedItem.data); //Video is loading and playing just fine

function ns_onMetaData(item: Object): void {
    myVideoDataW = item.width;
    myVideoDataH = item.height;
    myVideoDuration = item.duration;
    //Below this line is added for testing.
    ns.seek(item.duration); //It fails as Error #2044: Unhandled NetStatusEvent:. level=error, code=NetStream.Seek.InvalidTime
    //Tried to ns.seek(item.duration-1); and it works, except it seeks video not 1, but 2-5 seconds, depending on video length
    //I have same issue for every video, and I have tried like... 50-ish...
}

我只想知道是关于密码还是关于我.?我尝试过的所有50个视频都有同样的问题吗?我的视频来源是从我的手机,从youtube,从专业的网络商店。所有文件都是mp4!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-06 11:38:21

(1)

"...If我用滑块在接近尾声的时候寻找视频,我收到一个错误,说时间错了。“

确保myVideoDuration已知或设置为= 0;作为起点。例如:由于您的ns_onMetaData函数更新了持续时间,所以您还可以使用

代码语言:javascript
运行
复制
mc_Seekbar.addEventListener(MouseEvent.CLICK, on_click_SeekBar );

然后,您可以使用这个逻辑来寻找:

代码语言:javascript
运行
复制
function on_click_SeekBar (evt:Event = null) :void
{
    var myTime:int = (myVideoDuration / mc_Seekbar.width ) *  mc_Seekbar.mouseX;
    trace(">>> Seeking to : " + myTime + " seconds");
    ns.seek( myTime );
}

(2)

“为什么NetStream元数据读取错误的视频持续时间? ns.seek(item.duration);失败为错误#2044:未处理的NetStatusEvent:。code=NetStream.Seek.InvalidTime“level=error

这是因为.durationNumber数据类型,但是.seek实际上需要一个int值。

区别是..。Number = 16.005;int = 16;.数字包括小数点。NetStream的.seek需要一个没有分数的完整数字(基本上:只使用整数,不使用小数点)。

溶液

只需将.duration转换为int数据类型即可。

代码语言:javascript
运行
复制
ns.seek( int(item.duration) );

下面是一个基于代码的可测试示例。在编译后的相同位置给它一个名为video.mp4的文件。

代码语言:javascript
运行
复制
var myVideoData :Video = new Video();
var nc = new NetConnection(); nc.connect(null);
var ns :NetStream = new NetStream(nc);
ns.client = {};
ns.client.onMetaData = ns_onMetaData;
//ns.client.onCuePoint = ns_onCuePoint;
myVideoData.attachNetStream(ns);

var myVideoDuration:int, myVideoDataW:int, myVideoDataH:int = 0;

addChild(myVideoData);
//ns.play(menu.videolist.selectedItem.data); //Video is loading and playing just fine
ns.play("video.mp4");

function ns_onMetaData(item: Object) :void 
{
    myVideoDataW = item.width;
    myVideoDataH = item.height;
    myVideoDuration = item.duration; //update Int with duration
    
    //# Below this line is added for testing.
    ns.seek( int(item.duration) ); //option A: cast the Number to Int
    //ns.seek( myVideoDuration ); //option B: use an Int value
    trace("duration ( item.duration ) : " + ( item.duration) + " seconds.");
    trace("duration (myVideoDuration) : " + ( myVideoDuration) + " seconds.");
    
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57815121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档