当前位置: 首页 > news >正文

html5快速建站什么行业应该做网站

html5快速建站,什么行业应该做网站,长沙财优化公司,郑州网络公司排名前十名文章目录 概要如何解密M3U8文件呢实现思路和代码序列图网络请求解密 结论 概要 视频文件很多已M3U8文件格式来提供#xff0c;先复习下什么是M3U8文件#xff01;用QT的 mutimedia框架来播放视频时#xff0c;有的视频加载慢#xff0c;有的视频加载快#xff0c;为啥先复习下什么是M3U8文件用QT的 mutimedia框架来播放视频时有的视频加载慢有的视频加载快为啥结论再最后 m3u8 文件实质是一个播放列表playlist其可能是一个媒体播放列表Media Playlist或者是一个主列表Master Playlist。但无论是哪种播放列表其内部文字使用的都是 utf-8 编码。 当 m3u8 文件作为媒体播放列表Meida Playlist时其内部信息记录的是一系列媒体片段资源顺序播放该片段资源即可完整展示多媒体资源。其格式如下所示 #EXTM3U #EXT-X-TARGETDURATION:10#EXTINF:9.009, http://media.example.com/first.ts #EXTINF:9.009, http://media.example.com/second.ts #EXTINF:3.003, http://media.example.com/third.ts对于点播来说客户端只需按顺序下载上述片段资源依次进行播放即可。而对于直播来说客户端需要 定时重新请求 该 m3u8 文件看下是否有新的片段数据需要进行下载并播放。 当 m3u8 作为主播放列表Master Playlist时其内部提供的是同一份媒体资源的多份流列表资源Variant Stream。其格式如下所示 #EXTM3U #EXT-X-STREAM-INF:BANDWIDTH150000,RESOLUTION416x234,CODECSavc1.42e00a,mp4a.40.2 http://example.com/low/index.m3u8 #EXT-X-STREAM-INF:BANDWIDTH240000,RESOLUTION416x234,CODECSavc1.42e00a,mp4a.40.2 http://example.com/lo_mid/index.m3u8 #EXT-X-STREAM-INF:BANDWIDTH440000,RESOLUTION416x234,CODECSavc1.42e00a,mp4a.40.2 http://example.com/hi_mid/index.m3u8 #EXT-X-STREAM-INF:BANDWIDTH640000,RESOLUTION640x360,CODECSavc1.42e00a,mp4a.40.2 http://example.com/high/index.m3u8 #EXT-X-STREAM-INF:BANDWIDTH64000,CODECSmp4a.40.5 http://example.com/audio/index.m3u8该备用流资源指定了多种不同码率不同格式的媒体播放列表并且该备用流资源也可同时提供不同版本的资源内容比如不同语言的音频文件不同角度拍摄的视屏文件等等。客户可以根据不同的网络状态选取合适码流的资源并且最好根据用户喜好选择合适的资源内容。 以上就是 m3u8 文件的大概内容 如何解密M3U8文件呢 示例 M3U8文件是一种播放列表文件用于存储和组织HLSHTTP Live Streaming流媒体数据。在M3U8文件中EXT-X-KEY、URI和IV等字段是用于描述流媒体的关键信息。 EXT-X-KEY: 这个字段用于指定加密密钥的信息。它通常包含一个URI该URI指向包含密钥的媒体文件。该字段还可能包含其他参数如密钥的加密算法和密码等。 URI: 这个字段指定了媒体文件的URL地址。它用于告诉播放器从哪个位置获取媒体数据。 IV: 这个字段是初始化向量Initialization Vector的缩写用于加密算法的初始化过程。在HLS流媒体中每个媒体片段都使用不同的初始化向量进行加密以确保每个片段的加密是独立的。 这些字段通常以特定的格式出现在M3U8文件中。下面是一个示例 #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID1, BANDWIDTH1280000 http://example.com/stream.m3u8?token1234567890 #EXT-X-KEY:METHODAES-128, URIhttp://example.com/key.txt, IV0x00000000000000000000000000000001 #EXT-X-KEY:METHODAES-128, URIhttp://example.com/key2.txt, IV0x00000001000000010000000100000002 #EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID1, BANDWIDTH512000, CODECSmp4a.40.2, RESOLUTION480x360, FRAME-RATE15 #EXTINF:16.733333, http://example.com/iframe.m3u8?tokenabcdefghijklmnopqrstuvwxyz在上述示例中#EXTM3U标识了文件为M3U8播放列表的开始。#EXT-X-STREAM-INF指定了流媒体的信息如节目ID和带宽。http://example.com/stream.m3u8?token1234567890是媒体文件的URI。接下来的#EXT-X-KEY字段指定了加密密钥的信息包括加密方法和密钥的URI以及初始化向量IV。在这个例子中有两个密钥每个密钥对应一个媒体片段。最后#EXT-X-I-FRAME-STREAM-INF指定了I帧媒体流的信息包括节目ID、带宽、编解码器、分辨率和帧率等。http://example.com/iframe.m3u8?tokenabcdefghijklmnopqrstuvwxyz是I帧媒体文件的URI。 实现思路和代码 序列图 网络请求 QNetworkRequest request(url); //请求m3u8地址request.setHeader(QNetworkRequest::ContentTypeHeader, application/x-www-form-urlencoded);addAllCookie(request);QNetworkReply *pNetworkResponse pManager-get(request);m_tsContent.clear();m_keyContent.clear();m_ivData.clear();QObject::connect(pNetworkResponse, QNetworkReply::finished, []{if (pNetworkResponse-error() QNetworkReply::NoError){QByteArray bytes pNetworkResponse-readAll();QJsonObject json_object QJsonDocument::fromJson(bytes).object();if(json_object[code].toInt() 10000){if(!json_object[data].isUndefined()){QJsonValue data json_object[data];QJsonValue urls data[videoUrl];// Test url hereQUrl videoUrl(urls[normal].toString());QNetworkRequest videoRequest(videoUrl);videoRequest.setHeader(QNetworkRequest::ContentTypeHeader, application/x-www-form-urlencoded);m_elaptimer.restart();QNetworkReply *pVideoNetworkResponse pManager-get(videoRequest);connect(pVideoNetworkResponse, QNetworkReply::finished, []{m3u8time m_elaptimer.elapsed();if(pVideoNetworkResponse-error() QNetworkReply::NoError) {QByteArray data pVideoNetworkResponse-readAll();QString m3u8Content QString::fromUtf8(data);QStringList lines m3u8Content.split(\n);QString keyLine;QString tsLine;foreach (const QString line, lines) {if (line.startsWith(#EXT-X-KEY:)) {keyLine line;qDebug() [www]: keyline - keyLine;} else if (line.startsWith(https:)) {tsLine line;qDebug() [www]: tsLine - tsLine;break;qDebug() [www]: test fist snippet and stop;}}QRegularExpression keyRegex(#EXT-X-KEY:METHOD([A-Za-z0-9-]),URI\([^\])\,IV([A-Za-z0-9-]));QRegularExpressionMatchIterator matchIterator keyRegex.globalMatch(keyLine);QString method;QString keyUri;QString IVString;if (matchIterator.hasNext()) {QRegularExpressionMatch match matchIterator.next();method match.captured(1);keyUri match.captured(2);IVString match.captured(3);}qDebug() [www] method: method;qDebug() [www] keyUri: keyUri;qDebug() [www] tsLine: tsLine;qDebug() [www] IVString: IVString;QByteArray tsData QByteArray();QByteArray keyData QByteArray();QByteArray ivData QByteArray::fromHex(IVString.right(IVString.size() - 2).toLatin1());m_ivData ivData;qDebug() [www] ivData: ivData;QString keyContent;QString tsContent;//Get key from uriQUrl keyUrl(keyUri);QNetworkRequest keyQuest(keyUrl);keyQuest.setHeader(QNetworkRequest::ContentTypeHeader, application/x-www-form-urlencoded);beginKey m_elaptimer.elapsed();QNetworkReply *keyResponse pManager-get(keyQuest);connect(keyResponse, SIGNAL(error(QNetworkReply::NetworkError)),this, SLOT(httpError(QNetworkReply::NetworkError)));connect(keyResponse, QNetworkReply::finished, []{if(keyResponse-error() QNetworkReply::NoError) {QByteArray keyData keyResponse-readAll();QString keyContent QString::fromUtf8(keyData);qDebug() [www] keyContent: keyContent;qDebug() [www] keyData: keyData.toHex();m_keyContent keyData;checkAesPara();} else {qDebug() [xiaole] keyResponse-errorString() ;}});//Get ts data from uriQUrl tsUrl(tsLine);QNetworkRequest tsRequest(tsUrl);tsRequest.setHeader(QNetworkRequest::ContentTypeHeader, application/x-www-form-urlencoded);QNetworkReply *tsResponse pManager-get(tsRequest);connect(tsResponse, SIGNAL(error(QNetworkReply::NetworkError)),this, SLOT(httpError(QNetworkReply::NetworkError)));connect(tsResponse, QNetworkReply::finished, []{if(tsResponse-error() QNetworkReply::NoError) {QByteArray tsData tsResponse-readAll();QString tsContent QString::fromUtf8(tsData);m_tsContent tsData;checkAesPara();} });} else {}});}}}pNetworkResponse-close();pNetworkResponse-deleteLater();});解密 #include qaesencryption.hextern C {#include openssl/aes.h#include openssl/rand.hQByteArray aesDecrypt(const QByteArray cipherText, const QByteArray key, const QByteArray iv) {// 创建一个AES解密上下文AES_KEY decryptKey;AES_set_decrypt_key(reinterpret_castconst unsigned char*(key.constData()), 128, decryptKey);// 解密数据QByteArray decryptedText(cipherText.size(), Qt::Uninitialized);AES_cbc_encrypt(reinterpret_castconst unsigned char*(cipherText.constData()),reinterpret_castunsigned char*(decryptedText.data()),cipherText.size(),decryptKey,const_castunsigned char*(reinterpret_castconst unsigned char*(iv.data())),AES_DECRYPT);return decryptedText;} }QByteArray qaesDecrypt(const QByteArray cipherText, const QByteArray key, const QByteArray iv) {return QAESEncryption::Decrypt(QAESEncryption::AES_128, QAESEncryption::CBC, cipherText, key,iv, QAESEncryption::ZERO); }checkAesPara() {if(!m_tsContent.isEmpty() !m_keyContent.isEmpty()){qDebug()keyContent m_keyContent tsContent m_tsContent.length();QByteArray decTsData aesDecrypt(m_tsContent, m_keyContent, m_ivData);QFile file(/home/test.ts); //保存到本地文件if (file.open(QIODevice::ReadWrite | QIODevice::Truncate)){file.write(decTsData);file.close();}writeOver m_elaptimer.elapsed();writeTime writeOver-jiemiOver;} }结论 ● ts片段越大缓冲时间越长反之亦然 ● qt播放器并不需要一个完整的ts下载完才开始播放。 所以视频加载快慢最大的因素是网速还有就是跟TS片段大小有关系。
http://www.dnsts.com.cn/news/198578.html

