asp.net关于上传flv 格式视频时 获取视频播放时间问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net关于上传flv 格式视频时 获取视频播放时间问题相关的知识,希望对你有一定的参考价值。

我要做一个asp.net视频网站 像56,youku 问题1: 用户上传视频时怎么获取这个视频播放多长时间 问题2: 怎么把其他格式转成flv格式问题1最主要 各位高手 帮忙回答下

参考技术A 向楼上的致谢,学习一下。顺便回答楼主的问题,要对上传的视频进行操作,首先要有解码器编码器,像楼上第二个链接里目录下的mencoder就是将上传的视频重新编码为flv的编码器,只有通过编码器才能获得视频的相关信息。当然也可能有例外,比如比较标准的avi、wmv,可能能通过简单一句话来获得其相关属性,但这只可能是特例。(此段未经求证)

获取 flv 视频长度

【中文标题】获取 flv 视频长度【英文标题】:get flv video length 【发布时间】:2011-09-07 01:55:20 【问题描述】:

当我尝试获取 flv 视频文件的长度时,我得到 0 秒,因为它只发生在某些视频中,否则我的功能可以正常工作。

下面是我的代码。

<?php
function mbmGetFLVDuration($file)
    // read file
  if (file_exists($file))
    $handle = fopen($file, "r");
    $contents = fread($handle, filesize($file));
    fclose($handle);
    //
    if (strlen($contents) > 3)
      if (substr($contents,0,3) == "FLV")
        $taglen = hexdec(bin2hex(substr($contents,strlen($contents)-3)));
        if (strlen($contents) > $taglen)
          $duration = hexdec(bin2hex(substr($contents,strlen($contents)-$taglen,3)))  ;
          return $duration;
        
      
    
  

// not working video file
$result = ceil(mbmGetFLVDuration('not_working_copy.flv')/1000);
// working video file
//$result = ceil(mbmGetFLVDuration('working_copy.flv')/1000);
echo date('H:i:s',mktime(0,0,$result))
?>

我在下面的链接中附上了工作和不工作的flv视频:

工作视频: http://blog.developeronhire.com/wp-content/uploads/downloads/2011/06/working_copy.flv

不工作的视频: http://blog.developeronhire.com/wp-content/uploads/downloads/2011/06/not_working_copy.flv

任何想法都会受到赞赏。

谢谢

【问题讨论】:

可能重复***.com/questions/3282273/… @Mr.黑色:对不起朋友,它没有被复制。请先阅读我的问题并发表评论。 在一个文件上工作而在另一个文件上不起作用,这是获取flv文件视频长度的重复问题吗? 【参考方案1】:

当视频的元信息部分或全部损坏时,就会出现此类问题。为了解决这个问题,请使用 FFMPEG 命令行工具,在上传时修复此类损坏的文件。下面是使用 FFMPEG 提取视频持续时间的代码 sn-p。

<?php
     ob_start();
     passthru("ffmpeg -i working_copy.flv  2>&1");
     $duration = ob_get_contents();
     $full = ob_get_contents();
     ob_end_clean();
     $search = "/duration.*?([0-9]1,)/";
     print_r($duration);
     $duration = preg_match($search, $duration, $matches, PREG_OFFSET_CAPTURE, 3);
     print_r('<pre>');
 print_r($matches[1][0]);
 print_r($full);
?>

要下载 FFMPEG,请转到 http://www.ffmpeg.org

【讨论】:

【参考方案2】:

首先,我担心你的函数可能会停止工作,给定一个足够大的 FLV 视频文件,并达到 PHP 的 memory_limit

$contents = fread($handle, filesize($file));

因为您实际上是将整个文件加载到内存中。

然后,在我看来,非工作文件也已损坏。 flvmeta 给出以下输出:

$ flvmeta --check not_working_copy.flv
0x00488473: error E30013: unknown tag type 250
0x00488477: error E40023: timestamps are decreasing from 130543 to 0
2 error(s), 0 warning(s)

如果您需要有效地从可能已损坏或包含非标准标签的文件中获取持续时间,我建议您使用MediaInfo,它在处理最奇特的视频文件方面做得很好,无需像 ffmpeg 那样改变它们。

它可以像任何命令行程序一样从 PHP 中调用,并通过命令行参数控制其输出:

$ MediaInfo --Inform="Video;%Duration%" not_working_copy.flv
130000

以毫秒为单位显示视频时长。

【讨论】:

非常感谢您抽出宝贵的时间。是的,您的解决方案工作正常。再次感谢您【参考方案3】:

您可以提取 flv 视频的元数据,您会找到所有信息,如长度、大小等。 见链接http://code.google.com/p/flv4php/ 祝你好运sujeet

【讨论】:

但这适用于所有类型的视频文件吗??

以上是关于asp.net关于上传flv 格式视频时 获取视频播放时间问题的主要内容,如果未能解决你的问题,请参考以下文章

用JAVA调用ffmpeg实现将各种视频格式转为flv时,怎样做出简单操作的界面?

如何转换上传的视频并从此文件中获取屏幕截图?

vue中播放flv格式视频(b站flv.js的使用)

java上传视频除了检查后缀,怎么判断文件格式,前8位来判断.flv格式有的00000018有的464C5601可靠么?求解

csharp Ffmpeg视频上传和转换,并通过asp.net获取缩略图

FFMPEG音视频开发:获取flv视频格式的时长