【问题标题】:Begin stream simple mp4 with ffserver使用 ffserver 开始流式传输简单的 mp4
【发布时间】:2015-04-10 17:09:44
【问题描述】:

我想流式传输 mp4,为此我阅读了有关 ffserver 的信息。
所以我搜索并阅读了 ffserver 文档,但仍然无法流式传输一个简单的文件。
为此,我做了这些:
1-A win 8 和最后安装的 VLC。
2-A Ubuntu 13 和最后一个 ffmpeg 包。
3-保存到 /etc/ 并从 http://ffmpeg.org/sample.html 复制的 ffserver.conf 文件(我只是将文本复制到新文件中)。
4-运行这个命令:ffserver -f /etc/ffconfig.conf 这是结果:

avserver version 0.8.13-6:0.8.13-0ubuntu0.13.10.1, Copyright (c) 2000-2014 the Libav developers
  built on Jul 15 2014 13:53:49 with gcc 4.8.1
Tue Feb 10 07:29:07 2015 AVserver started.

5-检查 http://localhost:8090/stat.html 并且服务器状态正常。它显示了 4 个流:test1.mpg、test.asf、stat.html、index.html。
6-运行这个命令:ffmpeg -i test.mp4 http://localhost:8090/feed1.ffm 这是结果:

ffmpeg version 0.8.13-6:0.8.13-0ubuntu0.13.10.1, Copyright (c) 2000-2014 the Libav developers
  built on Jul 15 2014 13:53:49 with gcc 4.8.1
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'big.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isom
    creation_time   : 2015-02-05 20:35:09
  Duration: 00:21:36.12, start: 0.000000, bitrate: 788 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 720x404, 677 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 2015-02-05 17:05:45
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 106 kb/s
    Metadata:
      creation_time   : 2015-02-05 20:35:12
Incompatible sample format '(null)' for codec 'mp2', auto-selecting format 's16'
    Last message repeated 1 times
Incompatible sample format '(null)' for codec 'libmp3lame', auto-selecting format 's16'
[buffer @ 0x900f0c0] w:720 h:404 pixfmt:yuv420p
[scale @ 0x8ea5080] w:720 h:404 fmt:yuv420p -> w:160 h:128 fmt:yuv420p flags:0x4
[buffer @ 0x8ea34a0] Invalid pixel format string '-1'
Error opening filters!

7-我查看错误,但找不到发生这种情况的原因以及哪里出错了!

到目前为止,我阅读了许多有关 ffserver 的示例和教程,但其中大部分是关于直播的,但我只想流式传输一些 mp4 文件。

编辑:

我像这个链接一样安装了真正的 ffmpeg:https://askubuntu.com/questions/373322/how-to-replace-avconv-with-the-real-ffmpeg-and-have-it-work-right 但同样的错误(只需将 ppa 更改为 ppa:mc3man/trusty-media 以获取最新版本):

pp@ubuntu:~$ ffmpeg -i big.mp4 http://localhost:8090/feed1.ffm
ffmpeg version 0.8.13-6:0.8.13-0ubuntu0.13.10.1, Copyright (c) 2000-2014 the Libav developers
  built on Jul 15 2014 13:53:49 with gcc 4.8.1
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'big.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isom
    creation_time   : 2015-02-05 20:35:09
  Duration: 00:21:36.12, start: 0.000000, bitrate: 788 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 720x404, 677 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 2015-02-05 17:05:45
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 106 kb/s
    Metadata:
      creation_time   : 2015-02-05 20:35:12
Incompatible sample format '(null)' for codec 'mp2', auto-selecting format 's16'
    Last message repeated 1 times
Incompatible sample format '(null)' for codec 'libmp3lame', auto-selecting format 's16'
[buffer @ 0xa04e0c0] w:720 h:404 pixfmt:yuv420p
[scale @ 0x9ee4080] w:720 h:404 fmt:yuv420p -> w:160 h:128 fmt:yuv420p flags:0x4
[buffer @ 0x9ee24a0] Invalid pixel format string '-1'
Error opening filters!

谁能给我确切的命令,我应该运行以进行测试?
(我知道这就像初学者的问题,但我阅读了文档并尽我所能测试了所有内容,但仍然没有运气)

【问题讨论】:

  • 正如输出所提到的,您运行的不是 FFmpeg 而是 avconv,因为 Ubuntu 安装的是 avconv 而不是 FFmpeg。不过,我不知道这是否会导致您的问题。
  • 我像这个链接一样安装了真正的 ffmpeg:askubuntu.com/questions/373322/… 但同样的错误
  • 请显示最近 ffmpeg 的命令行输出。
  • 您的第二个控制台输出也来自古老的分叉版本。
  • !正如我所说,我像askubuntu.com/questions/373322/… 一样完成了这项工作并测试了 3 次。你知道获得真正 ffmpeg 的更好方法吗?

