可以在编码器中播放编码器输出的视频文件吗?

| 我有一个视频文件,我需要将其编码为H264 / AVC并通过HTTP馈送到客户端。我需要的是我在客户端的播放器可以在编码视频时播放视频。 AFAIK,要使播放器能够在视频下载时播放,必须在视频文件的开头放置\“ moov atom \”。但是,编码器(例如:ffmpeg)在完成编码后,总是在文件末尾写入“ moov atom \”。 编码器有什么方法可以在编码输出的开头放置“ moov atom”?还是播放没有Moov Atom存在的视频? 预先感谢 左心室     
已邀请:
        是的,这是可能的,但仅适用于某些容器格式。使用QuickTime / MP4容器是不可能的。在这些格式中,moov原子包含样本偏移量(mdat原子中样本的位置)。直到对视频进行编码后,才能知道这些。借助VOD(视频点播),您可以获取完成的文件,并将moov原子移到最前面,以使流媒体工作更好。但是,如果您正在进行编码,则无法执行此操作。要使此工作有效,您将需要使用面向流的传输格式。像FLV或MPEG-TS之类的东西都可以工作。如果您将视频传递到ffmpeg,并告诉它在FLV容器中生成H.264视频,则可以按照编码后的格式将数据提供给播放器,这样便可以正常工作。当然,如果要通过HTTP提供服务,则可能必须编写自己的服务器(或现有服务器的模块)。据我所知,没有任何东西支持在编写文件时提供文件(问题是发送内容长度标头时文件大小未知)。但是,如果您通过RTMP或RTSP提供视频,则可以使用现有软件来完成此工作。     
        您可以通过使用ffmpeg中的qt-faststart工具重写文件来将MOOV Atom移至文件开头。您需要自己从源代码进行编译(但至少在Linux / Mac OS中非常容易)。只需下载libavcodec的源代码,例如: http://libav.org/releases/libav-0.8.tar.xz 解压它并进入工具目录,有一个名为qt-faststart.c的文件,只需使用以下命令进行构建: 使qt-faststart 您现在可以像这样调用它来重新分配MOOV Atom:qt-faststart input.mp4 output.mp4     
        我也曾用ffmpeg尝试过同样的事情,但没有成功。但是使用vlc,尽管使用rtsp,我仍然可以同时在Android上下载,转码和流式传输。我没有尝试使用HTTP渐进方法。我在vlc中使用了mpeg4视频编解码器,mpega音频编解码器。     

要回复问题请先登录注册