【流媒体新手】:怎么使用jrtplib传输H.264的视频流
发布时间:2011-06-27 19:30:46 文章来源:www.iduyao.cn 采编人员:星星草
【流媒体新手】:如何使用jrtplib传输H.264的视频流?
刚下了一个老版本的jrtplib-3.5.1和jthread-1.2.0,用VC++ 6.0均编译通过,并且有编译过jrtplib中带的examples.可以看到用example中的程序发送简单的rtp数据包和接收rtp数据包的大概流程,但我如果要用jrtplib来传输H.264的视频流,该如何做呢?
这一两天在看rfc3550和rfc3984,看得一头雾水.. 还是不太明白我该从哪里入手? 不知道哪位朋友能不能提供几个用jrtplib封装H.264视频流进行传输的例子? 小弟将不胜感激啊!
先拜谢了! thanks~~
------解决方案--------------------
路过,帮顶。。。
------解决方案--------------------
帮顶
------解决方案--------------------
/^\/^\
_|__| O|
\/ /~ \_/ \
\____|__________/ \
\_______ \
`\ \ \
| | \
/ / \
/ / \\
/ / \ \
/ / \ \
/ / _----_ \ \
/ / _-~ ~-_ | |
( ( _-~ _--_ ~-_ _/ |
\ ~-____-~ _-~ ~-_ ~-_-~ /
~-_ _-~ ~-_ _-~
~--______-~ ~-___-~
------解决方案--------------------
楼主这个问题给的分太少老~~ 起码给500分才够~~
可以通过生成SDP文件给播放器在指定端口接收数据播放,如果你不用动态调整编码器什么的就不用考虑另外发送RTCP.
而且RTCP必须自己实现RTSP服务结合起来用,没有实现RTSP服务,就谈不上实现RTCP.
具体H264字节流拆包和RTP封包方法如下:
UINT MediaStreamH264::TransportData(PBYTE pData, UINT dataSize, int pts)
{
PBYTE p_buffer = pData;
int i_buffer = dataSize;
UINT writeSize = 0;
while( i_buffer > 4 && ( p_buffer[0] != 0 || p_buffer[1] != 0 || p_buffer[2] != 1 ) )
{
i_buffer--;
p_buffer++;
}
/* Split nal units */
while( i_buffer > 4 )
{
int i_offset;
int i_size = i_buffer;
int i_skip = i_buffer;
/* search nal end */
for( i_offset = 4; i_offset+2 < i_buffer ; i_offset++)
{
if( p_buffer[i_offset] == 0 && p_buffer[i_offset+1] == 0 && p_buffer[i_offset+2] == 1 )
{
/* we found another startcode */
i_size = i_offset - ( p_buffer[i_offset-1] == 0 ? 1 : 0);
i_skip = i_offset;
break;
}
}
/* TODO add STAP-A to remove a lot of overhead with small slice/sei/... */
UINT iWrite = TransportH264Nal(p_buffer, i_size, pts, (i_size >= i_buffer) );
if (iWrite > 0 )
writeSize += iWrite;
i_buffer -= i_skip;
p_buffer += i_skip;
}
return writeSize;
}
UINT MediaStreamH264::TransportH264Nal(const PBYTE pNal, UINT nalSize, INT32 pts, BOOL isLast)
{
ATLock atlock(&m_tlockRun);
if (m_bRun == FALSE)
return 0;
if( nalSize < 5 )
return 0;
UINT mtu = m_nMTU;
const int i_max = mtu - RTP_HEADER_SIZE; /* payload max in one packet */
int i_nal_hdr;
int i_nal_type;
i_nal_hdr = pNal[3];
i_nal_type = i_nal_hdr&0x1f;
string sps;
string pps;
if( i_nal_type == 7 || i_nal_type == 8 )
{
/* XXX Why do you want to remove them ? It will break streaming with
* SPS/PPS change (broadcast) ? */
return 0;
}
/* Skip start code */
PBYTE p_data = pNal;
int i_data = nalSize;
p_data += 3;
i_data -= 3;
int writeSize = 0;
if( i_data <= i_max )
{
/* Single NAL unit packet */
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的
...
-
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不...
-
请问怎么在live555中接收jpeg
请问,我现在想接收一个服务器发送的jpeg 不知道怎么用live555做一个客户端, 接收它并显示。
请问应...
-
XP SP3 YUV420 的fiter依赖 在线等答案……
链接时媒体类型为WMMEDIASUBTYPE_I420
有的XP可以播放出来
有的就不行,请问不能播放...
-
如何获取通过麦克风来获取当前说话的音量?
使用Wave系统API采集音频输入的数据,当数据缓存区满了后,收到消息取得数据后,如何根据这里...
-
RFC3984 有没有完整的中文版本呢?
搜了几个 都是一半英文一半中文的。哎 郁闷!
------解决方案--------------------
英文的凑合...
-
介绍一个学习directshow和com、atl技术的网站
有一个学习directshow和com、atl技术的网站,还可以下视频教程,共享给大家: http://www...
-
攻击帖:jrtplib、live555是个垃圾,刚开始搞流媒体就用这玩意就是找s
不解释~
来丢我砖头吧~~
我分太多了用不完~ 支持的散分~~~
...
-
50分,寻找《Visual C++音频/视频处理技术及工程实践》的随书光盘?
急于使用其中的几个例程。若哪位好心人能够提供,非常感谢!!我的QQ:52...
-
h264的高宽比怎么获取?
我看标准里面只有样点的高宽比啊。
还有,bit rate可以读出来吗?
------解决方案--------------------
是要...