2015-04-20 82 views
0

我有一个ffmpeg的问题,我不知道如何继续。我有两台电脑:ffmpeg问题

客户:

  • 运行的Ubuntu 14.04
  • FFmpeg的安装
  • 使用C++语言
  • 特点:使用的ffmpeg从客户端的笔记本电脑的摄像头编码H264视频数据,然后实时流式传输到服务器

服务器:

  • 运行Windows 7
  • FFmpeg的安装
  • 使用C++语言(MFC)
  • 特点:从客户那里获取实时数据,并显示在屏幕上。

我刚刚连接客户端到服务器,他们可以一起聊天文本数据,我没有任何想法使实时视频工作。

而且我的问题是:

  1. [客户]如何(使用ffmpeg的代码),从笔记本电脑上的摄像头获取的视频,将其保存到缓冲区(原始数据),对其进行编码并发送至服务器?

    我使用ffmpeg从wc中获取视频,但保存到文件。我真的不想要它。代码是:

    ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 output.mkv 
    
  2. [客户端]如何从客户端获取原始数据,解码并播放它?

    我有一个想法,在MFC中使用directshow来播放它。

+1

你想要实时更新什么?你有什么试图让它实时更新? – DrCord

+0

我试图从客户端获取视频并在服务器上显示它。 – QuestionGuy

+1

为了得到Stack Overflow的帮助,你需要发布你已经尝试过的东西,本质上是“告诉我如何做到这一点”的问题,而没有表明你尝试过的解决方案在SO上没有得到很好的接收。 – DrCord

回答

0

如果你必须你可以实现在C++中自己的播放器使用FFmpeg库或libav库。这使您可以支持各种编解码器和格式。

在Windows上,您可以使用C++ Windows Media Player Control,但它仅支持少数几种格式,并且不支持H.264。

你有源服务器上的下列选项(你的Linux机器):

  • vlc转码

DivX3格式与ASF MP3似乎被WMP被接受:

cvlc input.mp4 --sout="#transcode{vcodec=DIV3,scale=Auto,acodec=mp3,ab=128,channels=2,samplerate=44100}:http{mux=asf,dst=:8080/}" --sout-keep 

在客户端上,您可以使用http://server_address:8080检索流。

  • ffmpegffserver

阅读ffserver DocumentationStreaming media with ffserver为了设置。

对于WMP您将使用再次ASF:

# ASF compatible 

<Stream test.asf> 
Feed feed1.ffm 
Format asf 
VideoFrameRate 15 
VideoSize 352x240 
VideoBitRate 256 
VideoBufferSize 40 
VideoGopSize 30 
AudioBitRate 64 
StartSendOnKey 
</Stream> 

Source

您可以使用http://ffserver_address:port/stream_name.asf检索流。

+0

为什么提到fork Libav?如果您建议可以使用这些库,那么您的意思是FFmpeg libav *库? – LordNeckbeard

+0

我知道这个仇恨。我也知道他们在清理代码库方面付出了很多努力,并且往往更加专注,所以我直觉地将它推荐给似乎刚刚开始朝这个方向发展的人。但是你是对的,我会更新答案,提及两者,因为这只是公平的。 – aergistal