标签: ubuntu ffmpeg streaming video-streaming ffserver


【解决方案1】:

您不能使用 ffserver 流式传输 mp4 视频,因为它在文件头中包含全局元数据,这使得随机流访问变得不可能。您可以选择其他格式,例如 webm 或使用 MPEG-2 传输流(Apple 的 HLS)。请参阅 https://superuser.com/questions/563591/streaming-mp4-with-ffmpeg

HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 100000
CustomLog -
<Feed streamwebm.ffm>
  File /tmp/streamwebm.ffm
  FileMaxSize 50M
  ACL allow localhost
  ACL allow 128.199.149.46
  #ACL allow 127.0.0.1
  ACL allow 192.168.0.0 192.168.0.255
</Feed>
<Stream streamwebm>
#in command line run : ffmpeg -i yourvideo.mp4 -c:v libvpx -cpu-used 4 -threads 8    http://localhost:8090/streamwebm.ffm
Feed streamwebm.ffm
Format webm

# Video Settings
VideoFrameRate 30
VideoSize 624x368

# Audio settings
AudioCodec libvorbis
AudioSampleRate 48000
AVOptionAudio flags +global_header

MaxTime 0
AVOptionVideo me_range 16
AVOptionVideo qdiff 4
AVOptionVideo qmin 4
AVOptionVideo qmax 40
#AVOptionVideo good
AVOptionVideo flags +global_header

# Streaming settings
PreRoll 10
StartSendOnKey

Metadata author "author"
Metadata copyright "copyright"
Metadata title "Web app name"
Metadata comment "comment"

</Stream>

#stream for flv format
<Feed streamflv.ffm>
  File /tmp/streamflv.ffm
  FileMaxSize 50M
  ACL allow localhost
  ACL allow 192.168.88.89
  #ACL allow 127.0.0.1
  ACL allow 192.168.0.0 192.168.255.255
</Feed>

<Stream streamflv>
  Feed streamflv.ffm
  Format flv
  #Video Settings

  VideoCodec libx264
  VideoFrameRate 30
  VideoSize 640x360
  VideoBitRate 1000

  # Audio settings
  AudioCodec libfaac
  AudioSampleRate 22050
  AudioChannels 2 #this is creating problem
  AVOptionAudio flags +global_header

  MaxTime 0
  AVOptionVideo me_range 16
  AVOptionVideo qdiff 4
  AVOptionVideo qmin 4
  AVOptionVideo qmax 40
  #AVOptionVideo good
  AVOptionVideo flags +global_header

  # Streaming settings
  PreRoll 10
  StartSendOnKey

</Stream>

<Stream stat.html>
  Format status
  ACL allow localhost
  ACL allow 192.168.0.0 192.168.255.255
</Stream>

# Redirect index.html to the appropriate site

<Redirect index.html>
  URL http://yoururl.com
</Redirect>

在您的视频标签内 &lt;video&gt; &lt;source src="http://localhost:8090/streamwebm"&gt; &lt;/video&gt;

您可以根据需要编辑参数

【讨论】:

  • 我很困惑。在那个问题中没有答案,我阅读了 cmets,但我不知道如何做到这一点。你能编辑你的答案并解释更多或工作演示吗?
  • 谢谢!我测试了一下,我应该从 HTTPPort HTTPBindAddress 中删除 HTTP 并删除元数据,因为 ffserver 说它们是未知的,删除 flv 流部分是因为 libfaac 未知(为什么?)。
  • 另外我对其进行测试并转到http://localhost:8090/streamwebm 并且将显示播放器,但预览图像来自视频中间(当我运行命令时似乎播放视频,但我希望每个用户都播放他/她的视频从一开始),我也点击了播放按钮,但正在缓冲和缓冲,没有播放。我应该说我用一个健康的 mp4 和一个新的 Fedora 和最后一个 ffmpeg 的 Ubuntu 测试它。我错过了什么?
  • 也在ubuntu中运行说Failed to set value ''libvx' for option 'c:v'。我必须感谢您的帮助,因为直到现在没有其他人帮助我解决这个问题。谢谢。
  • 我希望我能接受它,但关于那个问题,我仍然无法流式传输视频。
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2019-10-04
相关资源
最近更新 更多