- 浏览: 150548 次
- 性别:
- 来自: 广州
最新评论
-
yinren13:
说的便捷的视频会议,我们公司的遥控器一按就能开始的视频会议tu ...
便捷视频会议 -
xujinquan19:
...
可视通讯与移植、跨平台开发 -
xujinquan19:
...
Android 平台下的即时通讯 -
xujinquan19:
...
Android 平台下的即时通讯 -
xujinquan19:
...
Android 平台下的即时通讯
ios没有直接得api用来封装传输rtp,但是经常有用到得接收过来得音视频数据,经过X264处理转换便可以封装为Rtp包进行直接发送。大家可以看代码:
复制代码
- #include "rtpsession.h"
- #include "rtppacket.h"
- #include "rtpudpv4transmitter.h"
- #include "rtpipv4address.h"
- #include "rtpsessionparams.h"
- #include "rtperrors.h"
- @interface VideoRTPPack : NSObject<SocketHandlerDelegate>
- {
- RTPSession m_RTPSession;
-
- NSMutableDictionary *dicDataBuffer;
- }
- @property(nonatomic, retain) NSMutableDictionary *dicDataBuffer;
- - (id)initWithVideoRTP:(NSString *)hostIP onPort:(unsigned short)port;
- - (void)createVideoRTP:(NSString *)host onPort:(unsigned short)port;
- - (void)SendVideoPacket:(unsigned char*)videoData
- Nal:(int)_nal
- Size:(size_t)videoDataSize
- User:(unsigned long)user_id
- FrameID:(int)video_frame_id;
- - (void)resendSubPacketData:(int)frameID withSubPack:(int)packID;
- - (void)closeVideoRTP;
- @end
- #import "VideoRTPPack.h"
- @implementation VideoRTPPack
- @synthesize dicDataBuffer;
- - (id)initWithVideoRTP:(NSString *)hostIP onPort:(unsigned short)port
- {
- if (self = [super init])
- {
- [self createVideoRTP:hostIP onPort:port];
-
- dicDataBuffer = [[NSMutableDictionary alloc] init];
- }
-
- return self;
- }
- - (void)dealloc
- {
- KLC_RELEASE_SAFELY(self.dicDataBuffer)
-
- [super dealloc];
- }
- - (void)createVideoRTP:(NSString *)host onPort:(unsigned short)port
- {
- RTPUDPv4TransmissionParams m_VideoTransparams;
- RTPSessionParams m_VideoSessionparams;
-
- m_VideoSessionparams.SetOwnTimestampUnit(1.0/10.0);
- m_VideoSessionparams.SetAcceptOwnPackets(TRUE);
- m_VideoSessionparams.SetUsePollThread(0);
- m_VideoTransparams.SetPortbase(port);
-
- int nStatus = m_RTPSession.Create(m_VideoSessionparams, &m_VideoTransparams);
- if(nStatus < 0)
- {
- NSLog(@"create rtp faild!");
- return;
- }
-
- unsigned long ipAddress = ntohl(inet_addr([host UTF8String]));
-
- RTPIPv4Address JRTPVideoAddr(ipAddress, port);
- nStatus = m_RTPSession.AddDestination(JRTPVideoAddr);
- if(nStatus < 0)
- {
- NSLog(@"add destination faild!");
- return;
- }
-
- m_RTPSession.SetDefaultPayloadType(96);
- m_RTPSession.SetDefaultMark(FALSE);
- m_RTPSession.SetDefaultTimestampIncrement(160);
- }
- - (void)SendVideoPacket:(unsigned char*)videoData
- Nal:(int)_nal
- Size:(size_t)videoDataSize
- User:(unsigned long)user_id
- FrameID:(int)video_frame_id
- {
- NSLog(@"video_frame_id = %d", video_frame_id);
-
- unsigned short length = 0;
- int subPackIndex = 1;
- int i_video_loop = 0, offset = 0, video_pack_len = 0;
- NSMutableArray *subPackArray = [[NSMutableArray alloc] init];
-
- MSQ_PACK_MID msq_pack_mid;
- strcpy(msq_pack_mid.msq_head.AppName, GAppName);
- msq_pack_mid.msq_head.sTransType = htons(TRANSTYPE_CLIENTTOSERVER);
- msq_pack_mid.msq_head.sDataType = htons(SENDSTREAM_VIDEO_DATATYPE);
- msq_pack_mid.msq_head.lSendID = htonl(user_id);
-
- i_video_loop = videoDataSize / VIDEO_PACKET_SIZE;
- if ((videoDataSize % VIDEO_PACKET_SIZE) > 0) i_video_loop ++;
-
- while (videoDataSize)
- {
- VideoPacket *pVideoPacket = (VideoPacket*)msq_pack_mid.msq_data;
-
- pVideoPacket->PacketHead.TotalPackets = i_video_loop;
- pVideoPacket->PacketHead.subpacketindex = subPackIndex;
- pVideoPacket->PacketHead.sOffset = htons(offset);
-
- video_pack_len = (videoDataSize < VIDEO_PACKET_SIZE) ? videoDataSize:VIDEO_PACKET_SIZE;
- pVideoPacket->PacketHead.sDataLength = htons(video_pack_len);
- videoDataSize = videoDataSize - video_pack_len;
-
- pVideoPacket->PacketHead.lFrameID = htonl(video_frame_id);
- pVideoPacket->PacketHead.timeStart = 0;
- pVideoPacket->PacketHead.timeEnd = 0;
- pVideoPacket->PacketHead.s_nal = _nal;
-
- memcpy(pVideoPacket->rawData, videoData+offset, video_pack_len);
- offset = offset + video_pack_len;
-
- length = sizeof(VideoPacketHead) + video_pack_len;
-
- msq_pack_mid.msq_head.sTCPLength = htons(length);
- msq_pack_mid.msq_head.sDataLength = msq_pack_mid.msq_head.sTCPLength;
-
- NSData *subData = [NSData dataWithBytes:(void *)&msq_pack_mid length:sizeof(MSQ_HEAD)+length];
- [subPackArray addObject:subData];
-
- m_RTPSession.SendPacket(&msq_pack_mid, sizeof(MSQ_HEAD)+length);
-
- subPackIndex ++;
- }
-
- // 把视频数据存入缓冲区
- if ([[self.dicDataBuffer allKeys] count] < 50)
- {
- [self.dicDataBuffer setObject:subPackArray
- forKey:[NSNumber numberWithInt:video_frame_id]];
- }
- else
- {
- [self.dicDataBuffer removeObjectForKey:[NSNumber numberWithInt:video_frame_id-51]];
- [self.dicDataBuffer setObject:subPackArray
- forKey:[NSNumber numberWithInt:video_frame_id]];
- }
-
- KLC_RELEASE_SAFELY(subPackArray)
- }
- - (void)resendSubPacketData:(int)frameID withSubPack:(int)packID
- {
- NSArray *lostArray = (NSArray *)[self.dicDataBuffer objectForKey:[NSNumber numberWithInt:frameID]];
- NSData *lostData = [lostArray objectAtIndex:packID-1];
-
- int nStatus = m_RTPSession.SendPacket([lostData bytes], [lostData length]);
- if (nStatus == 0) NSLog(@"ReSend Packet Data Succeed!");
- }
- - (void)closeVideoRTP
- {
- if (m_RTPSession.IsActive())
- {
- m_RTPSession.Destroy();
- }
- }
- @end
demo程序如附件中
- iPhone视频聊天V1.2.rar (8.2 MB)
- 下载次数: 30
发表评论
-
手机视频会议
2012-11-16 14:03 846在这个时代,手机被开发者们所赋予的意义已经远远超出了大众的期望 ... -
视频通讯demo源码
2012-11-09 15:23 1174以下为anychat视频通讯系统中的部分回调函数源码: 具体 ... -
音视频对话开发
2012-09-20 17:21 747AnyChat for Android是佰锐科技继2010年发 ... -
H.264视频编码标准在网络视频监控系统中的应用 .
2012-08-24 15:13 992【摘 要】本文介绍了ITU-T最新高性能视频压缩标准H.264 ... -
安卓平台下的即时通讯
2012-08-24 15:12 976基于Android 平台简易即时通讯的研究与设计 摘要 ... -
手机音视频应用开发(专注于Symbian、iPhone、Android等跨平台音视频应用开发方案)
2012-08-24 14:47 1151一款好的手机应用, 能让用户在第一分钟就爱上他, 一款烂的手 ... -
手机视频通讯开发
2012-08-24 14:46 823如今,3G网络快速发展 ... -
android视频开发
2012-08-16 17:31 1023摘要:论文简单介绍Android 平台的特性,主要阐述了基于A ... -
android视频聊天软件推荐
2012-08-15 17:00 1065正在当前那个社会 ... -
音视频交流服务系统
2012-03-15 16:22 911下面的这个平台是一种视频服务的应用,比如A(客户端)打视频电话 ... -
音视频开发平台
2012-03-15 16:12 839近日,腾讯公司发布了Q ... -
即时通讯开发平台(音视频)
2012-03-15 16:11 935近日,腾讯公司发布了Q ... -
手机视频之营销模式
2012-02-16 10:43 9063G时代的逼近,手机视 ... -
手机视频应用开发
2011-12-30 14:56 787AnyChat for Android是佰锐科技继2010年发 ... -
Android视频通话(即时通讯,可视电话,视频通讯,监控,电视直播)推荐
2011-06-22 15:21 2038正在当前那个社会里,相信良多伴侣都是独自一人正在中地拼搏,好久 ... -
安卓视频通讯与监控系统完全版本正式发布
2011-05-04 17:12 1111通过数个月的研发,视频通讯安卓版本的程序已经出来了。 ... -
LINUX常用命令
2011-04-22 15:22 656Linux 系统常用命令格 ... -
Linux网络编程
2011-04-22 15:17 694Linux网络编程 linux socket的 ... -
GCC对ARM支持的所有优化选项及指令
2011-04-22 15:11 20773.17.1 ARM Options These `-m' ... -
3G手机视频即时通讯开发平台(跨平台,多系统)
2011-04-13 11:43 948介绍: 一、系统概述 “佰锐3 ...
相关推荐
这个压缩包文件提供的"iOS音视频硬件编码源码"是一个不依赖任何第三方库的原生实现,利用了Apple提供的两个核心框架:AudioToolbox和VideoToolbox。这两个框架是iOS系统内建的,专为音频和视频处理设计,提供了高效...
在iOS平台上实现视频通话功能,通常涉及到多个技术层面,包括音视频采集、编码、传输以及解码和渲染等。以下是对这些关键知识点的详细说明: 1. **音视频采集**: - **音频采集**:iOS设备上的音频采集通常通过...
在这个"iOS ffmpeg软解码demo"中,我们将深入探讨如何在iOS应用中使用`ffmpeg`进行软解码,以实现对音视频数据的高效处理。 软解码是指通过CPU来执行的解码过程,与硬件解码(使用GPU或专用硬件)相比,可能会消耗...
在iOS平台上实现视频通话和直播功能,涉及到一系列的技术和组件,包括音视频采集、编码、传输、解码和渲染等步骤。以下是对这些关键知识点的详细讲解: 1. **音视频采集**:在iOS设备上,我们可以使用AVFoundation...
在iOS平台上,FFmpeg被用于音视频的编码、解码、转码、播放等多个场景。本文将详细探讨iOS上使用FFmpeg进行软编码的原理和实践。 首先,软编码是指通过CPU执行的编码过程,而不是依赖硬件加速。在iOS上,由于设备...
开发者可以学习如何裁剪图片、滤镜处理,以及如何播放和录制音视频。 8. 地图与定位服务: 如果涉及到地图应用,Demo可能包含了使用Apple MapKit或第三方库如Google Maps SDK,学习如何显示地图、添加标注、获取...
总的来说,这个项目提供了一个使用AVPlayer封装的基础播放器,对于iOS开发者来说,通过研究这个项目,不仅可以了解AVPlayer的基本用法,还能学习到如何进行组件封装,以及如何与其他系统服务(如音视频资源加载、...
6. **多路复用与传输控制**:RTC应用需要处理多个音视频流的同时传输,这涉及到多路复用(multiplexing)技术,如RTP/RTCP协议。同时,为了保证流畅性,还需要有适当的带宽控制策略。 7. **用户界面设计**:演示...
ijkplayer源于FFmpeg项目,FFmpeg是一个著名的音视频处理开源库。ijkplayer将FFmpeg进行了封装,使其更易于在移动平台上使用,同时提供了更友好的API接口和更好的性能优化。它的主要优势在于对多种视频格式的支持...
这个“mac QuickTime hevc h265 mp4 demo iOS 视频示例”是一个特别针对iOS设备和macOS系统演示如何使用QuickTime Player播放HEVC(High Efficiency Video Coding)和H.265编码的MP4视频的实例。 HEVC/H.265是一种...
一直都想好好学学音视频这方面的知识,抽了几个周末参考一些资料,尝试着写了一个简易的音视频播放框架,支持音视频播放、音乐缓存,其实吧,也就是尽可能的封装罢了,方便以后自己使用。目前只是开始,可能有些不足...
`ios-通讯软件中的语音录制与播放.zip`这个压缩包提供了一个Demo,它封装了两个关键控件:一个是用于语音录制,另一个是用于语音播放。这样的设计便于开发者快速集成到自己的应用中。 首先,我们要理解语音录制的...
2. **视频编码与解码**:在视频对话中,视频数据需要经过编码才能在网络上传输,然后在接收端解码。常见的视频编解码器有H.264、VP8和VP9等。插件可能已经封装了这些编解码过程,以便开发者可以简单地调用接口。 3....
腾讯IM提供了包括单聊、群聊、音视频通话、文件传输等多种功能。为了在自己的应用中集成这些功能,开发者需要注册并创建应用,获取到必要的AppID和AppKey,这是与腾讯IM服务器交互的身份凭证。 接下来,我们进入...
- 音频/视频通话:集成环信的音视频通话接口,创建相应的UI组件,并处理通话的发起、接受、挂断等操作。 5. **Demo详解**: - `Vue-demo-master`压缩包中包含了完整的Vue项目结构,你可以在本地通过Vue CLI或...
这里我们主要探讨的是一个基础的视频通讯Demo,它专注于视频通话功能,仅支持视频流的捕获和传输。 1. **视频采集**: - **Camera API**:Android提供了Camera API用于访问和控制设备的摄像头。在Demo中,开发者...
它的核心是基于 FFmpeg,一个知名的跨平台多媒体处理库,为开发者提供了灵活且高效的音视频解码和播放能力。在 iOS 开发中,IJKPlayer 是 IJKMedia 在这个平台上的实现,它不仅支持 iOS 设备,还兼容了 Android 平台...
本“xmpp iOS demo”是一个示例项目,旨在帮助开发者了解如何在iOS应用中集成并使用XMPP框架进行即时通讯功能的开发。 首先,我们需要了解XMPP的基本概念。XMPP的核心是Jabber协议,它构建在TCP/IP之上,通过XML...
6. **性能优化**:针对不同的应用场景,对代码进行优化,例如消息推送的延迟优化,音视频通话的带宽控制等。 7. **兼容性测试**:确保抽离出来的组件在不同的设备和操作系统版本上都能正常工作。 8. **单元测试**...