在运行mediastream.c之前确保你已经编译了ortp、ffmpeg、x264、speex、msx264、mediastream2,具体编译的东西看我之前的两篇文章编译mediastreamer2和ffmpeg
------------------------------------------------------------------------
先稍微了解下mediastreamer2
这个程序没有实现:用2个session来分别同时传送视频和音频。
它实现的是:用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
最终运行结果:大图显示的是远端,右下角的小图是本地预览