[转载]使用EasyRTMP读取MP4文件进行RTMP推送
2016-10-29 23:48
323 查看
本文转自EasyDarwin团队kim的博客:http://blog.csdn.net/jinlong0603/article/details/52965101
首先获取音视频编码信息,判断MP4文件是否存储音频轨和视频轨
如果存在音频轨、视频轨就起线程进行数据流获取并传给libEasyRTMP进行推送
主要的部分就是MP4Demux的使用,Demo中提供了代码,可自行学习。
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2016
前面已经介绍过EasyRTMP,这里不再多说,可以网上搜索相关内容。 本文讲述下基于libEasyRTMP推送库实现的MP4文件的直播推送。Github中Demo的下载地址https://github.com/EasyDarwin/EasyRTMP。Demo中EasyRTMP_FILE的工程是将MP4文件进行解析推送。主要使用MP4Demux进行解析,分别获取到音频流和视频流,再利用libEasyRTMP进行RTMP推送,这样就可以达到直播或者点播的效果了。
首先获取音视频编码信息,判断MP4文件是否存储音频轨和视频轨
//从MP4文件获取音视频编码信息,填入pusher媒体信息结构中 CMp4_avcC_box videoInfo; memset(&videoInfo, 0x00, sizeof(CMp4_avcC_box)); CMp4_mp4a_box audioInfo; memset(&audioInfo, 0x00, sizeof(CMp4_mp4a_box)); int nVideoTrackId = get_video_info_in_moov(g_root, videoInfo ); int nAudioTrackId = get_audio_info_in_moov(g_root, audioInfo );
如果存在音频轨、视频轨就起线程进行数据流获取并传给libEasyRTMP进行推送
//视频轨存在 if (nVideoTrackId>-1) { mediainfo.u32VideoCodec = EASY_SDK_VIDEO_CODEC_H264; mediainfo.u32VideoFps = 25; mediainfo.u32H264SpsLength = videoInfo.sps->sequenceParameterSetLength; mediainfo.u32H264PpsLength = videoInfo.pps->pictureParameterSetLength; if (videoInfo.sps->sequenceParameterSetNALUnit && videoInfo.sps->sequenceParameterSetLength>0 ) { memcpy(mediainfo.u8H264Sps, videoInfo.sps->sequenceParameterSetNALUnit, mediainfo.u32H264SpsLength); } if (videoInfo.pps->pictureParameterSetNALUnit && videoInfo.pps->pictureParameterSetLength>0 ) { memcpy(mediainfo.u8H264Pps, videoInfo.pps->pictureParameterSetNALUnit, mediainfo.u32H264PpsLength ); } g_mp4TrackThread[nVideoTrackId] = (HANDLE)_beginthreadex(NULL, 0, VideoThread, (void*)nVideoTrackId,0,0); g_bThreadLiving[nVideoTrackId] = true; } //音频轨存在 if (nAudioTrackId>-1) { mediainfo.u32AudioCodec = EASY_SDK_AUDIO_CODEC_AAC; mediainfo.u32AudioSamplerate = audioInfo.samplerate; mediainfo.u32AudioChannel = audioInfo.channelcount; //Create thread to push mp4 demux data( aac) g_mp4TrackThread[nAudioTrackId] = (HANDLE)_beginthreadex(NULL, 0, AudioThread, (void*)nAudioTrackId,0,0); g_bThreadLiving[nAudioTrackId] = true; }
主要的部分就是MP4Demux的使用,Demo中提供了代码,可自行学习。
获取更多信息
邮件:support@easydarwin.orgWEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2016
相关文章推荐
- 用Properties读取配置文件后,使用TreeMap对keys进行排序
- [转载]VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等
- 当类库项目中无法使用Application.StartupPath的时侯 (注:主要是在进行反射读取文件的时候!!)
- 使用OLEDB可以对excel文件进行读取1
- 使用OLEDB可以对excel文件进行读取1
- ArrayList 与HashSet的比较,及应用反射读取properties配置文件中的数据进行实例化再调用,以及类加载器的使用;还有HashCode的分析,及导致内存泄露,内存溢出的原因之一
- Android中使用SDcard进行文件的读取
- Android中使用SDcard进行文件的读取
- 在Linux环境下使用OpenSSL对消息和文件进行加密(转载)
- Android中使用SDcard进行文件的读取
- C#使用WINAPI进行读取写入配置文件_C#【编程联盟】
- 【转载】使用C#2.0进行文件压缩和解压
- 直接使用XIB/NIB文件,读取信息创建 UIView [通过Nib文件进行反序列化,得到对象]
- Android中使用SDcard进行文件的读取方法
- 使用weblogic连接池来得到数据库连接(通过配置文件进行读取的优化方案)
- 转载:如何使用 类进行文件的 I/O 处理
- php对大文件进行读取操作 转载
- 【转载】使用C#2.0进行文件压缩和解压
- Android 使用SDcard进行文件的读取
- Java 使用Zip进行多文件保存和读取