我是否需要进行任何代码级更改才能通过HTTP Live Streaming协议播放我的视频?或者它是一个服务器问题,我需要重新编码视频等?
我们已经审核了您的应用程序,但无法将此版本发布到App Store,因为它没有使用HTTP Live Streaming协议,这是通过蜂窝网络播放流媒体视频超过十分钟所必需的.我们在下面提供了其他详细信息以帮助解释该问题,并希望您考虑修改并重新提交您的申请.
以下是我播放视频的方式.它只是指向CloudFront URL:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
STVideo *mySTVideo;
mySTVideo = [items objectAtIndex:indexPath.row];
moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:mySTVideo.video_url]];
moviePlayerViewController.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"st-screen.png"]];
[self presentMoviePlayerViewControllerAnimated:moviePlayerViewController];
[moviePlayerViewController release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Run Code Online (Sandbox Code Playgroud) iphone cocoa-touch objective-c app-store http-live-streaming
我们可以通过android中的异步任务流式传输音频文件.如果你做了,给我一个例子.
我有一个m3u8播放列表文件(让我们称之为素数),它指向另一个播放列表文件,该文件又具有带有密钥文件URL的ts URL.使用MPMoviePlayer我当前可以播放该prime m3u8文件.这些段encrypted使用AES-128位加密,密钥文件位于最终m3u8文件中.有没有办法可以提供最终m3u8文件并告诉应用程序使用本地密钥文件来解密视频,因此我不必公开发布密钥文件.
这与这个SO问题有些相关
我想解析HLS master m3u8文件并从中获取带宽,分辨率和文件名.目前我正在使用String解析来搜索某些模式的字符串,并使用子字符串来获取值.
示例文件:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234
Stream1/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=763319,RESOLUTION=480x270
Stream2/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1050224,RESOLUTION=640x360
Stream3/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1910937,RESOLUTION=640x360
Stream4/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3775816,RESOLUTION=1280x720
Stream5/index.m3u8
Run Code Online (Sandbox Code Playgroud)
但是我发现我们可以使用这个问题中提到的正则表达式来解析它: 在Android中匹配正则表达式模式的问题
我没有任何正则表达的想法,所以有人请指导我使用正则表达式解析它.
或者有人可以帮我编写regexp来解析下面的字符串中的BANDWIDTH和RESOLUTION值
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234
Run Code Online (Sandbox Code Playgroud) 我试过http live streaming用ffmpegwindows build(http://ffmpeg.zeranoe.com/builds/)
这是命令
ffmpeg.exe -v 9 -loglevel 99 -re -i tes.avi -an ^
-c:v libx264 -b:v 128k -preset medium ^
-flags -global_header -map 0 -f segment -segment_time 4 ^
-segment_list test.m3u8 -segment_format mpegts stream%^05d.ts
Run Code Online (Sandbox Code Playgroud)
但是出现了一条错误消息,
[segment @ 045f5840] Codec for stream 0 does not use global headers but container format requires global headers
[segment @ 045f5840] Selected stream id:0 type:video
[mpegts @ 062f2540] Invalid segment filename template 'stream05d.ts'
[AVIOContext @ 04a90e00] Statistics: …Run Code Online (Sandbox Code Playgroud) 问题:
要获得将视频接收到应用商店的iOS应用,我们需要拥有HLS版本.
有什么问题?
Android不支持HLS,并且由于其他原因,我们需要存储相同内容的MP4和HLS文件.
MP4和HLS有什么区别,为什么需要同时存储?
MP4是一个存储H.264视频和AAC音频的容器,以便在HTML 5浏览器中实现最佳兼容性 - 如果浏览器不支持HTML 5中使用相同MP4文件但通过闪存播放的MP4视频,则jsvideo播放器通常会有闪回.
HLS是一种协议,其中文本文件(.m3u8)包含对播放列表的引用,播放列表本身引用.ts文件(或m2ts),它们是mpeg-2传输流,不要与mpeg-2视频混淆..ts文件是用于相同H.264视频和AAC音频的容器.
我为什么抱怨?
从MP4文件创建HLS文件和播放列表需要一些时间
(最重要的是)我们现在在S3上存储两倍的数据
我为什么要在乎?如果您的S3账单每月10美元用于存储MP4和HLS,现在只需5千美元.换句话说,如果你要花10万美元在MP4中存储数据,那么在MP4和HLS中存储相同内容将花费20万美元.
我想要什么?
我只想存储.ts文件,并为该单个文件提供桌面用户,iOS用户和Android用户.
可能吗?
HLS是否需要5-10秒的.ts段而不是一个大文件?
从IETF草案7和协议版本4开始,HLS支持标记EXT-X-BYTERANGE,它允许您将媒体段指定为较大URL的字节范围(子范围).
.ts文件是否与HTML5视频兼容?
显然不是.它们是与MP4不同的容器,但包含相同的视频和音频内容.值得研究如何存储原始视频/音频数据一次,并在必要时使用正确的容器.如果浏览器不支持HTML 5 MP4,JS视频播放器可以动态地将HTML 5 MP4文件转换为Flash视频,那么为什么不能对M2TS数据做同样的事情呢?
我可能在某种程度上无知,但也许有人可以解释这个问题,并可能提出一个解决方案.
我需要找到适用于Android的Google的HTTP直播流(HLS)源代码.
一直在使用ffmpeg通过HLS进行直播,并通过video.js播放.它可以工作,但是从流开始到实际开始播放的时间之间有20秒的延迟.
你知道为什么下面的ffmpeg命令不会像我在命令中定义的那样创建3秒的分段.细分往往是9s或10s.无法将它们缩小到更短的尺寸
ffmpeg -f x11grab -s 1280x720 -r 30 -i :0.0+nomouse -f alsa -ac 2 -i pulse -async 30 -vcodec libx264 -pix_fmt yuv420p -acodec libfdk_aac -ar 44100 -b:a 64k -threads 0 -s 640x360 -f hls -hls_time 1 -hls_list_size 1 -hls_allow_cache 0 /tmp/hls/#{@stream_name}/index.m3u8
Run Code Online (Sandbox Code Playgroud)
这是m3u8播放列表文件:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:10
#EXTINF:8.333333,
index10.ts
#EXTINF:8.333333,
index11.ts
#EXTINF:8.333333,
index12.ts
#EXTINF:8.333333,
index13.ts
#EXTINF:2.366667,
index14.ts
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud) 嗨,我正在休息一个hls流作为hls流
SETLOCAL
:loop
ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt
goto loop
Run Code Online (Sandbox Code Playgroud)
但它使用%15-20的CPU我必须在同一台服务器上制作16个流,但我不能.
我不能像下载.ts文件一样配置克隆m3u8?
我想在iOS中集成离线HLS AVFoundation.我有一个简单的AES-128加密HLS,它不希望在离线模式下玩,我是想整合AVAssetResourceLoaderDelegate,但不知道如何整合applicationCertificate和contentKeyFromKeyServerModuleWithSPCData那些在 https://developer.apple.com/streaming/fps / examples.我有一种感觉,我做错了什么,这是一个样本AES-128 encryption,甚至没有DRM.
没有互联网,AVPlayer仍然试图encryption key通过GET请求.如果有人成功地在本地保存加密密钥并以某种方式将其与之AVPlayer一起放在一起,那将是很棒的AVURLAsset.
有人设法整合这个吗?