【问题标题】:FFMPEG gets in never ending condition while live streaming on YouTubeFFMPEG 在 YouTube 上直播时处于永无止境的状态
【发布时间】:2019-04-11 11:40:47
【问题描述】:

我一直在使用 AS3 在 YouTube 上流式传输 1080P 视频,视频开始上传,近 4-5 分钟的视频已成功上传,之后 YouTube 显示流已结束,但 FFMPEG 永远不会点击“退出”或任何其他方法,即使在等待接下来的 10 分钟后。

以下是我正在使用的方法。

public var _nativeProcessStartupInfo:NativeProcessStartupInfo;
public var _processArgs:Vector.<String>;
public var _process:NativeProcess;
protected function StartVideo_clickHandler(event:MouseEvent):void
{
    _nativeProcessStartupInfo.executable = File.applicationStorageDirectory.resolvePath("ffmpeg.exe Path");
    _processArgs.push('-re');
    _processArgs.push('-i');
    _processArgs.push(VideoPath);
    _processArgs.push('-vcodec');
    _processArgs.push('copy');
    _processArgs.push('-acodec');
    _processArgs.push('copy');
    _processArgs.push('-maxrate');
    _processArgs.push('4500k');
    _processArgs.push('-bufsize');
    _processArgs.push('9000k');
    _processArgs.push('-pix_fmt'); 
    _processArgs.push('yuv422p');
    _processArgs.push('-preset');
    _processArgs.push('fast');
    _processArgs.push('-ac'); 
    _processArgs.push('2');
    _processArgs.push('-r'); 
    _processArgs.push('30');                            
    _processArgs.push('-g');
    _processArgs.push('60');                            
    _processArgs.push('-ar');
    _processArgs.push('44100');
    _processArgs.push('-f');
    _processArgs.push('flv');                   
    _processArgs.push(streamurl+'/'+streamname);
    _nativeProcessStartupInfo.arguments = _processArgs;
    _process = new NativeProcess();
    _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
    _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, progress);
    _process.addEventListener(NativeProcessExitEvent.EXIT, onExit);
    _process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOErrorNativeProcess);
    _process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOErrorNativeProcess);
    _process.start(_nativeProcessStartupInfo);
}
public function onIOErrorNativeProcess(event:IOErrorEvent):void
{
    trace(event.toString());
}
public function onOutputData(event:ProgressEvent):void
{
    trace("Got: ", _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable)); 
}
public function progress(e:ProgressEvent):void 
{
    trace(e);
}
public function onExit(e:NativeProcessExitEvent):void
{
    trace(e);
}

我也尝试过使用 720P 视频,将比特率从 4500k 更改为 2500k,这与 YouTube 一致,它运行良好,但 1080P 的情况并没有达到预期。

以下是视频详情: 分辨率:1920*1080 数据速率:3220kbps 帧率:20

提前致谢

【问题讨论】:

  • 您使用的是-vcodec copy -acodec copy,所以从-maxrate-ar 的所有内容都被忽略了,但我不知道为什么它没有退出。这可能是 ffmpeg 或您的代码或两者都有问题。因此,您应该手动运行相同的 ffmpeg 命令,无需编写脚本。它仍然永远不会退出吗?另外,显示来自 ffmpeg 命令的日志。
  • @Nayan,如果您使用命令行窗口而不是 AS3 来运行 FFmpeg,仍然没有关于 “它仍然永远不会退出” 的响应吗?或者问题现在解决了吗?
  • 对不起@llogan & @VC。一个用于替代回复,但问题不在于由于“进度”功能而发生的 ffmpeg 部分。我昨晚才纠正了这个问题

标签: actionscript-3 ffmpeg youtube encode


【解决方案1】:

下面的代码有两个问题。

  1. 在“进度”功能中,我没有读取 FFMPEG 的实际日志,必须更新进度事件,如下所示。

    public function progress(e:ProgressEvent):void 
    {
        trace("Progress: ", _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable));
    }
    
  2. 1234563 .

我不知道它背后的确切原因,但这个解决方案现在对我有帮助。

谢谢

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2018-07-16
    相关资源
    最近更新 更多