如何从http直播流媒体m3u8文件中提取mp4?我在下面尝试了这个命令:
ffmpeg -i {input file} -f rawvideo -bsf h264_mp4toannexb -vcodec copy out.mp4
Run Code Online (Sandbox Code Playgroud)
我接受了这个错误:
[NULL @ 0000000002f07060]数据包标头未包含在全局extradata,损坏的流或无效的MP4/AVCC比特流中无法打开带有编解码器副本的流0的比特流过滤器h264_mp4toannexb:I
我想将fMP4片段转换为TS段(用于HLS),因为片段是在iOS设备上使用FFmpeg编写的.
我正在尝试在iOS上实现实时上传,同时在本地保持无缝的高清副本.
滚动AVAssetWriters,每次写入8秒,然后通过FFmpeg连接MP4.
出了什么问题 - 音频和视频有时会出现问题.我已经确定了3个原因.
1)为AAC编码器写入的音频启动帧,从而产生间隙.
2)由于视频帧长33.33ms,音频帧长0.022ms,因此它们可能不在文件末尾排队.
3)Mac OS上缺少帧精确编码,但iOS 详细信息不适用于此
FFmpeg将具有原始音频的大视频MP4文件复用到TS段中.这项工作基于Kickflip SDK
什么是错的 - 每隔一段时间,只有一个音频文件会上传,没有任何视频.永远不能在内部重现它,但当他们没有记录他们认为他们做的事情时,它对我们的用户来说非常令人沮丧.在最后一段上也存在准确搜索的问题,几乎就像TS段的时间戳错误一样.
苹果公司今年(2016年)正在WWDC推动fMP4,在此之前我还没有对它进行太多调查.由于fMP4文件可以在写入时读取和播放,我认为FFmpeg也可以在写入时对文件进行转码,只要我们阻止将字节发送到FFmpeg直到每个片段内文件完成了.
但是,我对FFmpeg C API并不熟悉,我只是在尝试#2中简单地使用它.
AVFoundation已经完成在文件中写一个片段,以便我可以将它管道输入FFmpeg?好吧,我一直试图围绕这个http直播流媒体.我只是不明白,是的,我已经阅读了所有的苹果文档并观看了wwdc视频,但仍然非常困惑,所以请帮助一个想成为一个程序员!
你写的代码在服务器上?不是在xcode?如果我是对的,我如何设置它?我需要在服务器上设置一些特殊的东西吗?喜欢php还是什么?如何使用Apple .. segmenter等提供的工具?
请帮帮我,谢谢
我想写一个小的iOS视频客户端,并且必须使用HTTP Live Streaming.视频来自支持HTTP直播流的Wowza媒体服务器,因此服务器端实现不是我的问题.我已经观看了WWDC视频,并阅读了有关HTTP直播的Apple文档.
但是没有人解释如何在iOS设备上播放视频.在WWDC中,有人提到有三个组织可以显示视频:
哪一个是最好的?
我如何从像这样的HTML页面中读出视频URL,这些是由服务器提供的?
<html>
<head>
<title>HTTP Live Streaming Example</title>
</head>
<body>
<video
src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"
height="300" width="400"
>
</video>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
(来源:Apple HTTP直播流媒体概述)
我真的不知道从哪里开始编码......也许有人比烦人的"Stitched Stream Player"知道更好的示例代码,或者可以写一点教程......
似乎两个协议都做同样的事情,但是一个优势是否优于另一个?
我正在尝试使用HTTP直播流(HLS)将视频流式传输到我的计算机和iPhone.在阅读了Apple的"HTTP直播流媒体概述"以及"为iPhone和iPad创建和部署HTTP直播流媒体的最佳实践"后,我有点陷入困境.
我拿了我的源文件(mkv)并使用ffmpeg对MPEG-TS格式和Apple推荐的设置以及Baseline 3.0配置文件进行编码:
ffmpeg -i "example.mkv" -f mpegts -threads:v 4 -sws_flags bicubic -vf "scale=640:352,setdar=16/9,ass=sub.ass" -codec:v libx264 -r 29.970 -b:v 1200k -profile:v baseline -level:v 3.0 -movflags faststart -coder 1 -flags +loop -cmp chroma -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -me_method hex -subq 6 -me_range 16 -g 239 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 1 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -direct-pred 1 -fast-pskip 1 -af "aresample=48000" -codec:a libvo_aacenc -b:a 96k -ac 2 -y "output.ts"
Run Code Online (Sandbox Code Playgroud)
不用担心.我使用预编译的分段工具来分割视频并构建.m3u8播放列表.结果文件如下所示:
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
http://localhost/media/stream/stream-1.ts
#EXTINF:10, …Run Code Online (Sandbox Code Playgroud) 过去几年似乎几次都没问过这个问题,但没有人回答这个问题.我正在尝试从HLS处理PCM数据,我必须使用AVPlayer.
这篇文章点击本地文件 https://chritto.wordpress.com/2013/01/07/processing-avplayers-audio-with-mtaudioprocessingtap/
这个点击工作与远程文件,但不与.m3u8 hls文件. http://venodesigns.net/2014/01/08/recording-live-audio-streams-on-ios/
我可以在播放列表中播放前两个曲目,但它不会启动所需的回调来获取pcm,当文件是本地或远程(不是流)我仍然可以得到pcm但是它是hls不工作而我需要HLS工作
这是我的代码
//avplayer tap try
- (void)viewDidLoad {
[super viewDidLoad];
NSURL*testUrl= [NSURL URLWithString:@"http://playlists.ihrhls.com/c5/1469/playlist.m3u8"];
AVPlayerItem *item = [AVPlayerItem playerItemWithURL:testUrl];
self.player = [AVPlayer playerWithPlayerItem:item];
// Watch the status property - when this is good to go, we can access the
// underlying AVAssetTrack we need.
[item addObserver:self forKeyPath:@"status" options:0 context:nil];
}
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if(![keyPath isEqualToString:@"status"])
return;
AVPlayerItem *item = (AVPlayerItem *)object;
if(item.status != AVPlayerItemStatusReadyToPlay)
return;
NSArray *tracks = [self.player.currentItem tracks]; …Run Code Online (Sandbox Code Playgroud) 有没有办法获取像这样的YouTube直播流的HLS URL https://www.youtube.com/embed/WVZpCdHq3Qg
我尝试了典型的get_video_info方法以及付费服务(http://ytapi.gitnol.com/),但它们似乎不适用于实时流.
youtube youtube-api http-live-streaming youtube-data-api youtube-livestreaming-api
默认情况下,m3u8文件可以在Mac Safari浏览器中播放,但不能在任何其他桌面浏览器中播放.在所有浏览器中都需要做些什么来支持HTML5和非HTML5?
我有个问题.我想从我的网络摄像头用ffmpeg进行直播.
从另一个终端我使用此命令启动ffmpeg流,它可以工作:
sudo ffmpeg -re -f video4linux2 -i /dev/video0 -fflags nobuffer -an http://localhost:8090/feed1.ffm
Run Code Online (Sandbox Code Playgroud)在我的配置文件中,我有这个流:
<Stream test.webm>
Feed feed1.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 720x576
VideoFrameRate 25
# Video settings
VideoCodec libvpx
VideoSize 720x576 # Video resolution
VideoFrameRate 25 # Video FPS
AVOptionVideo flags +global_header # Parameters passed to encoder
# (same as ffmpeg command-line parameters)
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42
#AVOptionVideo quality good
PreRoll 5
StartSendOnKey
VideoBitRate 400 # Video bitrate
</Stream>
Run Code Online (Sandbox Code Playgroud)我用它启动流
ffplay …