相关文章:

  • 资料库网站应该怎么做wordpress同步到本地
  • 手机网站首页怎么做做网络营销推广
  • 合肥做网站怎么样不备案 国内网站吗
  • 北京网站搭建服务wordpress获取自定类型
  • 电脑网站制作教程网络公司做网站赚钱码
  • 梧州网站优化网站建设费用计入什么科目
  • 如何制作网站建设三亚做网站的公司
  • 曲靖住房和城乡建设局网站网站导航菜单兰
  • 企业网站建设要点wordpress api 路径
  • 网站备案信息核验单怎么上海工商网上办事大厅官网
  • 做企业网站 目的网站建设方案多少钱
  • 网站前台设计模板网页设计于制作课程标准
  • 网站被攻击空间关了怎么办ps素材库
  • 软件企业公司网站模板下载专门做国外网站
  • 山西建设局网站首页seo是什么意思呢
  • 网站设计制作公司需要什么资质网站关键字排名怎么做
  • 一个产品有两个品牌怎么做网站软件销售
  • 龙岩网站设计价格机关门户网站 建设 方案
  • 鼎豪网站建设做问卷调查的网站有啥
  • 海南做网站公司网站字体一般是什么字体
  • 做网站服务器哪种好网站开发的英文书有什么
  • 网站建设维护兼职东营招标建设信息网
  • flash做网站的流程wordpress前台打开慢
  • 河南做网站那家最好wordpress wp_register_script
  • 鞋材加工东莞网站建设电商平台推广
  • 全屏网站 欣赏网站反链和外链的区别
  • 珠海做企业网站多少钱长沙口碑最好的装修公司排名
  • 怎么给网站做seo汕头教育学会网站建设
  • 网站建设述职报告拼多多运营怎么做
  • 北京高端网站建设宣传汉中住房和城乡建设部网站