我正在构建一个Web应用程序,它应该从服务器http://lscube.org/projects/feng回放RTSP/RTP流.
HTML5视频/音频标签是否支持rtsp或rtp?如果没有,最简单的解决方案是什么?也许下载到VLC插件或类似的东西.
我正在考虑开发流媒体服务器,我有以下问题,通过RTSP(例如url:)rtsp://192.168.0.184/myvideo.mpg
或RTP
(例如url:)rtp://192.168.0.184
.
据我所知,RTSP
服务器主要用于已经存在的文件的流式传输,即不是实时的.RTP
服务器用于广播.
如果我错了,有人会纠正我,对吗?
我想开发一个服务器来在计算机屏幕上播放实时内容,即在流媒体广播时显示的内容.
很长的故事:
不久:
如何处理这些原始UDP数据以便通过H264/MPEG-4解码器过滤器进行解码?任何人都可以清楚地确定我与H264/MPEG流有关的步骤吗?
额外信息:
我可以用FFmpeg做到这一点......但是我无法弄清楚FFmpeg如何处理原始数据以便解码器可以解码.
我想将视频录制从我的Android手机流式传输到网络媒体服务器.
第一个问题是,当将MediaRecorder
输出设置为套接字时,流会丢失一些mdat
大小的标头.这可以通过在本地预处理该流并将丢失的数据添加到流中以便生成有效的输出流来解决.
问题是如何从那里开始.
如何将该流作为RTMP流输出?
我正在寻找C++中的RTP/RTSP库.我找到了pjsip,但它更像C风格.我正在寻找更多的OO库.
我一直在尝试使用新的低级MediaCodec,在Android平板电脑上使用H264编码来处理摄像头捕获的输入.我已经遇到了一些困难,因为MediaCodecAPI的文档很少,但我终于有了一些工作要做.
我按如下方式设置相机:
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFormat(ImageFormat.YV12); // <1>
parameters.setPreviewFpsRange(4000,60000);
parameters.setPreviewSize(640, 480);
mCamera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
对于编码部分,我正在实例化MediaCodec对象,如下所示:
mediaCodec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 640, 480);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 500000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar); // <2>
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodec.start();
Run Code Online (Sandbox Code Playgroud)
最终目标是创建一个RTP流(并与Skype对应),但到目前为止,我只是将原始H264直接流式传输到我的桌面.在那里,我使用以下GStreamer管道来显示结果:
gst-launch udpsrc port=5555 ! video/x-h264,width=640,height=480,framerate=15/1 ! ffdec_h264 ! autovideosink
Run Code Online (Sandbox Code Playgroud)
一切都很好,除了颜色.我需要在计算机中设置2个颜色格式:一个用于摄像头预览(行标记<1>
)和一个用于MediaCodec对象(标记为<2>
)
确定<1>
我使用的线的可接受值parameters.getSupportedPreviewFormats()
.据此,我知道相机上唯一支持的格式是ImageFormat.NV21和ImageFormat.YV2.
为<2>
,我检索的MediaCodecInfo.CodecCapabilities -object类型视频/ AVC,作为整数值与对应19(MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar和2130708361(其不与任何值对应MediaCodecInfo.CodecCapabilities).
除上述之外的任何其他值都会导致崩溃.
结合这些设置会得到不同的结果,我将在下面展示.这是Android上的屏幕截图(即"真实"颜色):
以下是Gstreamer显示的结果:
<1> …
我想知道为什么在RTP而不是TCP中使用UDP?主要的VoIP工具只使用UDP,因为我攻击了一些VoIP OSS.
我需要检测RTP数据包中的MPEG4 I帧.我知道如何删除RTP标头并获取其中的MPEG4帧,但我无法弄清楚如何识别I帧.
它有特定的签名/标题吗?
我在同一个网络上有两台计算机.其中一个用RTP协议发送电影(H264).是否可以创建一个简单的JavaScript应用程序来在第二台计算机上接收此流并显示在视频标签中?
到目前为止,我对WebRTC的印象是它被设计用于浏览器之间(都使用WebRTC api),但我只想在接收端使用它.
我想听一个RTP音频流,但是它的声音几乎没有差距 - 不会继续.可能是什么解决方案?我在Receiver(android)方面或Streamer(ffmpeg)方面遗漏了什么?
我正在使用ffmpeg来传输RTP音频,
ffmpeg -f lavfi -i aevalsrc="sin(400*2*PI*t)" -ar 8000 -vcodec pcm_u8 -f rtp rtp://192.168.0.15:41954 (port changes.)
Run Code Online (Sandbox Code Playgroud)
这是我的相关android代码:
AudioStream audioStream;
AudioGroup audioGroup;
@Override
public void onStart() {
super.onStart();
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
AudioManager audio = (AudioManager)getSystemService(AUDIO_SERVICE);
audio.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioGroup = new AudioGroup();
audioGroup.setMode(AudioGroup.MODE_ECHO_SUPPRESSION);
InetAddress inetAddress;
try {
inetAddress = InetAddress.getByName("192.168.0.15");
audioStream = new AudioStream(inetAddress);
audioStream.setCodec(AudioCodec.PCMU);
audioStream.setMode(RtpStream.MODE_NORMAL);
InetAddress inetAddressRemote = InetAddress.getByName("192.168.0.14");
audioStream.associate(inetAddressRemote, 6000);
((TextView)findViewById(R.id.tv_port)).setText("Port : " + String.valueOf(audioStream.getLocalPort()));
audioStream.join(audioGroup);
}
catch ( UnknownHostException e ) {
e.printStackTrace();
}
catch …
Run Code Online (Sandbox Code Playgroud)