像很多80,90后年轻人(老男人吧)一样,周星驰一直就是哥喜爱的电影演员之一,不仅喜欢星爷的人物形象,更是喜欢这种乐观向上的精神!(哥16年的QQ一直就是周星驰这个昵称)。
在QQ技术群里,很多人都在研究ffmpeg,因为功能强大,简单直接就能实现想要的功能,但是想要用好,还是要下一些功夫。
今天的主题就是怎样实现对h264,aac流输入,合成后输出ts,m3u8,即HLS,苹果设备的点播方案!!!!!!!!!!!!!!!!!!!!
网上有很多关于文件转mp4或者其他文件格式的例子,但是换成数据流输入了,怎么办呢?很多人也是一筹莫展。网上也鲜有这种代码或者文章。
今天,哥哥就顺便说几句,关于我自己的一些想法。
晚上有很多例子是关于输入视频文件的,对我们有些参考,但是要换成输入h264或者aac数据流,大家都是没办法啊。
HLS (HTTP Live Streaming)是Apple的动态码率自适应技术(复制过来的),只有苹果的浏览器才能直接用,因为苹果不支持flash控件(自然也不支持rtmp),所以才有了HLS技术用于点播直播。调试的时候可以下载一个VLC播放器,这个播放器可以打开m3u8。
百度这样说的:“ts是高清摄像机拍摄下进行的封装格式,全称为MPEG2-TS。ts即"Transport Stream"的缩写。MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。先不管这些了,反正HLS就要用到TS格式的文件,一个一个的。贴张图吧,百说不如一见:
M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。
M3U8文件举例,例如使用云图TV点播直播节目时,发送请求:
看到没,其实苹果的点播就是http上直接访问。
设置存ts,m3u8的路径,输入h264和aac流,根据设置的ts长度和个数,不断更新ts文件和m3u8文件
说了这么多基础,来点实际的吧:
我封装的最后的接口函数:
通过关键帧获取视频信息并
avio_alloc_context(这个函数很多文章或者代码里面都没有提到过吧),生成一个自定义输入io,用来探测h264的格式
至此,文件初始化工作完成
完了,搞完收工!!!!!!看看效果
中间有很多困扰:枚举下:比如ts文件格式必须输入的aac为 ADTS编码的,即有7个字节的头,没有就别想播放。
音视频同步,主要还是通过音视频时间戳pts,dts同步的。m3u8及ts文件更新,根据设置的一个ts文件秒数和个数进行不断更新,比如设置的5秒一个,一共3个,那么,每隔3秒,保存ts并创建新的ts,然后更新m3u8文件信息.
我的m3u8文件内容:
测试的时候,装备一台苹果手机(肾没了没办法就下载个VLC播放器也行),一个免费的http服务器软件,我下的免费的easywebserver。准备h264数据源和AAC数据源,这方面办法很多,读h264,aac文件,截取屏幕或者摄像头,aac获取麦克风转成AAC,或者输入音频文件转成AAC(编码一定要有 ADTS
但是上面说了这么多,应该也能自己做了吧。什么时候传个DEMO上来,有空再说吧
传点代码(关键的一段):
今天花了2个小时把DEMO做好了,可以下载看看效果,有问题或者需要交流,可以联系我,谢谢(前面一个是v2版本,后面是v1版本)
*需要合作的联系QQ,可以当当技术顾问或者核心技术提供,本人03年从事工作,“精通”音视频应用编程技术(勉强加个精通,吸引眼球,哈哈),精通VC,MFC,多媒体教学软件,录播软件,直播软件的核心技术大部分已掌握,如ffmpeg技术,Directshow技术,MP4,FLV编码合成,H264,AAC,MP3,可以运用IPP进行高效图像空间转换等,可以运用INTEL和cuda进行硬件H264编解码,可以实现240帧1080P实时编码,完全同步及平滑度极高,rtmp,HLS直播推送,rtmp服务器,YV12,YUV422,NV12,RGB24,RGB32熟悉转换,缩放,wav,AAC, mp3的编码解码,视频切换特效算法,视频水印,LOGO,文字。屏幕截取录像,摄像头捕获录像,D3D高效视频图像显示,OPENCV,图像库ximage,GDI,GDIPLUS熟练应用,语音识别及文字转换,人脸识别及匹配,局域网内远程控制,音视频实时通话,声卡捕获回放等,另外SQL数据库,ACCESS,EXCEL数据库,DOC,PDF文件打开提取,FTPServer,Client,以上所有代码均已商用。
本帖最后由 长河落 于 22:52 编辑 ###之前代码没贴好,十分抱歉,重新调整了一下###
本帖被以下淘专辑推荐: |
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。