现在的位置: 首页 > 综合 > 正文

带video和audio的mediastream.c

2013年08月21日 ⁄ 综合 ⁄ 共 1603字 ⁄ 字号 评论关闭

在运行mediastream.c之前确保你已经编译了ortpffmpegx264speexmsx264mediastream2,具体编译的东西看我之前的两篇文章编译mediastreamer2ffmpeg

------------------------------------------------------------------------

先稍微了解下mediastreamer2

这个程序没有实现:用2session来分别同时传送视频和音频。

它实现的是:用1个全双工的session来传送视频或者音频,不管是本机还是远端主机,运行的都是同一个程序,一次只能选择一种payload

1 利用mediastreamer2库封装的filter完成:从声卡捕捉声音,编码后通过rtp发送给远端主机,同时接收远端主机发来的rtp包,解码到声卡回放。

filter graph如下:

soundread -> ec -> encoder -> rtpsend

rtprecv -> decode -> dtmfgen -> ec-> soundwrite

2 利用mediastreamer2库封装的filter完成:从摄像头捕捉图像,编码后通过rtp发送给远端主机(有本地视频预览),同时接收远端主机发来的rtp包,解码后视频回放。

filter graph如下:

source -> pixconv -> tee -> encoder-> rtpsend

tee -> output

rtprecv -> decoder -> output

------------------------------------------------------------------------------

程序命令参数

mediastream --local <port> --remote<ip:port> --payload <payload type number>

[ --fmtp <fmtpline>] [ --jitter<miliseconds>]

编译

#gcc mediastream.c  –o mediastream  -lmediastreamer –DVIDEO_ENABLED

 

Audio部分:

PC1 IP: 192.168.1.44

PC2 IP: 192.168.1.45

Pc1#./mediastream --local5010 --remote 192.168.1.45:6010 --payload 110

Pc2#./mediastream --local6010 --remote 192.168.1.44:5010 --payload 110

110是指speex 语音codec

 

Video部分:

Pc1#./mediastream --local5010 --remote 192.168.1.45:6010 --payload 102

Pc2#./mediastream --local6010 --remote 192.168.1.44:5010 --payload 102

Payload 102是指h264编解码方式

-------------出现以下红色的问题------------------------
ortp-message-Using permissive algorithm
ortp-error-videostream.c:No encoder available for payload 102:H264.
ortp-message-Quality indicator : -1.000000

解决方法:编译安装msx264,虽然之前有装x264,但mediastreamer2不知道怎么用x264,必须用msx264把x264封装成mediastreamer2可用的接口,这样就解决了。

msx264 an H.264 plugin for mediastream2/linphone

最终运行结果:大图显示的是远端,右下角的小图是本地预览

 

抱歉!评论已关闭.